這是典型的Windows換行符(CRLF)導致的腳本不能在Linux/Unix環境下正常執行的問題。
Linux 期望的是 LF (\n
),而 Windows 是 CRLF (\r\n
),所以腳本文件的第一行解釋器路徑后多了一個不可見的 ^M
(回車符),導致找不到解釋器。
解決辦法:
1. 使用 dos2unix
工具轉換
如果你的服務器有安裝 dos2unix
,直接執行:
dos2unix restart.sh
然后再執行腳本就沒問題了。
2. 用 sed
命令轉換
sed -i 's/\r$//' restart.sh
3. 用 vim
手動轉換
vim restart.sh
進入 vim 后,輸入命令:
:set fileformat=unix
:wq
4. 在Windows保存時指定Unix格式
如果你用的是 Windows 的文本編輯器(如 VSCode、Notepad++),保存文件時選中換行符格式為 LF (Unix),而不是 CRLF (Windows)。
解決后你就能正常執行腳本了。