処理の途中でパイプの内容をキャプチャするために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
このコマンドを使用して端末が何であるかを確認し、tty
teeを交換して出力をその端末にリダイレクトできます。
引用する