コマンド出力から行を読み取る方法はありますか?

コマンド出力から行を読み取る方法はありますか?

ファイルを出力する前処理コマンドがあります。

./preprocess.sh > preprocessed_file 

preprocessed_fileそう使用される

while read line
do

    ./research.sh $line &

done < preprocessed_file 

rm -f preprocessed_file

while read linepreprocessed_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)

プロセス置換の利点:

  • 一時ファイルを保存する必要はありません。
  • より良いパフォーマンス。他のプロセスから読み取るのは通常、ディスクに書き込んでから再読み込みするよりも高速です。
  • パラメータと変数拡張の同時実行、コマンド置換、および演算拡張による計算時間の節約

関連情報