Bash
Cygwin中讀取行腳本的問題
我在使用 Cygwin 的 Windows 7 上。
我的腳本和文本文件位於同一目錄中。
#!/bin/bash while read name; do echo "Name read from file - $name" done < /home/Matt/servers.txt
我收到此錯誤,但我不知道為什麼,因為這是正確的 while 循環語法..?
u0146121@U0146121-TPD-A ~/Matt $ ./script.sh ./script.sh: line 4: syntax error near unexpected token `done' ./script.sh: line 4: `done < /home/Matt/servers.txt'
誰能告訴我我做錯了什麼?我認為這是因為我在 Windows 上並使用 Cygwin。
正如ott–所指出的,您的腳本有行尾。這在 中更明顯。
CR LF``od
$ od -c script 0000000 # ! / b i n / b a s h \r \n w h i 0000020 l e r e a d n a m e ; d o 0000040 \r \n e c h o " N a m e r e a 0000060 d f r o m f i l e - $ n 0000100 a m e " \r \n d o n e < / h o 0000120 m e / M a t t / s e r v e r s . 0000140 t x t \r \n 0000145
如您所見,每行末尾都有
\r
(輸入)和(換行)字元,而您應該只有字元。這是 Windows 和 *nix 系統之間的兼容性問題的結果。Bash 很難處理這些角色。\n``\n``\r
您可以使用類似實用程序
dos2unix
或執行以下行來修復腳本。sed -i 's/\r$//' script