@peccul is peccu

(love peccu '(emacs lisp cat outdoor bicycle mac linux coffee))

teeで標準エラー出力もファイルに書き出す

TL;DR

command > >(tee -a stdout.log) 2> >(tee -a stderr.log >&2)

背景など

スクリプトを実行するときに、ログとして標準出力と標準エラー出力を画面に表示しつつ、ファイルにも残したかった。

その時はscriptコマンドのことを忘れていたけれど、あるスクリプトの実行ログそのものを残したくて失敗して再実行するときの操作などは残らない方法を探した。ということにしておきます。

ググって出てきたStack Overflowそのままですが解説としては

  • >( ... ) 部分は標準出力をファイル(file descriptor)ではなく...部分のコマンドの標準入力に流し込むための記法。
    • 逆に、コマンドの標準出力をファイルからの入力のように扱うのは<( command )
    • (複数コマンドの出力を cat で束ねたり、複数のコマンドの出力を diff で差分とるときに使うやつ)
  • >は標準出力をファイルに流すリダイレクト、
  • 2>標準エラー出力をファイルに流すリダイレクト
  • >&2は標準出力を標準エラー出力にリダイレクトしている

参考

stackoverflow.com