En este hilo SO y en algunos otros hilos, he visto los siguientes comandos para redirigir stdouty stderra un archivo.
¿Son todos equivalentes? ¿Hay alguna diferencia entre ellos?
command1 >> logfile 2>&1
command &> logfile
command >& logfile
shell
zsh
io-redirection
Amelio Vazquez-Reina
fuente
fuente

Respuestas:
Como has etiquetado
zsh, déjame decirte que las 3 redirecciones funcionan exactamente de la misma manera. Como puede haber leído en las publicaciones duplicadas (la del comentario y la de su publicación), todas ellas redirigenstderra lasstdoutcuales se redirige al archivo 'archivo de registro' (es decir, el archivo de registro contendrá tanto la salida como los errores )Pero su comportamiento cambia MUCHO dependiendo del shell en el que se encuentre.
Los tres estilos de redireccionamiento funcionan bien de la misma manera
bashyzshPero:
Solo
>&funciona encshotcshEn
kshsolo2>&1obras.No me gusta
ksh. Si bien>&solo dio un error, el&>fondo incluyó una parte del comando y vació el archivo de registro (si no está vacío).fuente
sh? Si es shell POSIX,&>y>&no funcionará.&>y>&semi-equivalencia (clobber)La
zshsección de redirecciones manuales dice que:&>>&son equivalentes
Ambos golpearán el archivo - truncarán el archivo a 0 bytes antes de escribir en él, tal como
> filelo haría en el caso de STDIN solamente.Sin embargo , la
bashsección de redirecciones manuales agrega que:Entonces, mientras etiqueta
zsh, probablemente sea una buena práctica obtener memoria de dedo en la primera forma si alguna vez se escribe unbashguión.>> logfile 2>&1y&>>equivalencia (agregar)Aquí,
logfileno se sobrescribe, sino que se abre para escribir al final del archivo, es decir, modo anexar (O_APPEND).El equivalente en ambos
{ba,z}shes:En
bash:(Nota: el uso de clobber
&>más>&en la sección anterior de nuevo se recomienda dado que sólo hay un camino para anexar enbash.)zshpermite ambos&>>y>>&formas.fuente