dos下编辑过sh脚本后无法运行

情景:
同样的的脚本,在不同的机器下运行有的可以成功,有的运行失败,
前提:sh脚本windos下编辑过。

脚本在windows上修改之后,在每行尾部多了个 ^M,导致sh脚本在执行的时候可能shbang解析不了,导致脚本执行不了
报错 Syntax error: “(” unexpected (expecting “then”) 语法解析错误

解决:
在Linux查看^M,需要使用如下命令:
vim下 :e ++ff=unix %

去掉^M的方法:

1.在 Vim 的命令模式中输入 :%s/^M$//g 后,回车即会自动删除该文件中的所有 ^M 字符。
^M 注意要用 Ctrl + V Ctrl + M 来输入
2.cat filename1 | tr -d "\r" > newfile

  1. sed -e "s/^V^M//" filename > outputfilename
    4.tr -d ‘\015‘ < filename> newfile

简单的,直接使用dos2unix, 将dos下的文件转换成unix文件,可以将后面的^M去掉。

原文地址:https://www.cnblogs.com/0916m/p/12014133.html

时间: 2024-10-10 22:03:14

dos下编辑过sh脚本后无法运行的相关文章

为微信小程序开发做准备,在Centos 6.8下利用letsencrypt.sh脚本为nginx 配置免费https证书

原文链接: http://phpecshop.blog.51cto.com/6296699/1891737 最近在做微信小程序商城开发的时候,阅读官方api文档发现要求https,的路程. wx.request(OBJECT) wx.request发起的是 HTTPS 请求. 于是开始了在Centos 6.8下利用letsencrypt.sh脚本为nginx 配置免费https(Let's Encrypt SSL证书) 1.下载letsencrypt.sh # wget https://raw.

汇编题目:在DOS下,按F1键后改变当前屏幕的显示颜色

我们都知道int9中断是键盘的按键中断程序,按下键盘触发int9中断,不懂int9中断的请自己去百度查查说明和用法 利用中断任务安装一个新的int 9中断例程,功能:在DOS下,按F1键后改变当前屏幕的显示颜色,其他的键照常处理. ;任务:安装一个新的int 9中断例程, ;功能:在DOS下,按F1键后改变当前屏幕的显示颜色,其他的键照常处理. assume cs:code stack segment db 30h dup(0) stack ends data segment db 20h du

python编写执行指定路径下的hotup.sh脚本

#!/usr/bin/env python #coding:utf-8 import os import re import sys num = [] game_gen_path = '/data/bz-tw-and/' for dirs in os.listdir(game_gen_path): if re.match('s\d+',dirs): num.append(dirs[1:]) number = sorted(map(int,num)) def callable(input_args

Ubuntu下默认sh脚本 双击运行

ctrl-alt-t呼出控制台. 输入dconf-editor,无需sudo,表示为当前用户配置. (现在ubuntu 14.04包库已经提供了dconf-editor,如果没有提供可用apt-get install dconf-editor 命令来获得) 出来一个窗口,找到这个键值路径 org.gnome.nautilus.preferences,旗下有executable-text-activation这个键值,默认是display,也就是开默认文本编辑器.改为ask. 如果想改回去就点右下

windows系统下编写的sh拷贝到ubuntu后执行出错:/usr/bin/env: ‘bash\r’: No such file or directory

用 ./ 运行bash脚本文件出现 报错信息 /usr/bin/env: "bash\r": 没有那个文件或目录 错误原因:这主要是因为bash后面多了\r这个字符的原因.在linux终端下,输出\r会什么都不显示,只是把光标移到行首.于是终端虽然输出了/usr/bin/env bash,但是碰到\r后,光标会被移到行首,接着输出了:No such file or directory把前面的覆盖掉了.于是出现了那个莫名其妙的出错信息了 解决办法: 用vim打开sh脚本文件, 重新设置文

linux下sh脚本定时删除文件

一.sh脚本如下: #!/bin/sh location="/home/sharedir/" find $location -mtime +30 -type f |xargs rm -f 保存命名为del.sh 另外两种查找相关文件的方法如下: 1)find  /home/sharedir/  -mtime +30 -type f -name *.gz 2)find  /home/sharedir/  -mtime +30 -type f |xargs 二.使用crontab -e 定

sh脚本的dos和unix

最近集群迁移,新给的客户端执行sh,报错,找到了一篇很好的文章:http://blog.chinaunix.net/uid-20621895-id-196639.html 虽然很简单,但是之前都不知道这些查看命令,学习了: 在执行shell脚本时提示这样的错误主要是由于shell脚本文件是dos格式,即每一行结尾以\r\n来标识,而unix格式的文件行尾则以\n来标识.  查看脚本文件是dos格式还是unix格式的几种办法.(1)cat -A filename  从显示结果可以判断,dos格式的

Oracle:GRID 下 root.sh 脚本

root.sh脚本主要用于完成对集群的初始化和很多配置任务 一.内容 $GRID_HOME/install/utl/rootmacro.sh:负责一些和GI_HOME相关的验证工作 $GRID_HOME/install/utl/rootinstall.sh:负责创建一些本地文件 $GRID_HOME/network/install/sqlnet/setowner.sh:负责创建GI相关的临时文件 $GRID_HOME/rdbms/install/rootadd_rdbms.sh:负责验证一些文件

DOS常用命令,及DOS下可运行程序命令

一.内部基本指令(文件操作) 1 dir 无参数:查看当前所在目录的文件和文件夹. /s:查看当前目录已经其所有子目录的文件和文件夹. /a:查看包括隐含文件的所有文件. /ah:只显示出隐含文件. /w:以紧凑方式(一行显示5个文件)显示文件和文件夹. /p:以分页方式(显示一页之后会自动暂停)显示. |more:前面那个符号是"\"上面的那个,叫做重定向符号,就是把一个 命令的结果输出为另外一个命令的参数.more也是一个命令,dir /w |more 得到的结果和dir /w /