ファイルから行を読み取り、それらの行でいくつかのロジックを実行する bash スクリプトがあります。
そう
while read line;
do
# some stuff
done < "$1"
while ループの本体では、1 つのコマンドの出力を にパイプしていますtee
。この出力が非常に大きい場合 (100K 程度)、read line の次の呼び出しが失敗し、ファイル内のすべての行が読み取られる前に while ループが終了します。
なぜこれが起こるのですか?私は bash の専門家ではありませんが、何らかのバッファ オーバーフローが発生しているようです。もしそうなら、どうすればこれを修正できますか?
ありがとう
編集:したがって、いくつかの明確化が必要です。$1 は、ファイル名に対応する bash スクリプトに与えられる最初のコマンド ライン引数です。私が正確に行っているのは、入力ファイルの各行をパラメーターとして別のプログラムに渡すことです。そのプログラムの stdout と stderr を| tee -a somefile
私が入力しているプログラムは非標準です。私が読んでいるファイルの行によっては、このプログラムの出力が非常に大きくなる可能性があります。
だから私がやっていることのより詳細な例は
while read line;
do
setSomeVar1
setSomeVar2
program --output="$setSomeVar1" -options "$line" 2>&1 | tee -a "$setSomeVar2"
done < "$1"
ありがとう、
-D