Antes de que se ejecute un comando, su entrada y salida pueden ser redirigido utilizando una notación especial interpretada por el shell. La redirección permite que los identificadores de archivos de los comandos se dupliquen, abran, cierren, hagan que se refieran a diferentes archivos y pueden cambiar los archivos de los que el comando lee y escribe. La redirección también se puede utilizar para modificar los identificadores de archivos en el entorno de ejecución de shell actual. Los siguientes operadores de redirección pueden preceder o aparecer en cualquier lugar dentro de un comando simple o pueden seguir a un comando. Las redirecciones se procesan en el orden en que aparecen, de izquierda a derecha.

Cada redireccionamiento que pueda estar precedido por un número de descriptor de archivo puede ir precedido por una palabra con el formato varname. En este caso, para cada operador de redirección excepto> & – y <& -, el shell asignará un descriptor de archivo mayor que 10 y lo asignará a varname. Si> & – o <& - está precedido por varname, El valor de varname define el descriptor de archivo para cerrar. Si varname, la redirección persiste más allá del alcance del comando, lo que permite al programador de shell administrar la vida útil del descriptor de archivo manualmente.

En las siguientes descripciones, si se omite el número de descriptor de archivo y el primer carácter del operador de redirección es ‘<‘, la redirección se refiere a la entrada estándar (descriptor de archivo 0). Si el primer carácter del operador de redirección es ‘>‘, la redirección se refiere a la salida estándar (descriptor de archivo 1).

La palabra que sigue al operador de redirección en las siguientes descripciones, a menos que se indique lo contrario, está sujeta a expansión de llaves, expansión de tilde, expansión de parámetro, sustitución de comando, expansión aritmética, eliminación de comillas, expansión de nombre de archivo y división de palabras. Si se expande a más de una palabra, Bash informa de un error.

Tenga en cuenta que el orden de las redirecciones es significativo. Por ejemplo, el comando

ls > dirlist 2>&1

dirige tanto la salida estándar (descriptor de archivo 1) como el error estándar (descriptor de archivo 2) al archivo dirlist, mientras que el comando

ls 2>&1 > dirlist

dirige solo la salida estándar al archivo dirlist, porque el error estándar se hizo una copia de la salida estándar antes de que la salida estándar fuera redirigida a dirlist.

Bash maneja varios nombres de archivos especialmente cuando se usan en redirecciones, como se describe en la siguiente tabla. Si el sistema operativo en el que se ejecuta Bash proporciona estos archivos especiales, bash los utilizará; de lo contrario, los emulará internamente con el comportamiento que se describe a continuación.

/dev/fd/fd

Si fd es un entero válido, descriptor de archivo fd está duplicado.

/dev/stdin

El descriptor de archivo 0 está duplicado.

/dev/stdout

El descriptor de archivo 1 está duplicado.

/dev/stderr

El descriptor de archivo 2 está duplicado.

/dev/tcp/host/port

Si anfitrión es un nombre de host o una dirección de Internet válidos, y Puerto es un número de puerto entero o un nombre de servicio, Bash intenta abrir el socket TCP correspondiente.

/dev/udp/host/port

Si anfitrión es un nombre de host o una dirección de Internet válidos, y Puerto es un número de puerto entero o un nombre de servicio, Bash intenta abrir el socket UDP correspondiente.

Si no se abre o crea un archivo, se produce un error en la redirección.

Las redirecciones que utilizan descriptores de archivo superiores a 9 deben usarse con cuidado, ya que pueden entrar en conflicto con los descriptores de archivo que el shell utiliza internamente.

3.6.1 Redirigir la entrada

La redirección de la entrada hace que el archivo cuyo nombre resulte de la expansión de palabra para ser abierto para lectura en descriptor de archivo n, o la entrada estándar (descriptor de archivo 0) si n no se especifica.

El formato general para redirigir la entrada es:

[n]

3.6.2 Redirigir la salida

La redirección de la salida hace que el archivo cuyo nombre resulte de la expansión de palabra que se abrirá para escribir en el descriptor de archivo norte, o la salida estándar (descriptor de archivo 1) si norte no se especifica. Si el archivo no existe, se crea; si existe, se trunca a tamaño cero.

El formato general para redirigir la salida es:

[n]>[|]word

Si el operador de redirección es '>', y el noclobber opción a la set incorporado, la redirección fallará si el archivo cuyo nombre resulta de la expansión de palabra existe y es un archivo normal. Si el operador de redirección es '> |', o el operador de redirección es'>' y el noclobber La opción no está habilitada, se intenta la redirección incluso si el archivo nombrado por palabra existe.

3.6.3 Agregar salida redirigida

La redirección de la salida de esta manera hace que el archivo cuyo nombre resulte de la expansión de palabra que se abrirá para agregar en el descriptor de archivo norte, o la salida estándar (descriptor de archivo 1) si norte no se especifica. Si el archivo no existe, se crea.

El formato general para agregar resultados es:

[n]>>word

3.6.4 Redirigir la salida estándar y el error estándar

Esta construcción permite redirigir tanto la salida estándar (descriptor de archivo 1) como la salida de error estándar (descriptor de archivo 2) al archivo cuyo nombre es la expansión de palabra.

Hay dos formatos para redirigir la salida estándar y el error estándar:

&>word

y

>&word

De las dos formas, se prefiere la primera. Esto es semánticamente equivalente a

>word 2>&1

Al usar el segundo formulario, palabra no puede expandirse a un número o '-'. Si es así, se aplican otros operadores de redirección (consulte Duplicación de descriptores de archivos a continuación) por razones de compatibilidad.

3.6.5 Agregar salida estándar y error estándar

Esta construcción permite que tanto la salida estándar (descriptor de archivo 1) como la salida de error estándar (descriptor de archivo 2) se agreguen al archivo cuyo nombre es la expansión de palabra.

El formato para agregar salida estándar y error estándar es:

&>>word

Esto es semánticamente equivalente a

>>word 2>&1

(consulte Duplicar descriptores de archivos a continuación).

3.6.6 Aquí Documentos

Este tipo de redirección le indica al shell que lea la entrada de la fuente actual hasta una línea que contenga solo palabra (sin espacios en blanco al final). Todas las líneas leídas hasta ese punto se utilizan como entrada estándar (o descriptor de archivo norte si norte se especifica) para un comando.

El formato de aquí-documentos es:

[n]<<[-]word
        here-document
delimiter

No se realiza ninguna expansión de parámetros y variables, sustitución de comandos, expansión aritmética o expansión de nombre de archivo en palabra. Si alguna parte de palabra se cita, el delimitador es el resultado de la eliminación de la cotización en palabra, y las líneas en el documento aquí no se expanden. Si palabra no está entre comillas, todas las líneas del documento aquí están sujetas a expansión de parámetros, sustitución de comandos y expansión aritmética, la secuencia de caracteres newline se ignora y ''debe usarse para citar los caracteres'','PS', y '''.

Si el operador de redirección es '<< -', todos los caracteres de tabulación iniciales se eliminan de las líneas de entrada y la línea que contiene delimitador. Esto permite que los documentos de aquí dentro de los scripts de shell se sangran de forma natural.

3.6.7 Aquí cadenas

Una variante de estos documentos, el formato es:

[n]<<< word

los palabra se somete a expansión de tilde, expansión de parámetros y variables, sustitución de comandos, expansión aritmética y eliminación de comillas. No se realiza la expansión de nombre de archivo ni la división de palabras. El resultado se proporciona como un solo string, con una nueva línea adjunta, al comando en su entrada estándar (o descriptor de archivo norte si norte está especificado).

3.6.8 Duplicar descriptores de archivos

El operador de redirección

[n]<&word

se utiliza para duplicar descriptores de archivos de entrada. Si palabra se expande a uno o más dígitos, el descriptor de archivo denotado por norte está hecho para ser una copia de ese descriptor de archivo. Si los dígitos en palabra no especifica un descriptor de archivo abierto para entrada, se produce un error de redirección. Si palabra evalúa a '-', descriptor de archivo norte está cerrado. Si norte no se especifica, se utiliza la entrada estándar (descriptor de archivo 0).

El operador

[n]>&word

se utiliza de forma similar para duplicar descriptores de archivos de salida. Si norte no se especifica, se utiliza la salida estándar (descriptor de archivo 1). Si los dígitos en palabra no especifica un descriptor de archivo abierto para salida, se produce un error de redirección. Si palabra evalúa a '-', descriptor de archivo norte está cerrado. Como caso especial, si norte se omite, y palabra no se expande a uno o más dígitos o '-', la salida estándar y el error estándar se redirigen como se describió anteriormente.

3.6.9 Descriptores de archivos en movimiento

El operador de redirección

[n]<&digit-

mueve el descriptor de archivo dígito al descriptor de archivo norte, o la entrada estándar (descriptor de archivo 0) si norte no se especifica. dígito se cierra después de ser duplicado para norte.

Del mismo modo, el operador de redirección

[n]>&digit-

mueve el descriptor de archivo dígito archivar descriptor norte, o la salida estándar (descriptor de archivo 1) si norte no se especifica.

3.6.10 Apertura de descriptores de archivos para lectura y escritura

El operador de redirección

[n]<>word

hace que el archivo cuyo nombre es la expansión de palabra para ser abierto tanto para lectura como para escritura en el descriptor de archivo norte, o en el descriptor de archivo 0 si norte no se especifica. Si el archivo no existe, se crea.