2010-04-09 65 views
5

好吧,我有這個問題。我寫了一個腳本在Windows上運行在cygwin上。我已經嘗試了一堆基本的示例腳本,以防腳本問題。Bash Shell;讀命令;在Windows 7上使用Cygwin

所以,我想這一點:

#!/bin/bash 
echo -e "Enter your name and press [ENTER]: \c" 
read var_name 
echo "Your name is: $var_name" 

然後我會運行它,我對VAR_NAME輸入一個名稱。

我得到這個:

$ ./project1.sh 
Enter your name and press [ENTER]: Jake 
': not a valid identifierad: `var_name 
Your name is: 

所以據我瞭解我有讀的問題。我正在努力爲我的課程開展一個項目,但我似乎無法弄清楚爲什麼它不會讀取它。我跟着這本書沒有勝利,然後在網絡上訴諸這些例子,這些例子似乎也不適合我。有沒有人有任何想法,如果這是我的設置或如果我失去了一些東西,謝謝。

+0

對於它的價值,您的示例在我的Cygwin和Linux環境中均可正常工作。試試這個最簡單的例子,看看它是否適用於你:'閱讀NAME; echo $ NAME' – meagar 2010-04-09 00:24:24

+0

謝謝。這是一個編輯問題。我正在使用Windows編輯和保存,而不是vi編輯器,所以我現在就開始工作。感謝您對它進行測試。 – CrazyGrunt 2010-04-09 01:11:48

回答

9

你應該對劇本做一個od -xcb。我的猜測是,它幾乎肯定會有錯誤的行結束字符。

的原因,我認爲這是因爲該行:

': not a valid identifierad: `var_name 

看上去非常像兩行:

.........................ad: `var_name 
': not a valid identifier 

合併在一起(其中.字符表示東西是被覆蓋)。

這將是,如果你在該行的變量是v一個[R_ň一個米Ë回車,而不是更加正常的情況下var_name

Cygwin的事實也指出了這個結論,因爲當你編輯你的腳本時,經常會遇到麻煩,因爲編輯器使用CR/LF,而Cygwin只需要LF。

我懷疑你會發現在你的實際腳本上做一個od -xcb表明你在一條或多條腳本行上有這些Windows行結束符。


事實上,我只是通過把一個CTRL-M在剛剛read行的末尾測試了這個在Ubuntu下,輸出爲(略作修改,以顯示CTRL-M):

[email protected]:~$ od -xcb qq.sh ; ./qq.sh 

0000000 2123 622f 6e69 622f 7361 0a68 6365 6f68 
      # ! / b i n / b a s h \n e c h o 
     043 041 057 142 151 156 057 142 141 163 150 012 145 143 150 157 
0000020 2d20 2065 4522 746e 7265 7920 756f 2072 
       - e  " E n t e r  y o u r  
     040 055 145 040 042 105 156 164 145 162 040 171 157 165 162 040 
0000040 616e 656d 6120 646e 7020 6572 7373 5b20 
      n a m e  a n d  p r e s s  [ 
     156 141 155 145 040 141 156 144 040 160 162 145 163 163 040 133 
0000060 4e45 4554 5d52 203a 635c 2022 720a 6165 
      E N T E R ] :  \ c "  \n r e a 
     105 116 124 105 122 135 072 040 134 143 042 040 012 162 145 141 
0000100 2064 6176 5f72 616e 656d 0a0d 6365 6f68 
      d  v a r _ n a m e \r \n e c h o 
               ^^ 

     144 040 166 141 162 137 156 141 155 145 015 012 145 143 150 157 
0000120 2220 6f59 7275 6e20 6d61 2065 7369 203a 
       " Y o u r  n a m e  i s :  
     040 042 131 157 165 162 040 156 141 155 145 040 151 163 072 040 
0000140 7624 7261 6e5f 6d61 2265 0a0a 
      $ v a r _ n a m e " \n \n 
     044 166 141 162 137 156 141 155 145 042 012 012 
0000154 

Enter your name and press [ENTER]: Pax 
': not a valid identifierar_name 
Your name is: 

在其它文字,非常類似於你所看到的


順便說一句(現在,我有機會到我的Cygwin環境),你看到的是輸出:

abcdefghij.sh: line 99 read: `var_name 
`: not a valid identifier 

其中第二線覆蓋第一,贈送:

`: not a valid identifierad: `var_name 

換句話說,在陌生的詞identifierad實際上是由的identifierread:最終ad:。之所以和上面的例子類似(相對於確切的例子)是因爲你的文件名和行號與我的小測試腳本不同。

+4

你可以使用[dos2unix](http://www.linuxmanpages.com/man1/dos2unix.1.php)修復它。 – 2010-04-09 00:50:34

+0

或者只是使用vi,因爲$ {DEITY:-GreatGreenArkleseizure}意圖:-) – paxdiablo 2010-04-09 00:53:39

+0

好吧,我用vi編輯器重寫了它,像一個魅力一樣工作。很高興能夠克服挫折的障礙,哈哈。非常感謝。 – CrazyGrunt 2010-04-09 01:10:26

1

您可以使用read來提示用戶。無需要echo

read -r -p "Enter your name and press: " var_name 
+0

好吧,我試過了,在這一點上我的猜測是這是我的設置有問題。當我像以前一樣使用該行和輸出時,我得到和以前一樣的錯誤。謝謝你的快速反應。 – CrazyGrunt 2010-04-09 00:23:00