Certaines commandes filtrent ou agissent sur l'entrée, puis la transmettent en sortie, je pense généralement à stdout
– mais certaines commandes prendront juste le stdin
et faire ce qu'ils en font, et ne rien afficher.
Je suis le plus familier avec OS X et donc il y en a deux qui me viennent immédiatement à l'esprit sont pbcopy
et pbpaste
– qui sont des moyens d'accéder au presse-papiers du système.
Quoi qu'il en soit, je sais que si je veux prendre stdout et cracher la sortie pour aller à la fois stdout
et un fichier alors je peux utiliser le tee
commande. Et je connais un peu xargs
, mais je ne pense pas que ce soit ce que je recherche.
Je veux savoir comment je peux diviser stdout
pour passer entre deux (ou plusieurs) commandes. Par exemple :
cat file.txt | stdout-split -c1 pbcopy -c2 grep -i errors
Il y a probablement un meilleur exemple que celui-là, mais ça m'intéresse vraiment de savoir comment je peux envoyer stdout à une commande qui ne la relaye pas et tout en gardant stdout
d'être "muet" - je ne demande pas comment cat
un fichier et grep
une partie et copiez-la dans le presse-papiers - les commandes spécifiques ne sont pas si importantes.
Aussi - je ne demande pas comment envoyer ceci dans un fichier et stdout
- c'est peut-être une question "en double" (désolé) mais j'ai fait quelques recherches et je n'ai pu trouver que des questions similaires qui demandaient comment se séparer entre stdout et un fichier - et les réponses à ces questions semblaient être tee
, ce qui, je pense, ne fonctionnera pas pour moi.
Enfin, vous pouvez demander "pourquoi ne pas simplement faire de pbcopy la dernière chose dans la chaîne de tuyaux ?" et ma réponse est 1) et si je veux l'utiliser et voir toujours la sortie dans la console ? 2) et si je veux utiliser deux commandes qui ne sortent pas stdout
après avoir traité l'entrée ?
Oh, et encore une chose - je me rends compte que je pourrais utiliser tee
et un tube nommé (mkfifo
) mais j'espérais un moyen de le faire en ligne, de manière concise, sans configuration préalable 🙂
Réponse acceptée :
Vous pouvez utiliser tee
et traiter la substitution pour ceci :
cat file.txt | tee >(pbcopy) | grep errors
Cela enverra toute la sortie de cat file.txt
à pbcopy
, et vous n'obtiendrez que le résultat de grep
sur votre console.
Vous pouvez mettre plusieurs processus dans le tee
partie :
cat file.txt | tee >(pbcopy) >(do_stuff) >(do_more_stuff) | grep errors