Descriptor de archivo de la secuencia de comandos del shell

Intro

A veces vemos comandos como este en el shell:

  • $ ls foo > /dev/null 2>&1

Puede ser difícil entender lo que hace esto por primera vez, así que esta nota lo explicará brevemente.

Redirección de E/S

Suponga que ahora tiene un archivo de texto simple:

Aarchivo de texto simple.

Ahora redirige el contenido de este archivo a otra ubicación:

Redirigir el contenido del archivo.

En la acción de redirección anterior, no vemos ninguna salida mostrada en el terminal, porque el comando > redirige el contenido de test.txt aoutput.txt, que es una salida estándar (stdout).

A diferencia de la salida estándar, existe el error estándar (stdr), por ejemplo

Se ha producido un error durante6082>Se ha producido un error durante el proceso de redireccionamiento.

Se ha producido un error durante el proceso de redireccionamiento porque no hay ningún archivo con el nombre no_such_file.txt en el directorio actual. En este caso, aunque se utilice el comando >, no es posible introducir el contenido en output.txt, porque no hay stdout, sino un mensaje de error de stderror.

Descriptor de archivo

El descriptor de archivo puede pensarse como un número entero positivo para un archivo abierto. Si tienes 100 archivos abiertos, básicamente tienes 100 descriptores de archivo correspondientes.

En los sistemas tipo Unix/Unix, también hay descriptores de archivo dedicados a stdout y stderr, que, para ser claros, tienen destinos dedicados para la salida de estospara estos destinos de salida:

  • 1: para stdout
  • 2: para stderr

Poniendo todo junto

De acuerdo con el concepto anterior, si quieres escribir el contenido de un archivo conocido en otro archivo, puedes hacerlo

Redirigir el contenido del archivo a otra ubicación mediantestdout.

El 1 de este lado representa a stdout, cuya sintaxis se representa como:

  • >

Así que cuando veas que alguien escribe de.foo > a.bar, simplemente está omitiendo el

Así mismo, para redirigir stderr puedes hacer esto:

Redirige el mensaje de error a otra ubicación a través de stderr.

Si quieres redirigir tanto stdout como stderr al mismo destino, puedes hacer esto

Redirige stderr a la misma ubicación con stdout.
  • &1 se utiliza como referencia a un id de descriptor de archivo de 1, es decir, una referencia a stdout.
  • 2>&1 significa redirigir el contenido de stderr a stdout.

Summary

  • Normalmente hay dos destinos para la salida: stdout y stderr.
  • Podemos dirigir la salida a diferentes lugares, pero normalmente a un fichero.
  • El descriptor de archivo puede utilizarse para distinguir entre stdout (1) y stderr (2).
  • el comando > ubicación_salida es en realidad una abreviatura del comando 1> ubicación_salida.
  • Podemos utilizar & para referirnos a otros descriptores de archivos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.