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