Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

¿Qué significa el valor 2>&1 utilizado en la shell?

3 de mayo de 2011

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?

Estás leyendo una traducción autorizada de la pregunta In the shell, what is “ 2>&1 ”? planteada por Tristan Havelick en StackOverflow.

Respuestas

#1

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 y 2> 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

21 septiembre 2014, 18:23