-bash: ./switch.sh: /bin/bash^M: bad interpreter: No such file or directory

xuyaowen發表於2018-05-13

問題:

       偶然使用 windows 進行編寫指令碼。使用 wsl (windows subsystem for linux) 進行執行的時候,什麼事情沒有。但是當把指令碼移植到遠端伺服器進行執行的時候,發現指令碼執行出現了錯誤:-bash: ./switch.sh: /bin/bash^M: bad interpreter: No such file or directory 。一時間解決不了。理論上都使用wsl 執行過了,應該是沒問題了。但是通過查詢資料發現,確實是有問題:

思考:

       應該是就是windows 中 CRLF 與 linux 或者Unix類系統中的 LF 之間的區別。這段時間聽說,window 即將更正CRLF 這個換行。想必到時應該就沒有上述的問題了。同時我們也可以證明發現。在windows subsystem for linux 中,其是相容windows的 CRLF 的這種格式的。

解決方法:

      1. 使用 vim/vi 中的 命令

:set ff=unix

  2. 使用 bash 中的dos2unix 命令,來進行檔案格式轉換。這個操作可以在伺服器上,也可以使用windows subsystem linux 完成。 如果系統中沒有 dos2unix 工具,那麼你可能需要使用 yum / apt / dnf / pacman 之類的 包管理軟體,進行安裝一下了。

DESKTOP-05DDFQ6# dos2unix runmake.sh
dos2unix: converting file runmake.sh to Unix format ...

 轉載請註明出處. 2018年5月13日

 

相關文章