Introducción
Una de las tareas más comunes al escribir scripts Bash o trabajar en la línea de comandos de Linux es leer un archivo y escribir en un archivo.
Este artículo explica cómo escribir texto en un archivo en Bash, usando los operadores y el comando de redirección tee
.
Escribir en un archivo usando operadores de redireccionamiento
En Bash, la redirección de salida le permite capturar la salida de un comando y escribirla en un archivo.
El formato general para redirigir y escribir la salida en un archivo es el siguiente:
output > filename
output >> filename
- El operador de redireccionamiento
>
escribe la salida en un archivo en particular. Si el archivo existe, se trunca a una longitud cero. Si no es así, se crea el archivo. Tenga mucho cuidado al utilizar este operador, ya que puede sobrescribir un archivo importante. - El operador de redireccionamiento
>>
agrega la salida a un archivo determinado. El archivo se crea si no existe.
Debe tener permisos de escritura para el archivo. De lo contrario, obtendrá un error de permiso denegado.
Aquí hay un ejemplo simple que muestra cómo redirigir la salida del comando echo
a un archivo:
echo "this is a line" > file.txt
Para evitar sobrescribir archivos existentes, habilite la opción "noclobber" con el comando incorporado set
:
set -o noclobber
echo "this is a line" > file.txt
Dovresti visualizzare un messaggio di output simile al seguente:
bash: file.txt: cannot overwrite existing file
L'operatore >|
consente di sovrascrivere l'opzione "noclobber" di Bash:
set -o noclobber
echo "this is a line" >| file.txt
L'operatore >>
aggiunge l'output alla fine del file, invece di sovrascrivere il file:
echo "this is a line" >> file.txt
Usa il comando printf
se vuoi creare un output complesso:
printf "Hello, I'm %s.\n" $USER > file.txt
Se vuoi scrivere più righe in un file, usa il reindirizzamento Here document (Heredoc).
Ad esempio, puoi passare il contenuto al comando cat
e scriverlo in un file:
cat << EOF > file.txt
The current working directory is: $PWD
You are logged in as $(whoami)
EOF
Per aggiungere le righe, cambiare >
con >>
prima del nome del file:
cat << EOF >> file.txt
The current working directory is: $PWD
You are logged in as $(whoami)
EOF
Puoi scrivere l'output di qualsiasi comando in un file:
date +"Year: %Y, Month: %m, Day: %d" > file.txt
L'output del comando date
verrà scritto nel file.
Escribir en un archivo usando el comando tee
El comando tee
lee desde la entrada estándar y escribe simultáneamente en la salida estándar y en uno o más archivos:
echo "this is a line" | tee file.txt
El comportamiento predeterminado del comando tee
es sobrescribir el archivo especificado, como operador >
. Para agregar la salida al archivo, invoque el comando con la opción -a
( --append
):
echo "this is a line" | tee -a file.txt
Si no desea que el comando tee
escriba en la salida estándar, puede redirigirlo a /dev/null
:
echo "this is a line" | tee file.txt >/dev/null
Para escribir texto en más de un archivo, especifique los archivos como argumentos de comando tee
:
echo "this is a line" | tee file_1.txt file_2.txt file_3.txt
Otra ventaja del comando tee
es que puede usarlo junto con el comando sudo
y escribir en archivos propiedad de otros usuarios. Para agregar texto a un archivo para el que no tiene permisos de escritura, anteponga sudo
antes tee
:
echo "this is a line" | sudo tee file.txt
La salida del comando echo
se pasa como entrada a tee
, lo que aumenta los permisos de sudo y escribe el texto en el archivo.
Conclusión
En Linux, al texto de escritura a un archivo, utilice los operadores de redirección >
y >>
o el comando tee
.