Introduzione
Quando l'utente esegue un comando in una shell interattiva Linux, l'output viene visualizzato nel terminale di testo. Tuttavia, esistono modi per modificare questo comportamento utilizzando comandi shell aggiuntivi collegati in una pipeline.
In questo tutorial imparerai come utilizzare il comando tee in Linux per gestire l'output di un comando.
Prerequisiti
- Un sistema che esegue Linux
- Accesso alla riga di comando o al terminale
- Privilegi di sudo
Cosa fa tee Command in Linux?
La tee
il comando legge lo standard input (stdin) e lo scrive sia nello standard output (stdout) che in uno o più file. tee
di solito fa parte di una pipeline e qualsiasi numero di comandi può precederla o seguirla.
Comandi tee in Linux con esempi
La tee
comando viene utilizzato da solo o con opzioni aggiuntive. Le sezioni seguenti elencano le opzioni disponibili e forniscono esempi di utilizzo dei comandi.
Utilizzo di base
La sintassi di base per il tee
il comando è:
[command] | tee [options] [filename]
L'esempio seguente mostra l'uso di tee
per creare un file che memorizza informazioni su un'interfaccia di rete fornendo lo stesso output nel terminale:
Il comando cat conferma che tee
ha scritto correttamente l'output di ifconfig
nel file example.txt
:
Se il file utilizzato per il comando esiste già, tee
sovrascrive il contenuto precedente del file.
Aggiungi al file specificato
La sovrascrittura del contenuto del file è il comportamento predefinito del tee
comando. Usa l'argomento -a
(o --append
) per aggiungere l'output del comando alla fine del file.
[command] | tee -a [filename]
Ad esempio, usa echo
comando per aggiungere una riga di testo a un file:
Conferma l'aggiunta riuscita con il cat
comando:
Scrivi su più file
Usa tee
seguito da un numero qualsiasi di file per scrivere lo stesso output su ciascuno di essi:
[command] | tee [options] [filename1] [filename2]...
L'esempio seguente mostra la scrittura dell'output di echo
comando su due file:
Il ls
comando mostra che tee
file creati con successo example1.txt
e example2.txt
.
Nascondi l'output
Per dire a tee
per memorizzare l'output del comando in un file e saltare l'output del terminale, utilizzare la seguente sintassi:
[command] | tee [options] [filename] >/dev/null
Nell'esempio seguente, tee
crea un file contenente i dati dell'interfaccia di rete, saltando lo standard output:
Reindirizza l'output di un comando a un altro
tee
non deve essere l'ultimo comando nella pipeline. Usalo per inoltrare l'output a un altro comando:
[command] | tee [options] [filename] | [command]
Nell'esempio seguente, tee
memorizza l'output di ls
comando a example.txt
e passa il contenuto di quel file al comando grep, che trova e visualizza tutte le istanze della parola "esempio":
Ignora gli interrupt
Per abilitare tee
per uscire correttamente anche dopo che il comando precedente è stato interrotto, aggiungere l'argomento -i
(o --ignore-interrupts
):
[command] | tee -i [filename]
L'esempio successivo mostra tee
scrivendo l'output dal comando ping e completando l'azione con successo anche dopo ping
viene interrotto con Ctrl+C
:
Utilizzare tee con Sudo
Per abilitare tee
per scrivere in un file di proprietà di root o in un file appartenente a un altro utente, inserisci il comando sudo subito prima di tee
.
[command] | sudo tee [options] [filename]
L'esempio seguente mostra un tentativo non riuscito di scrivere nel sudoex.txt
di proprietà della radice . Quando il sudo
comando viene aggiunto, l'operazione viene completata:
Utilizzare tee in Vim Editor
Se apri e modifichi un file di proprietà di root in Vim senza usare sudo
comando, il tentativo di salvare le modifiche produce un errore:
Per ignorare questo errore, digita quanto segue in Vim:
:w !sudo tee %
Dopo aver inserito il sudo
password, Vim mostra un avviso ma scrive le modifiche nel file.
Diagnostica errori di scrittura su non pipe
Per istruire tee
per stampare un messaggio di errore quando il processo non riesce, usa il -p
argomento:
[command] | tee -p [filename]
L'azione predefinita di tee -p
consiste nell'uscire e stampare il messaggio di errore immediatamente dopo aver rilevato l'errore durante la scrittura su una pipe. Per modificare il comportamento del comando in caso di errore di scrittura, utilizza il --output-error
argomento, seguito dalla modalità che specifica il comportamento:
[command] | tee --output-error=[mode] [filename]
Ci sono quattro modalità possibili:
warn
– diagnostica gli errori di scrittura su qualsiasi output.warn-nopipe
– diagnostica gli errori di scrittura su qualsiasi output non pipe.exit
– esce in caso di errori di scrittura su qualsiasi output.exit-nopipe
– esce in caso di errori di scrittura su qualsiasi output non pipe.
Usa il comando tee con lo script Bash
La tee
comando si trova spesso negli script bash. Considera il seguente esempio:
Lo script sopra stampa il messaggio "Hello World" e memorizza l'output in un file di registro. L'esecuzione dello script crea un file di registro nel tmp
cartella. Il log contiene l'output dello script:
Guarda i file di registro
La scrittura dell'output dello script in un file di registro viene in genere eseguita con >
operatore:
./testbash.sh > testbash.log
Il comando sopra crea un file di registro ma non scrive nulla nell'output standard.
Usa tee
per creare un file di registro e vedere l'output nel terminale:
./testbash.sh | tee testbash.log
Vedi Guida e informazioni sulla versione
Vedi la versione attuale della tee
comando digitando:
tee --version
Per le istruzioni relative alla tee
sintassi del comando e gli argomenti disponibili, utilizzare l'argomento della guida del comando:
tee --help