Shell報錯bash^M /bin/bash^M: bad interpreter: No such file or directory
問題:
在windows上寫的一個shell指令碼,在Linux上報錯,vim開啟的時候看了沒有啥問題,這種情況遇到很棘手,明明沒有問題的指令碼怎麼會報錯。
後來直接在另外一臺linux機器scp傳過來的同樣的指令碼就沒問題。第一個指令碼因為在windows上做過修改,所以懷疑是系統之間的預設編碼不同導致的報錯。報錯內容是^M,所以查詢這個報錯。
解決方法:
如果是單個檔案的話,直接vim開啟,命令模式用set ff?檢視一下編碼是dos還是unix,如果是dos直接用set ff=unix就可以了,如果是批量檔案的話,找到下面的方法(用sed或者vim進行替換的時候打^M不是shift+6,而是Ctrl+v+m):
基於 DOS/Windows 的文字檔案在每一行末尾有一個 CR(回車)和 LF(換行),
而 UNIX 文字只有一個換行,即win每行結尾為\r\n,而linux只有一個\n,
如果win下的文件上傳到linux,每行的結尾都會出現一個^M,(^M是ctrl+v,ctrl+m)
如果是單個文件的話,可以用vi開啟,執行 :%s/^M//g 來去掉^M,但如裡批量去
除的話就不能用vi了,
方法1: 用dos2unix工具,把win文件轉換成linux下文件命令:
find ./ -type f -print0 | xargs -0 dos2unix
如果想把linux下的文件轉換成win下的:
find . / -type f -print0 | xargs -0 unix2dos方法2: 用sed命令把win文件
轉換成linux下文件:
find ./ -type f print0 | xargs -0 sed -i 's/^M$//'
把linux下的文件轉換成win下的
fild ./ -type f print0 | xargs -0 sed -i 's/$/^M/'
作者:小幕
連結:https://www.zhihu.com/question/22130727/answer/33814375
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。