Risposte:
{ a && b && c; } >capture_file 2>&1
Nota l'ordine dei reindirizzamenti: devi prima reindirizzare stdout.
2>&1
significa duplicare la destinazione di stdout (1) su stderr (2), quindi sarebbe inutile se non avessi impostato il reindirizzamento stdout in anticipo.
2>capture_file >&2
(ma non farlo, perché non è idiomatico). L'importante è che reindirizzi uno di essi al file prima di duplicare quel flusso sull'altro.
Oltre a utilizzare il raggruppamento dei comandi, {}
è anche possibile eseguire i comandi in una subshell e acquisire l'output (e / o l'errore) contemporaneamente:
( a && b && c ) >file.txt 2>&1
Esempio :
$ ( 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