Solution 1 :Utiliser la substitution de processus
Le moyen le plus pratique de le faire est d'utiliser la substitution de processus. Dans bash, la syntaxe ressemble à ceci :
foo -o >(other_command)
(Notez qu'il s'agit d'un bashisme. Il existe des solutions similaires pour d'autres shells, mais l'essentiel est qu'il n'est pas portable.)
Solution 2 :Utiliser explicitement des canaux nommés
Vous pouvez faire ce qui précède explicitement/manuellement comme suit :
-
Créez un canal nommé en utilisant le
mkfifo
commande.mkfifo my_buf
-
Lancez votre autre commande avec ce fichier en entrée
other_command < my_buf
-
Exécutez
foo
et laissez-le écrire sa sortie dansmy_buf
foo -o my_buf
Solution 3 :Utiliser /dev/stdout
Vous pouvez également utiliser le fichier de périphérique /dev/stdout
comme suit
foo -o /dev/stdout | other_command
Vous pouvez utiliser la magie d'UNIX et créer un tube nommé :)
-
Créer le tuyau
$ mknod -p mypipe
-
Démarrer le processus qui lit à partir du tube
$ second-process < mypipe
-
Démarrer le processus, qui écrit dans le tube
$ foo -o mypipe
Afin de rendre stackoverflow heureux, permettez-moi d'écrire une phrase assez longue car ma solution proposée ne contient que 18 caractères au lieu des 30+ requis
foo -o /dev/stdout
Les canaux nommés fonctionnent bien, mais vous avez une syntaxe plus agréable et plus directe disponible via la substitution de processus bash qui a l'avantage supplémentaire de ne pas utiliser de canal nommé permanent qui doit être supprimé ultérieurement (la substitution de processus utilise des canaux nommés temporaires dans les coulisses) :
foo -o >(other command)
De plus, si vous souhaitez rediriger la sortie vers votre commande et également enregistrer la sortie dans un fichier, vous pouvez le faire :
foo -o >(tee output.txt) | other command