次のbashスクリプトがあります。
some_process | sort -u | other_process >> some_file
データのストリーミング中にデータがソートされた後、other_processによって処理される前に行数を取得したいと思います。次のように試しました。
some_process | sort -u | tee >(wc -l > $some_var_i_can_print_later) | other_process >> some_file
これは私にとってはうまくいきません。パイプからデータを転送しながら変数にカウントを保存する方法はありますか?
また、クリーニングについて心配する必要があるtmpfilesの使用を避けたいと思います。
答え1
ファイル記述子を使用すると、さらに一歩進むことができます。
VAR=$(
exec 3>&1
some_process | sort -u | tee >(wc -l >&3) | other_process >> some_file
)
または:
VAR=$({
some_process | sort -u | tee >(wc -l >&3) | other_process >> some_file
} 3>&1)
other_process
sの出力はに追加されますが、some_file
swc -l
はfdにリダイレクトされ、3
VARに割り当てられる元のstdoutを指します。