2009-08-04 111 views
1

以下是我爲在參數/輸入文件input上運行可執行文件./runnable而編寫的腳本。讀取文件時在bash腳本中出錯

它從另一個名爲final_file的文件獲取標準輸入,並將其輸出到名爲outfile的文件。 final_file中有91行(即91個不同的標準空格分隔輸入),因此bash腳本應該調用./runnable輸入91次。

但是,我不確定它爲什麼只調用它一次。關於發生了什麼問題的任何建議?

#!/bin/bash 

OUTFILE=outfile 
(

a=0 

while read line 
do 

    ./runnable input 
    echo "This is line number: $a" 
    a='expr $a+ 1' 

done<final_file 

) >$OUTFILE 

爲了澄清,該final_file貌似

_ _DATA_ _ 
2,9,2,9,10,0,38 
2,9,2,10,11,0,0 
2,9,2,11,12,0,0 
2,9,2,12,13,0,0 
2,9,2,13,0,1,4 
2,9,2,13,3,2,2 

等。一次一行是標準輸入。 final_file中的行數對應於標準輸入的次數。所以在上述情況下,腳本應該運行六次,因爲有六行。

回答

3

我會大膽地說,./runnable尋求一路過關斬將標準輸入。由於沒有輸入到readwhile循環在一次迭代之後結束。

推理:你的榜樣對我的作品(TM),爲final_file替換文件我碰巧有(/etc/services)和註釋掉調用./runnable行。

在另一方面,如果我有一個班輪簡單地尋求並丟棄標準輸入替換./runnable調用(例如,cat - > /dev/nullperl -ne 1),我給你描述的行爲。

(請注意,你要反引號或$()呼叫周圍expr

0
  • 對於某些調試輸出,使用-x 選項運行您的shell腳本。
  • 添加echo $line後您的while read line; do
  • 注意while read line; do echo $line; done不讀空格分開輸入時,它讀取分開輸入。
+0

@Zan:這樣做是確認的事實,該腳本只讀取「finalfile」,而不是休息的第一道防線。但是,我想知道如何解決這個問題,或者是怎麼解決這個問題。 – shubster 2009-08-04 19:52:28