Bash

為什麼我收到“第 1 行:$’:r’: command not found”?

  • October 25, 2020

我在筆記型電腦 (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設置,它可以取值dosunix。在載入文件後顯式更改它

設置文件格式=unix

或在寫出文件時顯式強製文件格式

: w + 文件格式 = unix

有關這方面的更多資訊,請參閱此處涵蓋此主題的許多問題和答案,包括:

引用自:https://unix.stackexchange.com/questions/391223