GNU/Linux >> LINUX-Kenntnisse >  >> Linux

stdout als Dateinamen für das Befehlszeilenprogramm übergeben?

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:

  1. Erstellen Sie eine benannte Pipe mit mkfifo Befehl.

    mkfifo my_buf
    
  2. Starten Sie Ihren anderen Befehl mit dieser Datei als Eingabe

    other_command < my_buf
    
  3. Führen Sie foo aus und lass es seine Ausgabe nach my_buf schreiben

    foo -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 :)

  1. Erstellen Sie die Pipe

    $ mknod -p mypipe
    
  2. Starten Sie den Prozess, der aus der Pipe

    liest
    $ second-process < mypipe
    
  3. 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


Linux
  1. 8 Tipps für die Linux-Kommandozeile

  2. Linux wc Befehl für Anfänger erklärt (6 Beispiele)

  3. Wie zerlegt man eine Datei wie Split in Stdout, um sie an einen Befehl weiterzuleiten?

  4. Wie übergebe ich den Inhalt einer Datei als Befehlszeilenparameter?

  5. Wozu dient Linux test -a command test?

Tutorial für Linux-Dateibefehle für Anfänger (5 Beispiele)

Diff-Befehl in Linux mit Beispielen

ls-Befehl in Linux zum Auflisten von Dateien

Newsboat – Ein Befehlszeilen-RSS/Atom-Feed-Reader für Textkonsolen

Zeigen Sie den Inhalt einer Datei in der Linux-Befehlszeile an

Exa – Ein moderner Ersatz für den Befehl ls