[解決済み] BashでWhileループが1行目で読み込みを停止する場合
2022-07-03 20:29:10
質問
次のようなシェルスクリプトがあります。目的は、ターゲット ファイル (そのパスはスクリプトへの入力パラメータです) の各行をループして、各行に対して作業を行うことです。現在、ターゲットファイルの最初の行に対してのみ動作し、その行が処理された後に停止しているようです。私のスクリプトに何か問題があるのでしょうか?
#!/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
コマンドを実行します。
どのように解決するのですか?
問題点は
do_work.sh
が実行される
ssh
コマンドを実行し、デフォルトでは
ssh
は入力ファイルである stdin から読み込みます。その結果、コマンドはファイルの残りを消費して while ループが終了するため、処理された最初の行だけが表示されます。
この現象は
ssh
だけでなく、stdin を読み取るすべてのコマンド、たとえば
mplayer
,
ffmpeg
,
HandBrakeCLI
などなど。
これを防ぐには
-n
オプションを
ssh
コマンドから読み込むようにします。
/dev/null
から読み込むようにします。他のコマンドにも同様のフラグがありますし、普遍的に
< /dev/null
.
関連
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashでコマンドライン引数を解析するには?
-
[解決済み] Bashでコマンドの出力に変数を設定するにはどうすればよいですか?
-
[解決済み] Bashで文字列の配列をループする?
-
[解決済み] Bashでファイルの中身をループする
-
[解決済み] 好ましいBashのシェバングとは?
-
[解決済み] コマンドラインから .bash_profile を再読み込みする方法は?
-
[解決済み] シェルコマンドを実行しながらエコーする方法
-
[解決済み] Bashでの単一行whileループの構文
-
[解決済み] Bashコマンドからテキストファイルの内部を検索・置換する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「ambiguous redirect」エラーが発生する
-
[解決済み】SEDをワイルドカードで使用する場合
-
[解決済み] bash : cd : 引数が多すぎる [閉店].
-
[解決済み] cmake execute_process COMMAND [重複]。
-
[解決済み] スクリプトからのエラーメッセージを含むすべての端末出力をログファイルにパイプする方法
-
[解決済み] bash スクリプトを実行しているドッカーエントリーポイントが "パーミッション拒否" になる
-
[解決済み] bashスクリプトで変数の束縛を解除
-
[解決済み] ConcatenationとAppendの違いについて【終了しました
-
npm err インストールエラーの解決策
-
[解決済み] Grep 'binary file matches'. どうすれば正常なgrepの出力が得られるか?[重複]する