问题描述
有时候编写shell脚本时会出现类似标题列出的错误,这个问题大多数是因为你的脚本文件在windows下编辑过且保存方式不当。
下面演示此种问题出现的过程:
一个在windows系统下编辑过的shell脚本,只是当做普通文本保存,使用xftp软件传输到Centos中后,尝试运行。
首先更改文件权限,然后执行脚本,发现报错:-bash: ./shell1: /bin/bash^M: 解释器错误: 没有那个文件或目录。出现这个问题是因为你的脚本文件在windows下编辑过且保存方式不当。windows下,每一行的结尾是\n\r,而在linux下文件的结尾是\n,那么你在windows下编辑过的文件在linux下打开看的时候每一行的结尾就会多出来一个字符\r。
解决方法1
sed -i 's/\r$//' 文件名
如下图,在使用上述方法后,shell脚本可以正常运行。此处的!1041是因为我之前使用过该命令,使用history命令直接调用sed -i 's/\r$//' shell1。
解决方法2
在windows系统中编辑时,直接保存在.sh文件。
为了避免出现这种情况,建议在windows编辑脚本后直接保存为.sh格式,而不是其他形式,这样可以从根本上解决上述问题。
下面演示方法,这里我使用的代码编辑器是sublime text,其他代码编辑器大同小异。在其中编辑shell脚本后,保存类型选择Bash,文件名显示为Test.sh。
这时使用xftp将文件传输到Centos。
在Centos中更改权限,然后执行,可以发现没有报-bash: ./shell1: /bin/bash^M: 解释器错误: 没有那个文件或目录的错误。
版权声明:本文为shuyan1115原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。