Linux

使用文件輸入作為 shell 腳本的標準輸入不起作用

  • July 12, 2013

我有以下腳本程式碼:

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

當我執行它時:

$./test.sh <input.txt

我的腳本被鎖定

輸入.txt

start
stop
sthh

為什麼我的腳本被鎖定?我該如何解決?

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

您的第二行不正確,而且無論如何都過於復雜。、 和的文件描述符分別是、stdin和,因此要從中讀取,您需要stdout``stderr``0``1``2``stdin

while read CMD <&0; do 

但是,由於stdin是 的預設輸入read

while read CMD; do

確實是最簡單的方法。這樣,您可以手動輸入命令,或在命令行上使用重定向來讀取文件。

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