Quando eseguiamo qualsiasi comando in una shell bash, generalmente stampa l'output di quel comando sul terminale in modo che possiamo leggerlo immediatamente. Ma bash fornisce anche un'opzione per 'reindirizzare' l'output di qualsiasi comando bash su un file di registro. Può salvare l'output in un file di testo in modo da poterlo rivedere in seguito ogni volta che è necessario.
Metodo 1: scrivere l'output solo su un file
Per scrivere l'output dei comandi Bash in un file, possiamo usare il segno della parentesi angolare destra (>) o il doppio segno dell'angolo destro (>>):
Segno di parentesi ad angolo retto (>)
Viene utilizzato per scrivere l'output del comando bash su un file su disco. Se non è presente alcun file con il nome specificato, crea un nuovo file con lo stesso nome. Se il file è presente con il nome specificato, il contenuto del file verrà sovrascritto.
Doppio segno ad angolo retto (>>)
Viene utilizzato per scrivere l'output dei comandi bash in un file, aggiungendo l'output al contenuto esistente del file. Se il file non è presente ne crea uno nuovo con il nome specificato.
Tecnicamente, entrambi questi operatori reindirizzano 'stdout (l'output standard)' a un file.
In modo semplice, quando stiamo scrivendo il file per la prima volta e non vogliamo che i dati precedenti siano presenti nel file, dovremmo usare il segno della parentesi angolare chiusa (>). Sovrascriverà il contenuto se è già presente nel file. E nello script successivo, potremmo usare il doppio segno dell'angolo retto (>>) per aggiungere i dati a un file.
Esempio
Il comando 'ls' viene utilizzato per stampare tutti i file e le cartelle presenti nella directory corrente. Ma quando eseguiamo il comando 'ls' con il segno della parentesi angolare chiusa (>), non verrà stampato l'elenco di file e cartelle sullo schermo. Salverà l'output nel file che specifichiamo con esso, ovvero come mostrato di seguito:
BashScript
#!/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
Produzione
Come mostrato qui, l'output del comando 'ls' viene reindirizzato in un file. Per stampare il contenuto di un file sul terminale, possiamo usare il comando 'cat' nella seguente forma:
BashScript
#!/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
Produzione
Se vogliamo reindirizzare l'output di più comandi su un singolo file senza cancellare i dati disponibili, allora possiamo utilizzare l'operatore >>. Supponiamo di voler aggiungere le informazioni di sistema al file specificato, possiamo farlo nel modo seguente:
BashScript
#!/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
Produzione
Qui, il risultato del secondo comando viene aggiunto alla fine del file.
java int in carattere
Possiamo ripetere questo processo più volte per continuare ad aggiungere l'output alla fine del file.
Metodo 2: stampare l'output normalmente e scriverlo su un file
Ad alcune persone potrebbe non piacere scrivere l'output su un file utilizzando gli operatori > o >>, poiché non ci sarà alcun output del comando nel terminale. Ecco perché viene utilizzato il comando 'tee'. Il comando 'tee' viene utilizzato per stampare sullo schermo l'input che riceve. Può salvare l'output in un file allo stesso tempo.
BashScript
#!/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
Produzione
Ciò sovrascriverà il contenuto del file, proprio come l'operatore > ma stamperà anche l'output sullo schermo.
Se vogliamo scrivere l'output su un file senza rimuovere il contenuto del file utilizzando il comando tee, possiamo utilizzare il seguente modulo che stamperà anche l'output sul terminale:
BashScript
#!/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
Produzione
Ciò non solo aggiungerà l'output alla fine del file, ma stamperà anche l'output sullo schermo.