Bashの最初の行の後にwhileループが読み取りを停止する質問

Bashの最初の行の後にwhileループが読み取りを停止する質問

次のシェル スクリプトがあります。その目的は、ターゲット ファイル (そのパスはスクリプトへの入力パラメータ) の各行をループし、各行に対して処理を実行することです。現在、ターゲット ファイルの最初の行でのみ機能し、その行が処理された後に停止するようです。私のスクリプトに何か問題があるのでしょうか?

#!/bin/bash
# SCRIPT: do.sh
# PURPOSE: loop thru the targets 

FILENAME=$1
count=0

echo "proceed with $FILENAME"

while read LINE; do
   let count++
   echo "$count $LINE"
   sh ./do_work.sh $LINE
done < $FILENAME

echo "\ntotal $count targets"

ではdo_work.sh、いくつかのsshコマンドを実行します。

ベストアンサー1

問題は、コマンドdo_work.shを実行しssh、デフォルトでssh入力ファイルである stdin から読み取ることです。その結果、コマンドがファイルの残りの部分を消費し、while ループが終了するため、処理された最初の行のみが表示されます。

これは だけでなく、 、、、、など、sshstdin を読み取るすべてのコマンドで発生します。mplayerffmpegHandBrakeCLIhttpiebrew install

これを防ぐには、コマンド-nにオプションを渡して、stdin ではなくsshから読み取るようにします。他のコマンドにも同様のフラグがありますが、一般的に を使用することもできます。/dev/null< /dev/null

おすすめ記事