今天在将windows下的脚本文件通过scp命令,发送到远程服务器上,在执行过程中遇得到了这个问题
./sh.sh
-bash: ./sh.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录
原因分析:windows下,每一行的结尾是\n\r,而在linux下文件的结尾是\n,那么在windows下编辑过的文件在linux下打开看的时候每一行的结尾就会多出来一个字符\r,用cat -A urfile时你可以看到这个\r字符被显示为^M,这时候只需要删除这个字符就可以了,可以使用命令 sed -i ‘s/\r$//’ filename。
cat -A sh.sh
#!/bin/bash^M$
# ^M$
^M$
echo "Hello World"^M$
sed -i 's/\r//' sh.sh
./sh.sh
Hello World
你好