ファイルの代わりにstdoutで中間結果を出力するには、teeを使用します。

ファイルの代わりにstdoutで中間結果を出力するには、teeを使用します。

処理の途中でパイプの内容をキャプチャするためにteeを使用することを知っていますls /bin /usr/bin | sort | uniq | tee abc.txt | grep out。しかし、パイプをリダイレクトしたくない場合はどうすればよいですか?uniqの後ろの内容はabc.txtです。 しかし、 画面上(もちろんstdout経由)最終結果は次のとおりです。uniqの後ろの中間の内容とgrepの後ろの内容を画面に表示します。

答え1

時には/ dev / ttyを使うこともできます。

ls /bin /usr/bin | sort | uniq | tee /dev/tty | grep out | wc

答え2

ls /bin /usr/bin | sort | uniq | tee /dev/fd/2 | grep out | wc

Linuxシステムでは、/dev/fd/[num]ほとんどの場合、名前付きパイプなどのリンクを使用できます。これにより、stdoutがstderr(通常は端末)にコピーされます。画面しかし、必ずしもそうする必要はありません。

答え3

方法(例):

exec 3>&1; ( ls |( tee >&3 ) >/dev/null ); exec 3>&-

これにより、lsの結果が表示されます。そして熱盤に送ってください。

3>&1読める主な部分を理解するには入力/出力リダイレクト特に。これはい

簡単に言うと:>somefileはの略語で1>somefile、これは次のことを意味します。somefileのファイルハンドルをファイルディスクリプタ1に割り当てます(そして、このプロセススコープに対してそのディスクリプタの古い値を削除します)。

したがって、3>&1これは次のことを意味します。ファイル記述子 1 (tty である可能性があるが必ずしもそうではない) を (これまで使用されていない) ファイル記述子 3 に割り当てます。。私たちはこれを&3一時変数として効果的に使用します。

答え4

このコマンドは私にとって効果的です。

ls /bin /usr/bin | sort | uniq | tee /dev/pts/0 | grep out

このコマンドを使用して端末が何であるかを確認し、ttyteeを交換して出力をその端末にリダイレクトできます。

引用する

https://stackoverflow.com/a/18025293/1742825

関連情報