ファイルを出力する前処理コマンドがあります。
./preprocess.sh > preprocessed_file
preprocessed_file
そう使用される
while read line
do
./research.sh $line &
done < preprocessed_file
rm -f preprocessed_file
while read line
preprocessed_fileとして出力するのではなく、そのセクションに直接出力する方法はありますか?私はこの一時的な従業員を使用するよりも良い方法があるべきだと思いますpreprocessed_file
。
答え1
はい!プロセスパイプラインを使用できます|
。
./preprocess.sh |
while IFS= read -r line
do
./research.sh "$line" &
done
プロセスパイプは、あるプロセスの標準出力()を次のプロセスのstdout
標準入力()に渡します。stdin
オプションで、aの後に改行文字を配置し、|
コマンドを次の行に展開できます。
注:a|b
同じb < <(a)
ですが、マジックファイルがなく、特にパイプが長くなると、順序が読みやすくなります。
a|b|c
等しいc < <(b < <(a))
そして
a|b|c|d|e
はいe < < (d < <(c < <(b < <(a))))
答え2
バッシュが使えますプロセスの交換:
while IFS= read -r line; do
./research.sh "$line" &
done < <(./preprocess.sh)
プロセス置換の利点:
- 一時ファイルを保存する必要はありません。
- より良いパフォーマンス。他のプロセスから読み取るのは通常、ディスクに書き込んでから再読み込みするよりも高速です。
- パラメータと変数拡張の同時実行、コマンド置換、および演算拡張による計算時間の節約