Cuando ejecutamos cualquier comando en un shell bash, generalmente imprime el resultado de ese comando en la terminal para que podamos leerlo inmediatamente. Pero bash también proporciona una opción para 'redirigir' la salida de cualquier comando bash a un archivo de registro. Puede guardar el resultado en un archivo de texto para que podamos revisarlo más tarde cuando sea necesario.
Método 1: escribir la salida solo en un archivo
Para escribir la salida de los comandos Bash en un archivo, podemos usar el signo de corchete angular (>) o el signo de ángulo recto doble (>>):
Señal de soporte en ángulo recto (>)
Se utiliza para escribir la salida del comando bash en un archivo de disco. Si no hay ningún archivo con el nombre especificado, crea un nuevo archivo con el mismo nombre. Si el archivo está allí con el nombre especificado, se sobrescribirá el contenido del archivo.
Señal de doble ángulo recto (>>)
Se utiliza para escribir la salida de los comandos bash en un archivo, agregando la salida al contenido existente del archivo. Si el archivo no está presente, crea uno nuevo con el nombre especificado.
Técnicamente, ambos operadores redirigen 'stdout (la salida estándar)' a un archivo.
De forma sencilla, cuando estemos escribiendo el archivo por primera vez y no queramos que en él estén presentes datos anteriores, debemos utilizar el signo del corchete angular (>). Sobrescribirá el contenido si ya está presente en el archivo. Y en el script posterior, podemos usar el signo de doble ángulo recto (>>) para agregar los datos a un archivo.
Ejemplo
El comando 'ls' se utiliza para imprimir todos los archivos y carpetas presentes en el directorio actual. Pero cuando ejecutamos el comando 'ls' con un signo de corchete angular (>), no imprimirá la lista de archivos y carpetas en la pantalla. Guardará la salida en el archivo que especificamos con él, es decir, como se muestra a continuación:
Guión de bash
#!/bin/bash #Script to write the output into a file #Create output file, override if already present output=output_file.txt #Write data to a file ls > $output #Checking the content of the file gedit output_file.txt
Producción
Como se muestra aquí, la salida del comando 'ls' se redirige a un archivo. Para imprimir el contenido de un archivo en la terminal, podemos usar el comando 'cat' de la siguiente forma:
Guión de bash
#!/bin/bash #Script to write the output into a file #Create output file, override if already present output=output_file.txt #Write data to a file ls > $output #Printing the content of the file cat $output
Producción
Si queremos redirigir la salida de múltiples comandos a un solo archivo sin eliminar los datos disponibles, entonces podemos usar el operador >>. Supongamos que queremos agregar la información del sistema al archivo especificado, podemos hacerlo de la siguiente manera:
Guión de bash
#!/bin/bash #Script to write the output into a file #Create output file, override if already present output=output_file.txt #Write data to a file ls > $output #Appending the system information uname -a >> $output #Checking the content of the file gedit output_file.txt
Producción
Aquí, el resultado del segundo comando se agrega al final del archivo.
Actor Rekha
Podemos repetir este proceso varias veces para seguir agregando el resultado al final del archivo.
Método 2: imprimir el resultado normalmente y escribirlo en un archivo
Es posible que a algunas personas no les guste escribir la salida en un archivo usando los operadores > o >>, ya que no habrá salida del comando en la terminal. Por eso se utiliza el comando 'tee'. El comando 'tee' se utiliza para imprimir la entrada que recibe en la pantalla. Puede guardar la salida en un archivo al mismo tiempo.
Guión de bash
#!/bin/bash #Script to write the output into a file #Create output file, override if already present output=output_file.txt #Write data to a file ls | tee $output
Producción
Esto anulará el contenido del archivo, al igual que el operador >, pero también imprimirá el resultado en la pantalla.
Si queremos escribir la salida en un archivo sin eliminar el contenido del archivo usando el comando tee, podemos usar el siguiente formulario que también imprimirá la salida en la terminal:
Guión de bash
#!/bin/bash #Script to write the output into a file #Create output file, override if already present output=output_file.txt echo '<<>>' | tee -a $output #Write data to a file ls | tee $output echo | tee -a $output #Append System Information to the file echo '<<>>' | tee -a $output uname | tee -a $output
Producción
Esto no solo agregará el resultado al final del archivo sino que también imprimirá el resultado en la pantalla.