Come salvare l'output di un comando in un file in Bash (ovvero il terminale Linux e macOS)
Quando si esegue un comando al prompt di bash, normalmente stampa l'output di quel comando direttamente sul terminale in modo da poterlo leggere immediatamente. Ma bash consente anche di "reindirizzare" l'output di qualsiasi comando, salvandolo in un file di testo in modo da poter rivedere l'output in un secondo momento.
Questo funziona in bash su qualsiasi sistema operativo, da Linux e macOS all'ambiente bash basato su Ubuntu di Windows 10.
Opzione uno: reindirizzare l'output su un solo file
Per utilizzare il reindirizzamento bash, si esegue un comando, si specifica il >
o >>
operatore, quindi fornire il percorso di un file a cui si desidera reindirizzare l'output.
-
>
reindirizza l'output di un comando in un file, sostituendo il contenuto esistente del file. -
>>
reindirizza l'output di un comando in un file, aggiungendo l'output ai contenuti esistenti del file.
Tecnicamente, questo reindirizza "stdout": l'output standard, che è lo schermo, in un file.
Ecco un semplice esempio. Il ls
comando elenca file e cartelle nella directory corrente. Così. quando si esegue il seguente comando, ls
elencherà i file e le cartelle nella directory corrente. Ma non li stamperà sullo schermo: li salverà nel file specificato.
ls> / percorso / al / file
Non è necessario specificare il percorso di un file esistente. Specificare un percorso valido e bash creerà un file in quella posizione.
Se visualizzi il contenuto del file, vedrai il ls
l'output del comando. Ad esempio, il gatto
comando stampa il contenuto di un file sul terminale:
gatto / percorso / a / file
Ricorda il
l'operatore sostituisce il contenuto esistente del file con l'output del comando. Se si desidera salvare l'output di più comandi in un singolo file, si utilizzerà il >
operatore invece. Ad esempio, il seguente comando aggiungerà le informazioni di sistema al file specificato:>>
uname -a >> / percorso / su / file
Se il file non esiste già, bash creerà il file. In caso contrario, bash lascerà da solo il contenuto esistente del file e aggiungerà l'output alla fine del file.
Quando visualizzi il contenuto del file, vedrai i risultati del tuo secondo comando aggiunti alla fine del file:
Puoi ripetere questo processo tutte le volte che vuoi per continuare ad aggiungere l'output alla fine del file.
Opzione due: stampa normalmente l'output e reindirizza a un file
Potrebbe non piacerti reindirizzare l'output con >
o >>
operatori, poiché non vedrete l'output del comando nel terminale. Questo è ciò che tee
il comando è per. Il comando tee stampa l'input che riceve sullo schermo e lo salva in un file allo stesso tempo.
Per reindirizzare l'output di un comando a tee
, stampandolo sullo schermo e salvandolo in un file, utilizzare la seguente sintassi:
comando | tee / percorso / su / file
Questo sostituirà qualsiasi cosa nel file con l'output del comando, proprio come il >
operatore.
Per reindirizzare l'output di un comando a tee
, stampando sullo schermo e salvandolo in un file, ma aggiungendolo alla fine del file:
comando | tee -a / percorso / su / file
Questo aggiungerà l'output alla fine del file, proprio come il >>
operatore.
La shell bash include alcuni operatori avanzati aggiuntivi che svolgono funzioni simili. Saranno particolarmente utili se stai scrivendo script di bash. Consulta il capitolo Redirezione I / O nella Guida avanzata di scripting di Bash per informazioni più dettagliate.