Como você marcou zsh
, deixe-me dizer que todos os três redirecionamentos funcionam exatamente da mesma maneira. Como você deve ter lido em ambas as postagens duplicadas (a do comentário e a da sua postagem), todas redirecionam stderr
para stdout
, o que é redirecionado para o arquivo 'logfile' (ou seja, o arquivo de log será conter a saída e os erros).
Mas o comportamento deles muda muito dependendo do shell em que você está.
Todos os três estilos de redirecionamento funcionam bem da mesma maneira em bash
e zsh
Mas:
Apenas >&
funciona em csh
ou tcsh
[soum@server ~]$ ./test.sh > logfile 2>&1
Ambiguous output redirect.
[soum@server ~]$ ./test.sh &> logfile
Invalid null command.
[soum@server ~]$ ./test.sh >& logfile
[soum@server ~]$ echo $SHELL
/bin/tcsh
[soum@server ~]$
Em ksh
apenas 2>&1
funciona.
$ ./test.sh >& logfile
-ksh: logfile: bad file unit number
$ ./test.sh &> logfile
[1] 23039
$ 1 2 3 4 5 6 logfile test.sh
ls: cannot access ttr: No such file or directory
[1] + Done(2) ./test.sh &> logfile
Eu odeio ksh
. Enquanto >&
apenas deu um erro, o &>
pagou uma parte do comando e esvaziou o arquivo de log (se não estiver vazio).