2013-04-08 84 views
0

我試圖運行包含的命令/腳本的順序以參數運行文件,就像讀時終止早:擊:雖然從文件

ls /etc/ 
cat /etc/hosts/ 
script.sh some parameters 
... 

這似乎很好地工作,但在某些情況下, while循環將過早結束。只有當它正在執行的腳本最後包含SSH/SCP時,情況纔是如此。該代碼讀取文件:

while IFS= read -r line 
do 
    # Cut command and parameters 
    IFS=', ' read -a parameters <<< "$line" 
    cmd="${parameters[0]}" 
    unset parameters[0] 
    runScriptAndCheckError "$cmd" "${parameters[@]}" 
done < "$SCRIPT_FILENAME" 

使用時設置-x:

+ checkError 0 'ERROR: script.sh failed' 
+ '[' 0 -ne 0 ']' 
+ IFS= 
+ read -r line 

它看起來像有沒有更多的投入雖然還有文件中的行。如果我註釋掉runScriptAndCheckError「$ cmd」「$ {parameters [@]}」,那麼它會打印更多的行。

我不確定這段代碼有什麼問題。如果有人能請求幫助,我會非常有幫助。

回答

2

如果runScriptAndCheckError也從標準輸入讀取,它將從$SCRIPT_FILENAME讀取行。已在while循環的read命令使用不同的文件描述符:

while IFS= read -r line <&3; do 
    ... 
done 3< "$SCRIPT_FILENAME" 
+0

非常感謝您!這工作,非常感謝! – user1777907 2013-04-08 18:42:59