回答:
{ a && b && c; } >capture_file 2>&1
リダイレクトの順序に注意してください。最初にstdoutをリダイレクトする必要があります。
2>&1は、stdout(1)の宛先をstderr(2)に複製することを意味するため、事前にstdoutリダイレクションを設定していなければ、役に立ちません。
2>capture_file >&2(しかし、それは慣用的ではありませんので、しないでください)。重要なことは、ストリームをもう一方に複製する前に、一方をファイルにリダイレクトすることです。
コマンドのグループ化{}を使用する以外に、サブシェルでコマンドを実行して、出力(および/またはエラー)を一度にキャプチャすることもできます。
( a && b && c ) >file.txt 2>&1
例:
$ ( echo foo && echo bar && echo baz && echos foo ) >check 2>&1
$ cat check
foo
bar
baz
No command 'echos' found, did you mean:
Command 'echo' from package 'coreutils' (main)
echos: command not found