Linux / Debian - Que fait «pipi» dans moreutils?

21

J'ai récemment découvert le paquet «moreutils» dans Debian (et Ubuntu) . C'est une collection d'outils Unix pratiques.

L'une des commandes est «pipi». La page de manuel indique:

pipi est comme tee mais pour les tuyaux.

Cependant, c'est une courte page de manuel, j'ai déposé un bug à ce sujet . Est-ce que quelqu'un sait ce qu'il fait, comment l'utiliser, pourquoi on l'utiliserait?

Rory
la source

Réponses:

29

Voici ce que vous pouvez faire avec du pipi:

seq 5 -1 1 > file
cat file |pee 'sort -u > sorted' 'sort -R > unsorted'

Donc pipi fonctionne avec des tubes shell au lieu de fichiers.

bash n'a pas besoin de faire pipi, il peut ouvrir des commandes shell sous forme de fichiers:

cat file |tee >(sort -u > sorted) >(sort -R > unsorted)
Tobu
la source
1
Est-ce que cela fonctionnerait avec des jockers de nom de fichier? Voir zgp.org/~dmarti/tips/git-multiple-post-receive-hooks - pipi est utilisé pour se multiplier stdinet donner des clones à chaque script correspondant au modèle de nom de fichier, est-ce que bash pur peut le faire? AFAIU, cela développerait un astérisque à l'intérieur des crochets causant quelque chose comme tee >(app1 app2 app3 app4)ce qui n'est pas ce >(app1) >(app2) >(app3) >(app4)que votre réponse montre
Arioch 'Le
@Arioch, la syntaxe bash ne fonctionnera pas avec la technique hooks-joker. Installez simplement moreutils.
Tobu
1
Utilisez tee >/dev/nullpour éviter de répliquer stdin en stdout
jfs
1
le véritable avantage de faire pipi sur le tee est qu'il envoie la sortie standard de chaque sous-processus à la sortie standard du pipi lui-même. avec tee, vous devez rediriger chaque processus stdout vers un fichier si vous voulez l'enregistrer, mais avec pipi il vous suffit de sauvegarder la stdout. bien sûr, cela n'a de sens que si chaque sous-commande génère une chose au format similaire. comme si vous ne pouviez pas comprendre comment ou des expressions régulières dans grep que vous pourriez faire cat file | pee 'grep this' 'grep that' > lines.with.this.or.that.txt... en utilisant tee, vous obtiendrez juste une copie de filesur stdout.
underrun
La >(command)fonctionnalité est appelée substitution de processus .
Vlastimil Ovčáčík
16

Il est probablement plus facile de comprendre si vous l'avez utilisé en teepremier. Cet ancien outil utile prend l'entrée standard et écrit dans plusieurs fichiers, ainsi que la sortie standard. Le suivant:

echo "Hello world" | tee one two

Va créer deux fichiers, nommés oneet twocontenant tous deux la chaîne Hello world. Il sera également imprimé sur votre terminal.


Exécute maintenant peeune fonction similaire, mais au lieu de rediriger la sortie vers plusieurs fichiers, il redirige vers plusieurs commandes secondaires, ala pipes. Il diffère légèrement du teefait qu'il n'envoie pas le stdin d'origine à stdout car cela n'aurait aucun sens de le combiner avec la sortie des commandes secondaires. L'exemple très simple suivant:

echo "Hello world" | pee cat cat

Sortira la chaîne Hello worldsur votre terminal deux fois. En effet, chacune des deux instances de catreçoit la sortie standard et fait ce catqui est imprimé.

Dan Carley
la source