Introduzione
Una delle attività più comuni quando si scrivono script Bash o si lavora sulla riga di comando di Linux è leggere un file e scrivere in un file.
Questo articolo spiega come scrivere del testo in un file in Bash, utilizzando gli operatori e il comando di reindirizzamento tee
.
Scrivere su un file utilizzando gli operatori di reindirizzamento
In Bash, il reindirizzamento dell'output consente di catturare l'output di un comando e di scriverlo su un file.
Il formato generale per reindirizzare e scrivere l'output in un file è il seguente:
output > filename
output >> filename
- L'operatore di reindirizzamento
>
scrive l'output in un determinato file. Se il file esiste, viene troncato a lunghezza zero. In caso contrario, il file viene creato. Fai molta attenzione quando usi questo operatore poiché potresti sovrascrivere un file importante. - L'operatore di reindirizzamento
>>
aggiunge l'output a un determinato file. Il file viene creato se non esiste.
È necessario disporre delle autorizzazioni di scrittura per il file. In caso contrario, riceverai un errore di autorizzazione negata.
Ecco un semplice esempio che mostra come reindirizzare l'output del comando echo
a un file:
echo "this is a line" > file.txt
Per evitare di sovrascrivere i file esistenti, abilitare l'opzione "noclobber" con il builtin 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.
Scrivere su un file utilizzando il comando tee
Il comando tee
legge dallo standard input e scrive contemporaneamente sullo standard output e su uno o più file:
echo "this is a line" | tee file.txt
Il comportamento predefinito del comando tee
è sovrascrivere il file specificato, come l'operatore >
. Per aggiungere l'output al file, invoca il comando con l' opzione -a
(--append
):
echo "this is a line" | tee -a file.txt
Se non vuoi che il comando tee
scriva sullo standard output, puoi reindirizzarlo a /dev/null
:
echo "this is a line" | tee file.txt >/dev/null
Per scrivere il testo in più di un file, specificare i file come argomenti del comando tee
:
echo "this is a line" | tee file_1.txt file_2.txt file_3.txt
Un altro vantaggio del comando tee
è che puoi usarlo insieme al comando sudo
e scrivere su file di proprietà di altri utenti. Per aggiungere testo a un file per il quale non disponi dei permessi di scrittura, anteponi sudo
prima di tee
:
echo "this is a line" | sudo tee file.txt
L'output del comando echo
viene passato come input a tee
, che eleva i permessi sudo e scrive il testo nel file.
Conclusione
In Linux, per scrivere testo in un file, utilizzare gli operatori di reindirizzamento >
e >>
o il comando tee
.