2013-07-12 131 views
0

我有以下腳本代碼:使用文件輸入作爲標準輸入shell腳本不起作用

$./test.sh <input.txt 

test.sh

echo "BEGIN" 
while read CMD <&1; do 
    [ -z "$CMD" ] && continue 
    case "$CMD" in 
    start) 
      echo "get_start" 
      ;; 
    stop) 
      echo "get_stop" 
      ;; 
    *) 
      echo "get_uknown_command" 
      ;; 
    esac 
    echo "END"; 
done 

當我運行

我得到我的劇本鎖定

我nput.txt

start 
stop 
sthh 

爲什麼我的腳本被鎖定?我如何解決這個問題?

順便說一句:如果我手動輸入數據,那麼腳本不會鎖定。

回答

3

你需要什麼<&1? 刪除它,它的工作原理。

while read CMD; do

./test.sh < input.txt 
BEGIN 
get_start 
END 
get_stop 
END 
get_uknown_command 
END 
+0

它的工作原理。謝謝。解釋爲什麼它不適用於1? – MOHAMED

+0

我在使用這段代碼時不小心。 '<&1'表示從stdout獲得。所以我的腳本期望從stdout輸入數據而不是stdin。用'<&0'改變它將起作用。 – MOHAMED

+0

謝謝你的回答(+1)並接受 – MOHAMED

相關問題