Bash
為什麼我收到“第 1 行:$’:r’: command not found”?
我在筆記型電腦 (DOS) 上使用 Cygwin。我收集了同事和我自己的腳本。我不是 IT 人員,不熟悉 Unix。我遵循我同事的語法並且能夠管理一些簡單的事情。
這些腳本在我的舊筆記型電腦上執行良好。我剛剛更換了筆記型電腦並安裝了 Cygwin。當我執行我的腳本時,它們不起作用。這是我收到的錯誤消息的一個範例:
line 1: $':\r': command not found line 5: syntax error near unexpected token `$'\r'' line 5: `fi
這是我腳本的前 5 行
: iter=1 if [ -f iter.txt ] then rm ./iter.txt fi
有人可以解釋我如何解決這個問題嗎?
您有 Windows 樣式的行尾。
將 no-op 命令
:
讀作:<carriage return>
,顯示為:\r
或更完整地顯示為$':\r'
。跑吧
dos2unix scriptname
,你應該沒事的。如果您沒有
dos2unix
,則以下內容幾乎可以在任何地方使用(我在 Windows 上的 MobaXterm 上進行了測試):vi -b filename
然後在 中
vi
,鍵入::%s/\r$// :x
你可以走了。
在
vim
中,這是您在 Cygwin 上使用的vi
,有多種方法可以做到這一點。另一個涉及fileformat
設置,它可以取值dos
或unix
。在載入文件後顯式更改它設置文件格式=unix
或在寫出文件時顯式強製文件格式
: w + 文件格式 = unix
有關這方面的更多資訊,請參閱此處涵蓋此主題的許多問題和答案,包括: