command 2>&1 | tee command.log とかやって、command の標準出力を画面上でも確認しながら、ログにも出力したい、というケースは割とあると思います。 ただ、command の実行が成功したかどうかも知りたい。単純にパイプでつなげてしまうと、一番最後のコマンド(この場合は tee)の終了コードしか取れないんだよね。 まあ、でも簡単に取得できるよね、と思ったら、意外と試行錯誤してしまったという話。 前提知識 コマンドをグルーピングするためには、丸括弧「()」と中括弧「{}」が利用できます。 丸括弧でグルーピングしたものは、サブシェル(子プロセス)で実行される 中括弧でグルーピングしたものは、カレントシェル(自プロセス)で実行される という違いがあります。例えば、 hoge=0 (hoge=1) echo $hoge # ->「0」が出力される。(子プロセスで変更