GNU/Linux >> Linux Esercitazione >  >> Linux

Come funziona il comando Tee?

Chiuso . Questa domanda ha bisogno di dettagli o chiarezza. Attualmente non accetta risposte.

Vuoi migliorare questa domanda? Aggiungi dettagli e chiarisci il problema modificando questo post.

Chiuso 4 anni fa.


Migliora questa domanda

Dopo aver incontrato circa 3 tee spiegazioni che considero poco didattiche, chiederei una spiegazione semplice, generale e graduale (se possibile) su questo comando, rivolto ai nuovi arrivati ​​​​di Linux.

Capisco che lo usiamo tramite una pipe, sullo stdout di un comando o, in alternativa, direttamente un determinato file, ma penso che mi manchi ciò che il comando fa effettivamente con questo contenuto e quando è utile.

Quindi ecco cosa chiedo, sperando di trovare una spiegazione didattica, servita ai nuovi arrivati ​​in modo chiaro e graduale:

  1. Come funziona il comando con lo stdout di un comando o, in alternativa, con i file stessi?

  2. Perché è comune dire tee legge l'input standard? Voglio dire, se faccio ls -l , tee non legge la sintassi ls -l stesso ma piuttosto lo stdout stampato nella sessione.

Inoltre, se vuoi, condividi un esempio pratico tratto dal tuo lavoro quotidiano su quando tee ti è molto utile?

Risposta accettata:

Dal tee manuale sul mio sistema:

L'utility tee copia lo standard input in standard output, effettuando una copia
in zero o più file. L'output è senza buffer.

Quindi, legge dallo standard input e lo copia nello standard output, duplicando anche il flusso in uno o più file.

Nella pipeline seguente, tee prenderebbe l'output del primo comando nella pipeline e lo copierebbe nello standard output (il terminale) facendone anche copie nei file one , two e three :

$ somecommand | tee one two three

tee ha molti usi, uno è in combinazione con sudo per reindirizzare l'output a un file di proprietà di root:

$ somecommand | sudo tee /root/somefile >/dev/null

Quanto segue non hanno funzionato poiché il reindirizzamento avviene come utente non privilegiato (avrebbe anche eseguito somecommand come root che potrebbe essere indesiderato):

$ sudo somecommand >/root/somefile

Un esempio artificiale di aggiungere un insieme fisso di righe a più file contemporaneamente (a tutti gli utenti ~/.profile file, supponendo che il * si espande ai nomi utente e che la riga di comando espansa non diventi troppo lunga per essere gestita dalla shell):

$ tee -a /home/*/.profile <<'END_NEWPATH'
PATH="$PATH:/opt/bin"
END_NEWPATH

Un vero esempio di utilizzo di tee :

time doas box-build.sh 2>&1 | tee build.out |  grep '^=*>'

Questo sono io che costruisco il sistema di base OpenBSD. doas è l'“equivalente” OpenBSD di sudo e box-build.sh è un piccolo script di shell che fa la costruzione (essenzialmente cd /usr/src && make obj && make build ). Vorrei archiviare l'output dell'intero processo di compilazione, inclusi eventuali errori o avvisi, ma non voglio che tutto venga riversato nel mio terminale. A tal fine utilizzo tee per salvare tutto in build.out e poi grep solo per avere un'idea di dove ci troviamo nel processo nel terminale.

Correlati:script di shell con funzione e parametro come variabili?
Linux
  1. Come funziona il comando oc debug in OpenShift

  2. Come funziona il bit appiccicoso?

  3. In che modo il comando Sed '1!g;h;$!d' inverte il contenuto di un file?

  4. In che modo il comando stat calcola i blocchi di un file?

  5. Come funziona il comando ps?

Come utilizzare il comando xargs di Linux

Come utilizzare il comando tee di Linux

Come utilizzare il comando superiore in Linux

Come utilizzare il comando Ping di Linux

Come usare il comando nmap

Come personalizzare il comando top di Linux