GNU/Linux >> Linux Esercitazione >  >> Linux

Come inviare Stdout a più comandi?

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.

Correlati:Ubuntu – XFCE – Invia la finestra ad un altro monitor premendo un tasto?

Puoi inserire più processi nel tee parte:

cat file.txt | tee >(pbcopy) >(do_stuff) >(do_more_stuff) | grep errors

Linux
  1. Come usare i comandi della cronologia di Bash

  2. Invia comandi a più sessioni SSH con Terminator

  3. Comandi multipli in Sshpass?

  4. Come eseguire il timeout di un gruppo di comandi in Bash

  5. Come eseguo più comandi quando utilizzo find?

Come usare i comandi personalizzati in LibreOffice

Come configurare un cluster di nodi multipli Proxmox VE 4

Come controllare Vagrant Box usando i comandi Vagrant

Come eseguire più comandi Linux in un unico comando

Come eseguire comandi Sudo senza password

Come eseguire più comandi Linux contemporaneamente nel terminale Linux