Bash

Cygwin中讀取行腳本的問題

  • April 27, 2016

我在使用 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

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