Linuxコマンドのすべての出力、エラー、警告、および表示される順序をキャプチャします。

Linuxコマンドのすべての出力、エラー、警告、および表示される順序をキャプチャします。

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。では、bash1つのコマンドで同じチャネルに対して複数のリダイレクトを使用することはできません。そのため、出力を再パイプteeして印刷する必要があります。


以内(zshこのオプションは必ず設定する必要があり、デフォルトではあります):MULTIOSzsh

command >out 2>err &>all

おすすめ記事