En este hilo SO y en algunos otros hilos, he visto los siguientes comandos para redirigir stdout
y stderr
a 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 redirigenstderr
a lasstdout
cuales 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
bash
yzsh
Pero:
Solo
>&
funciona encsh
otcsh
En
ksh
solo2>&1
obras.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
zsh
secció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
> file
lo haría en el caso de STDIN solamente.Sin embargo , la
bash
secció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 unbash
guión.>> logfile 2>&1
y&>>
equivalencia (agregar)Aquí,
logfile
no se sobrescribe, sino que se abre para escribir al final del archivo, es decir, modo anexar (O_APPEND
).El equivalente en ambos
{ba,z}sh
es: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
.)zsh
permite ambos&>>
y>>&
formas.fuente