Come scrivere all'interno di un file Bash su Linux

4 gen 2021 3 min di lettura
Come scrivere all'interno di un file Bash su Linux
Indice dei contenuti

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.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.