GNU/Linux >> Tutoriales Linux >  >> Linux

Cinco formas de usar operadores de redirección en Bash

Los datos se ingresan en la computadora a través de stdin (generalmente el teclado), y la salida resultante va a stdout (normalmente la concha). Estos caminos se llaman arroyos . Sin embargo, es posible alterar estas ubicaciones de entrada y salida, lo que hace que la computadora obtenga información de otro lugar que no sea stdin. o envíe los resultados a otro lugar que no sea stdout . Esta funcionalidad se conoce como redireccionamiento .

En este artículo, aprenderá cinco operadores de redireccionamiento, incluido uno para stderr . Proporcioné ejemplos de cada uno y presenté el material de una manera que puede duplicar en su propio sistema Linux.

Salida normal> operador

El redirector de salida es probablemente el más reconocido de los operadores. La salida estándar (stdout ) suele estar en la ventana de terminal. Por ejemplo, cuando escribe la date comando, la salida de fecha y hora resultante se muestra en la pantalla.

[damon@localhost ~]$ date
Tue Dec 29 04:07:37 PM MST 2020
[damon@localhost ~]$

Sin embargo, es posible redirigir esta salida desde stdout a otro lugar En este caso, voy a redirigir los resultados a un archivo llamado specifications.txt . Confirmaré que funcionó usando el cat comando para ver el contenido del archivo.

[damon@localhost ~]$ date > specifications.txt
[damon@localhost ~]$ cat specifications.txt 
Tue Dec 29 04:08:44 PM MST 2020
[damon@localhost ~]$ 

El problema con el > redirector es que sobrescribe cualquier dato existente en el archivo. En esta etapa, ahora tiene date información en specifications.txt archivo, ¿verdad? Si escribe hostname > specifications.txt , la salida se enviará al archivo de texto, pero sobrescribirá la información de fecha y hora existente de los pasos anteriores.

[damon@localhost ~]$ hostname > specifications.txt 
[damon@localhost ~]$ cat specifications.txt 
localhost.localdomain
[damon@localhost ~]$ 

Es fácil meterse en problemas con el > redirector al sobrescribir accidentalmente la información existente.

[ Los lectores también disfrutaron:10 comandos básicos de Linux que debe conocer ]

Agregar salida normal>> operador

Agregar >> El operador agrega la salida al contenido existente en lugar de sobrescribirlo. Esto le permite redirigir la salida de múltiples comandos a un solo archivo. Por ejemplo, podría redirigir la salida de date usando el > operador y luego redirigir hostname y uname -r al specifications.txt archivo usando >> operador.

[damon@localhost ~]$ date > specifications.txt
[damon@localhost ~]$ hostname >> specifications.txt 
[damon@localhost ~]$ uname -r >> specifications.txt 
[damon@localhost ~]$ cat specifications.txt 
Tue Dec 29 04:11:51 PM MST 2020
localhost.localdomain
5.9.16-200.fc33.x86_64
[damon@localhost ~]$ 

Nota :El >> redirector incluso funciona en un archivo vacío. Eso significa que posiblemente podrías

ignorar el > regular redirector para aliviar el potencial de sobrescribir datos, y siempre confíe en el >> redirector en su lugar. No es un mal hábito adquirirlo.

Entrada normal

El redirector de entrada extrae datos en un flujo de una fuente determinada. Por lo general, los programas reciben su entrada desde el teclado. Sin embargo, los datos se pueden obtener de otra fuente, como un archivo.

Es hora de construir un ejemplo usando el sort dominio. Primero, cree un archivo de texto llamado mylist.txt que contiene las siguientes líneas:

cat
dog
horse
cow

Observe que los animales no enumerados en orden alfabético.

¿Qué sucede si necesita enumerarlos en orden? Puede extraer el contenido del archivo en el sort comando usando el < operador.

[damon@localhost ~]$ sort < mylist.txt 
cat
cow
dog
horse
[damon@localhost ~]$ 

Incluso podría ser un poco más elegante y redirigir los resultados ordenados a un nuevo archivo:

[damon@localhost ~]$ sort < mylist.txt > alphabetical-file.txt
[damon@localhost ~]$ cat alphabetical-file.txt 
cat
cow
dog
horse
[damon@localhost ~]$ 

Error normal 2> operador

La salida estándar muestra los resultados esperados. Si aparecen errores, se gestionan de forma diferente. Los errores se etiquetan como descriptor de archivo 2 (la salida estándar es el descriptor de archivo 1). Cuando un programa o script no genera los resultados esperados, arroja un error. El error generalmente se envía a stdout , pero se puede redirigir a otro lugar. El stderr el operador es 2> (para el descriptor de archivo 2).

Aquí hay un ejemplo simple, usando el ping mal escrito comando:

[damon@localhost ~]$ png
bash: png: command not found...
[damon@localhost ~]$

Aquí está el mismo comando mal escrito con la salida de error redirigida a /dev/null :

[damon@localhost ~]$ png 2> /dev/null
[damon@localhost ~]$ 

El mensaje de error resultante se redirige a /dev/null en lugar de stdout , por lo que no se muestra ningún resultado o mensaje de error en la pantalla.

Nota :/dev/null , o el cubo de bits , se utiliza como cubo de basura para la línea de comandos. La salida no deseada se puede redirigir a esta ubicación para simplemente hacerla desaparecer. Por ejemplo, tal vez esté escribiendo un script y desee probar algunas de sus funciones, pero sabe que arrojará errores que no le interesan en esta etapa de desarrollo. Puede ejecutar el script y decirle que redirija los errores a /dev/null por conveniencia.

Tubería | operador

Ken Hess ya tiene un artículo sólido sobre el uso de la tubería | operador, así que solo voy a mostrar una demostración muy rápida aquí.

La tubería toma la salida del primer comando y la convierte en la entrada del segundo comando. Es posible que desee ver una lista de todos los directorios y archivos en /etc directorio. Sabe que va a ser una lista larga y que la mayor parte de la salida se desplazará por la parte superior de la pantalla. El less El comando dividirá la salida en páginas, y luego puede desplazarse hacia arriba o hacia abajo a través de las páginas para mostrar los resultados. La sintaxis es emitir el ls comando para listar el contenido de /etc , y luego use la canalización para enviar esa lista a less para que se pueda dividir en páginas.

[damon@localhost ~]$ ls /etc | less

El artículo de Ken tiene muchos más ejemplos excelentes. Personalmente, me encuentro usando command | less y command | grep string más a menudo.

[ Descargar ahora:una guía para administradores de sistemas sobre secuencias de comandos Bash. ] 

Resumir

Los operadores de redirección son muy útiles y espero que este breve resumen le haya proporcionado algunos trucos para manipular la entrada y la salida. La clave es recordar que el > el operador sobrescribirá los datos existentes.


Linux
  1. Cómo usar Nginx para redirigir

  2. ¿Usar la extensión .sh o .bash para scripts Bash?

  3. ¿Qué shell debo usar:Tcsh Vs Bash?

  4. Maneras inusuales de usar variables dentro de scripts Bash

  5. ¿Cómo usar kill SIGUSR2 en bash?

Cómo usar el comando de lectura Bash

Cómo redirigir stderr a stdout en Bash

Cómo usar operadores de prueba de archivos Bash en Linux

7 formas de usar el comando Head de Linux

7 formas de usar el comando Watch de Linux

¿Qué es Zsh? ¿Deberías usarlo?