次のスクリプトコードがあります。
テストファイル
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
私のスクリプトはなぜロックされていますか?この問題をどのように解決できますか?
注:データを手動で入力すると、スクリプトはロックされません。
ベストアンサー1
とにかく、2行目は不正確で過度に複雑です。これファイル記述子、stdin
、stdout
はstderr
それぞれ0
、1
、 なので、必要な内容を2
読むstdin
while read CMD <&0; do
しかしstdin
の基本入力はなのでread
、
while read CMD; do
これが実際に最も簡単な方法です。この方法でコマンドを手動で入力するか、コマンドラインからリダイレクトを使用してファイルを読み取ることができます。