windows编辑shell文件报错 /bin/sh^M: 坏的解释器

问题说明

遇到在Windows编辑shell文件后,在centos上执行,提示 sh: /bin/sh^M: 坏的解释器: 没有那个文件或目录

通过命令 cat -A  test.sh 查看,会出现很多 ^M$ 符号

 

错误原因

sh文件在windows下编辑过,在windows下,每一行的结尾是\n\r,而在linux下文件的结尾是\n,那么你在windows下编辑过的文件在linux下打开看的时候每一行的结尾就会多出来一个字符\r,用cat -A fileName时你可以看到这个\r字符被显示为^M,这时候只需要删除这个字符就可以了

 

解决方式

把  test.sh 中的\r 替换成空白

sed -i 's/\r$//' test.sh && /path/test.sh