これはしばらくの間私を悩ませてきました。 stdout
とstderr
を端末出力との両方にプログラムにリダイレクトすることは可能ですか?
出力をファイルにリダイレクトし、 stdout
を使用してtee
にリダイレクトできることは理解していますが、プログラム(私のエディター[TextMate])に送信したいです。ターミナル出力と同様に…確かにこれは可能です(私はzshでそれが可能であることを知っています…)
名前付きパイプを使用できます。これは、説明した状況を正確に対象としています。
mkfifo some_pipe
command_that_writes_to_stdout | tee some_pipe \
& command_that_reads_from_stdin < some_pipe
rm some_pipe
または、Bashでは:
command_that_writes_to_stdout | tee >(command_that_reads_from_stdin)
Stdoutとstderrを端末出力とプログラムの両方にリダイレクトすることは可能ですか?
エディターへの入力でstdoutとstderrを組み合わせることがどれほど役立つかはわかりませんが、このようなもので必要なことはできますか?
input_prog 2>&1 | tee /dev/tty | my_editor
TextMateがファイルを標準入力として編集できるかどうかは実際にはわかりませんが、少し奇妙に思えます。 stdout/stderrをファイルに送信し、そこで編集することをお勧めします。その場合は、次のものが必要です。
progname 2>&1 | tee tempfile ; textmate tempfile
2>&1
はstderr
(ファイルハンドル2)をstdout
(ファイルハンドル1)と同じ場所にリダイレクトして、両方が1つのストリームになるようにします。次に、tee
コマンドはそれをtempfile
とstdout
に書き込みます。
次に、プロセスが終了すると、一時ファイルでエディターが呼び出されます。
編集用の標準入力を受け入れることができる場合は、次を使用します。
progname 2>&1 | tee /dev/tty | textmate