Lösung 1:Prozesssubstitution verwenden
Der bequemste Weg, dies zu tun, ist die Verwendung von Prozesssubstitution. In der Bash sieht die Syntax wie folgt aus:
foo -o >(other_command)
(Beachten Sie, dass dies ein Bashismus ist. Es gibt ähnliche Lösungen für andere Shells, aber unterm Strich ist es nicht portabel.)
Lösung 2:Explizit benannte Pipes verwenden
Sie können dies explizit / manuell wie folgt tun:
-
Erstellen Sie eine benannte Pipe mit
mkfifo
Befehl.mkfifo my_buf
-
Starten Sie Ihren anderen Befehl mit dieser Datei als Eingabe
other_command < my_buf
-
Führen Sie
foo
aus und lass es seine Ausgabe nachmy_buf
schreibenfoo -o my_buf
Lösung 3:Verwenden von /dev/stdout
Sie können auch die Gerätedatei /dev/stdout
verwenden wie folgt
foo -o /dev/stdout | other_command
Sie könnten die Magie von UNIX nutzen und eine benannte Pipe erstellen :)
-
Erstellen Sie die Pipe
$ mknod -p mypipe
-
Starten Sie den Prozess, der aus der Pipe
liest$ second-process < mypipe
-
Starten Sie den Prozess, der in die Pipe schreibt
$ foo -o mypipe
Um Stackoverflow glücklich zu machen, lassen Sie mich einen ausreichend langen Satz schreiben, da meine vorgeschlagene Lösung nur 18 Zeichen lang ist, anstatt der erforderlichen 30+
foo -o /dev/stdout
Named Pipes funktionieren gut, aber Sie haben eine schönere, direktere Syntax, die über die Bash-Prozesssubstitution verfügbar ist, die den zusätzlichen Vorteil hat, dass keine permanente Named Pipe verwendet wird, die später gelöscht werden muss (Prozesssubstitution verwendet temporäre Named Pipes im Hintergrund):
foo -o >(other command)
Wenn Sie die Ausgabe an Ihren Befehl weiterleiten und die Ausgabe auch in einer Datei speichern möchten, können Sie Folgendes tun:
foo -o >(tee output.txt) | other command