今天在將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
你好