Respostas:
{ a && b && c; } >capture_file 2>&1
Observe a ordem dos redirecionamentos: você deve redirecionar o stdout primeiro.
2>&1significa duplicar o destino de stdout (1) para stderr (2), por isso seria inútil, a menos que você tenha configurado o redirecionamento stdout anteriormente.
2>capture_file >&2(mas não, porque isso não é idiomático). O importante é que você redirecione um deles para o arquivo antes de duplicar esse fluxo no outro.
Além de usar o agrupamento de comandos, {}você também pode executar os comandos em um subshell e capturar a saída (e / ou erro) de uma só vez:
( a && b && c ) >file.txt 2>&1
Exemplo:
$ ( 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