次のシェル スクリプトがあります。その目的は、ターゲット ファイル (そのパスはスクリプトへの入力パラメータ) の各行をループし、各行に対して処理を実行することです。現在、ターゲット ファイルの最初の行でのみ機能し、その行が処理された後に停止するようです。私のスクリプトに何か問題があるのでしょうか?
#!/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 ループが終了するため、処理された最初の行のみが表示されます。
これは だけでなく、 、、、、など、ssh
stdin を読み取るすべてのコマンドで発生します。mplayer
ffmpeg
HandBrakeCLI
httpie
brew install
これを防ぐには、コマンド-n
にオプションを渡して、stdin ではなくssh
から読み取るようにします。他のコマンドにも同様のフラグがありますが、一般的に を使用することもできます。/dev/null
< /dev/null