Come posso convogliare l'output di un comando all'input di altri due comandi contemporaneamente?
Come posso convogliare l'output di un comando all'input di altri due comandi contemporaneamente?
Risposte:
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 EDIT : quello che vedi less.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.
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".