GNU/Linux >> Tutoriels Linux >  >> Linux

Comment envoyer Stdout à plusieurs commandes ?

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.

Connexe :Ubuntu – XFCE – Envoyer la fenêtre à un autre moniteur en appuyant sur une touche ?

Vous pouvez mettre plusieurs processus dans le tee partie :

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

Linux
  1. Comment utiliser les commandes d'historique de Bash

  2. Envoyer des commandes à plusieurs sessions SSH avec Terminator

  3. Tutoriel Unix Sed :comment exécuter plusieurs commandes Sed

  4. Entrée standard multiple ? Comment?

  5. Comment puis-je exécuter plusieurs commandes lors de l'utilisation de find ?

Comment utiliser les commandes personnalisées dans LibreOffice

Comment configurer un cluster à plusieurs nœuds Proxmox VE 4

Comment contrôler Vagrant Box à l'aide des commandes Vagrant

Comment exécuter plusieurs commandes Linux en une seule commande

Comment exécuter des commandes Sudo sans mot de passe

Comment exécuter plusieurs commandes Linux à la fois dans le terminal Linux