English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Entrada de Shell/Redirección de salida

La mayoría de los comandos del sistema UNIX reciben entrada desde su terminal y envían la salida generada de vuelta a su terminal. Un comando generalmente lee la entrada desde un lugar llamado entrada estándar, por defecto, esto es exactamente su terminal. Del mismo modo, un comando generalmente escribe su salida en la salida estándar, por defecto, también es su terminal.

La lista de comandos de redirección es la siguiente:

Comando Descripción
command > file Redirija la salida a file.
command < file Redirija la entrada a file.
command >> file Redirija la salida de manera que se añada al file.
n > file Redirija el archivo con el descriptor de archivo n al file.
n >> file Redirija el archivo con el descriptor de archivo n al file de manera que se añada.
n >& m Combine los archivos de salida m y n.
n <& m Combine los archivos de entrada m y n.
<< tag Tome como entrada el contenido entre las etiquetas de inicio tag y de finalización tag.

Es importante destacar que el descriptor de archivo 0 es generalmente la entrada estándar (STDIN),1 Es la salida estándar (STDOUT),2 Es la salida de error estándar (STDOUT).

Redirección de salida

La redirección generalmente se realiza insertando símbolos específicos entre comandos. En particular, la sintaxis de estos símbolos se muestra a continuación:

comando1 > file1

Este comando ejecuta command1Luego, almacene el contenido de salida en file1.

Atención: cualquier file1El contenido existente dentro de él se reemplazará por el nuevo contenido. Si desea agregar el nuevo contenido al final del archivo, utilice el operador >>.

Ejemplo en línea

Ejecute el siguiente comando who, que redirige la salida completa del comando en el archivo de usuarios (users):

$ who > users

Después de ejecutar, no hay información en la terminal, porque la salida se ha redirigido al dispositivo de salida estándar (terminal) especificado.

Puede usar el comando cat para ver el contenido del archivo:

$ cat users
_mbsetupuser console  Oct 31 17:35 
tianqixin    console  Oct 31 17:35 
tianqixin    ttys000  Dec  1 11:33

La redirección de salida sobrescribe el contenido del archivo, consulte el siguiente ejemplo:

$ echo "Sitio web de tutorial básico: es.oldtoolbag.com" > users
$ cat users
Sitio web de tutorial básico: es.oldtoolbag.com
$

Si no desea que el contenido del archivo se sobrescriba, puede usar >> para agregarlo al final del archivo, por ejemplo:

$ echo "Sitio web de tutorial básico: es.oldtoolbag.com" >> users
$ cat users
Sitio web de tutorial básico: es.oldtoolbag.com
Sitio web de tutorial básico: es.oldtoolbag.com
$

Redirección de entrada

Al igual que la redirección de salida, los comandos Unix también pueden obtener entrada de archivos, la sintaxis es la siguiente:

comando1 < file1

De esta manera, los comandos que originalmente se obtendrían desde la entrada del teclado se transferirán al contenido de lectura del archivo.

Atención: la redirección de salida es el símbolo mayor que (>) y la redirección de entrada es el símbolo menor que (<).

Ejemplo en línea

Siguiendo con el ejemplo anterior, necesitamos contar el número de líneas del archivo users, ejecutamos el siguiente comando:

$ wc -l users
       2 users

También se puede redirigir la entrada al archivo users:

$ wc -l < users
       2

Nota: Los resultados de los dos ejemplos anteriores son diferentes: el primero escribe el nombre del archivo; el segundo no, porque solo sabe leer contenido desde la entrada estándar.

comando1 < infile > outfile

Al mismo tiempo, reemplaza la entrada y salida para ejecutar comando1lee el contenido del archivo infile y luego escribe la salida en outfile.

Explicación detallada de la redirección

Generalmente, cada Unix/Los comandos de Linux siempre abren tres archivos en ejecución:

  • El archivo de entrada estándar (stdin): El descriptor de archivo de stdin es 0, y los programas Unix leen datos por defecto desde stdin.

  • El archivo de salida estándar (stdout): El descriptor de archivo de stdout es1. Los programas Unix escriben datos por defecto en stdout.

  • El archivo de error estándar (stderr): El descriptor de archivo de stderr es2. Los programas Unix escriben información de error en el flujo stderr.

Por defecto, comando > archivo redirige stdout a archivo, y comando < archivo redirige stdin a archivo.

Si desea redirigir stderr a archivo, puede escribir así:

$ comando 2>archivo

Si desea que stderr se añada al final del archivo archivo, puede escribir así:

$ comando 2>> archivo

2 que representa el archivo de error estándar (stderr).

Si desea redirigir stdout y stderr a archivo, puede escribir así:

$ comando > archivo 2>&1
o
$ comando >> archivo 2>&1

Si desea redirigir stdin y stdout, puede escribir así:

$ comando < archivo1 >archivo2

El comando 'comando' redirige stdin a archivo1Redirija stdout a archivo2.

Here Document

Here Document es una forma especial de redirección de entrada en Shell, utilizada para redirigir la entrada a un script o programa de Shell interactivo.

Su forma básica es la siguiente:

comando << delimiter
    documento
delimiter

Su función es transmitir el contenido (documento) entre dos delimiters como entrada para el comando.

Nota:

  • El delimiter al final debe estar alineado, no debe haber ningún carácter anterior, ni después, incluyendo espacios y tabuladores de sangría.

  • Los espacios antes del delimiter de inicio y después del delimiter se ignorarán.

Ejemplo en línea

A través de wc en la línea de comandos -El comando l de wc calcula el número de líneas del Here Document:

$ wc -l << EOF
    Bienvenido a
    Sitio web de tutoriales básicos
    es.oldtoolbag.com
EOF
3          # Resultados de salida 3 línea
$

También podemos usar Here Document en scripts, por ejemplo:

#!/bin/bash
# author:Sitio web de tutoriales básicos
# url:es.oldtoolbag.com
cat << EOF
Bienvenido a
Sitio web de tutoriales básicos
es.oldtoolbag.com
EOF

Ejecutar el siguiente script, los resultados de salida son:

Bienvenido a
Sitio web de tutoriales básicos
es.oldtoolbag.com

/dev/archivo null

Si desea ejecutar un comando pero no desea mostrar los resultados de salida en la pantalla, puede redirigir la salida a /dev/null:

$ command > /dev/null

/dev/El archivo null es un archivo especial, todo lo que se escribe en él se descartará; si intenta leer contenido del archivo, no obtendrá nada. Pero /dev/El archivo null es muy útil, redirigiendo la salida de un comando a él, tendrá el efecto de "prohibir la salida".

Si desea ocultar stdout y stderr, puede escribir así:

$ command > /dev/null 2>&1

Nota:0 Es la entrada estándar (STDIN),1 Es la salida estándar (STDOUT),2 Es la salida de error estándar (STDOUT).

Aquí 2 y > No puede haber espacios entre2> Se representa el error de salida cuando es un todo.