プログラムの標準出力を画面に表示したままパイプしたいと思います。
簡単な例(echo
ここでの使用は説明目的のみです):
$ echo 'ee' | foo
ee
<- 私が見たい出力
tee は stdout をファイルにコピーできることは知っていますが、それは私が望んでいることではありません。
$ echo 'ee' | tee output.txt | foo
試してみましたが、Tee出力がパイプされている
$ echo 'ee' | tee /dev/stdout | foo
ため動作しません/dev/stdout
foo
ベストアンサー1
これは、標準に準拠していると仮定して、あらゆる Unix / Linux 実装で機能するソリューションですPOSIX
。また、一部の非 Unix 環境でも機能しますcygwin
。
echo 'ee' | tee /dev/tty | foo
参照:オープングループ基本仕様第7版IEEE Std 1003.1、2013年版、§10.1:
/dev/tty
プロセスのプロセス グループに関連付けられます (存在する場合)。出力がどのようにリダイレクトされたかに関係なく、ターミナルにメッセージを書き込んだり、ターミナルからデータを読み取ったりすることを確実にしたいプログラムやシェル プロシージャに役立ちます。また、入力された出力が必要で、現在どのターミナルが使用されているかを調べるのが面倒な場合に、出力にファイル名を要求するアプリケーションにも使用できます。各プロセスでは、制御ターミナルの同義語が存在します。
Google Colabのような一部の環境では/dev/tty
、tty
コマンドは使用可能なデバイスを返します。回避策は次のとおりです。
tty=$(tty)
echo 'ee' | tee $tty | foo
または古い Bourne シェルを使用する場合:
tty=`tty`
echo 'ee' | tee $tty | foo