Ci sono alcuni comandi che filtrano o agiscono sull'input, e poi lo passano come output, penso di solito a stdout
– ma alcuni comandi prenderanno solo stdin
e fare tutto ciò che fanno con esso e non produrre nulla.
Conosco molto OS X e quindi ce ne sono due che mi vengono in mente immediatamente sono pbcopy
e pbpaste
– che sono i mezzi per accedere agli appunti di sistema.
Ad ogni modo, so che se voglio prendere stdout e sputare l'output per andare su entrambi stdout
e un file quindi posso usare il tee
comando. E so qualcosa su xargs
, ma non credo sia quello che sto cercando.
Voglio sapere come posso dividere stdout
per passare tra due (o più) comandi. Ad esempio:
cat file.txt | stdout-split -c1 pbcopy -c2 grep -i errors
Probabilmente c'è un esempio migliore di quello, ma sono davvero interessato a sapere come posso inviare stdout a un comando che non lo trasmette e mantenendo stdout
dall'essere "disattivato" – non sto chiedendo come cat
un file e grep
parte di esso e copialo negli appunti:i comandi specifici non sono così importanti.
Inoltre, non sto chiedendo come inviare questo a un file e stdout
– questa potrebbe essere una domanda "duplicata" (scusate), ma ho cercato e sono riuscito a trovarne solo di simili che chiedevano come dividere tra stdout e un file – e le risposte a queste domande sembravano essere tee
, che non credo funzionerà per me.
Infine, potresti chiedere "perché non fare semplicemente pbcopy l'ultima cosa nella catena di pipe?" e la mia risposta è 1) cosa succede se voglio usarlo e vedere ancora l'output nella console? 2) cosa succede se voglio usare due comandi che non generano stdout
dopo aver elaborato l'input?
Oh, e un'altra cosa:mi rendo conto che potrei usare tee
e una named pipe (mkfifo
) ma speravo in un modo in cui ciò potesse essere fatto in linea, in modo conciso, senza una configurazione preliminare 🙂
Risposta accettata:
Puoi usare tee
e elabora la sostituzione per questo:
cat file.txt | tee >(pbcopy) | grep errors
Questo invierà tutto l'output di cat file.txt
a pbcopy
e otterrai solo il risultato di grep
sulla tua console.
Puoi inserire più processi nel tee
parte:
cat file.txt | tee >(pbcopy) >(do_stuff) >(do_more_stuff) | grep errors