L'output di un comando può essere reindirizzato ad altri due comandi?


Risposte:


56

Sembra che il teecomando farà quello che vuoi.

La chiave è usare

>( )

per la sostituzione del processo . Con tee, utilizzare il modello seguente:

tee >(proc1) >(proc2) >(proc3) | proc4

Quindi, se si desidera utilizzare l'output di lscome input per due grepprogrammi diversi , salvare l'output di ciascuno grepin file diversi e reindirizzare tutti i risultati less, provare:

ls -A | tee >(grep ^[.] > hidden-files) >(grep -v ^[.] > normal-files) | less

I risultati di ls -Asaranno "convogliati" in entrambi i grepsecondi. Il file hidden-filesavrà il contenuto dell'output del primo grepe normal-filesavrà i risultati del secondo grep. Tutti i file verranno visualizzati nel cercapersone less. EDIT : quello che vedi lessè lo stesso esatto output di ls -A, non il risultato di greps. Se si desidera modificare l'output da ls -Aa less(ad esempio, scambiando l'ordine in modo che i file normali siano elencati prima di quelli nascosti), provare questo:

ls -A | tee >(grep ^[.]) >(grep -v ^[.]) >/dev/null | less

Senza >/dev/null, l'output di greps verrebbe aggiunto all'output ls -Ainvece di sostituirlo.

fonte


3
questo è molto buono!
hayalci,

3
+1 perché anche dopo 10 anni di scripting della shell, non l'avevo mai visto!
jtimberman,

6

Usa "tee".

Esempio:

grep someSearchString someFile | tee /dev/tty | wc -l > grepresult

Questo invierà l'output del comando grep sia al terminale che a wc (il cui output viene a sua volta reindirizzato al file grepresult).

"Tee" è spiegato nell'articolo Wikipedia tee (comando) . Centrale è: "Il comando tee legge l'input standard, quindi scrive il suo contenuto nell'output standard e lo copia simultaneamente nei file o nelle variabili specificati".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.