En las shell tipo UNIX, cuando se quiere combinar la salida stderr
y stdout
en la salida normal para poder así manipular los errores, se añade lo siguiente al final del comado:
2>&1
Si por ejemplo quiero ejecutar el comando head
sobre la salida completa de g++
, utilizaría lo siguiente para ver solamente los primeros errores y mensajes:
g++ lo_que_sea 2>&1 | head
El problema es que me cuesta muchísimo recordar cómo se escribe exactamente 2>&1
y al final siempre acabo buscando cómo se escribe. En realidad el problema es que como no entiendo bien lo que significa, no soy capaz de memorizarlo. Así que,¿ podría alguien por favor explicarme bien qué significa exactamente 2>&1
?
Respuestas
El número 1
representa a la salida estándar stdout
y el número 2
representa a la salida de errores stderr
.
Aunque no es totalmente preciso, este es uno de los trucos que puedes utilizar para acordarte: utilizar 2>1
puede parecer una buena idea para redirigir los errores a la salida estándar. Sin embargo, esto significa "redirige la salida de errores a un archivo llamado 1". Así que gracias al símbolo &
podemos distinguir los archivos normales de los descriptores especiales: 1
es un archivo llamado 1
y &1
es el descriptor de la salida estándar (stdout
).
Por todo esto, redirigir los errores a la salida normal se indica como 2>&1
.
Otra forma de explicarlo sería la siguiente:
- El símbolo
>
redirige la salida estándar (stdout
). Por ejemplo a un archivo:echo ... > archivo.txt
- Poniendo un número por delante de
>
rediriges sólo la salida indicada:1>
es la salida estándar y2>
es la salida de errores. Ejemplo:echo ... 2> archivo.txt
- Para distinguir los archivos de los descriptores, se pone el símbolo
&
delante del número del descriptor. Ejemplo:echo ... 2> &1
@librosweb