Linuxでは、stdoutとstderr、またはその両方をファイルにリダイレクトできます。たとえば、
- stdoutとstderrを2つのファイルにリダイレクトします。
command 1>out 2>err
この方法では、出力とエラーを2つの異なるファイルに分割できます。 - stdoutとstderrを次のファイルにリダイレクトします。
command &>all
これにより、出力およびエラーメッセージが表示される順序をキャプチャできます。
command 1>out 2>err &>all
上記の2つのコマンドを組み合わせて、出力とエラーが表示される順序をキャプチャし、出力とエラーを分離したいと思います。ただし、上記のコマンドは機能せず、out
ファイルerr
は空です。順序を変更すると、ファイルall
が空になります。それでは、上記の2つのコマンドを好きなように組み合わせる方法はありませんか?
ベストアンサー1
少しbash
トリッキーです。
command 2> >(tee err) 1> >(tee out) | tee >all
ここに私たちが必要ですプロセスの交換 >(...)
そしてtee
問題を解決してください。プロセス置換を使用すると、tee
プロセスはそのチャネルに接続されます。tee
次に、この行をファイルに書き込みます。そして次に印刷しますSTDOUT
。したがって、ファイルに書き込んだ後STDERR
と両方STDOUT
に印刷されますSTDOUT
。では、bash
1つのコマンドで同じチャネルに対して複数のリダイレクトを使用することはできません。そのため、出力を再パイプtee
して印刷する必要があります。
以内(zsh
このオプションは必ず設定する必要があり、デフォルトではあります):MULTIOS
zsh
command >out 2>err &>all