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

Wie funktioniert das <( cmd )-Muster in Bash?

Dies wird Prozesssubstitution genannt.

3.5.6 Prozessersetzung

Die Prozesssubstitution ermöglicht es, auf die Eingabe oder Ausgabe eines Prozesses mit einem Dateinamen zu verweisen.

Die Prozessliste wird asynchron ausgeführt, und ihre Ein- oder Ausgabe erscheint als Dateiname. Dieser Dateiname wird als Ergebnis der Erweiterung als Argument an den aktuellen Befehl übergeben. Wenn die Form>(Liste) verwendet wird, liefert das Schreiben in die Datei Eingaben für die Liste. Wenn die Form <(Liste) verwendet wird, sollte die als Argument übergebene Datei gelesen werden, um die Ausgabe der Liste zu erhalten. Beachten Sie, dass zwischen und der linken Klammer kein Leerzeichen stehen darf, da das Konstrukt sonst als Umleitung interpretiert würde. Die Prozesssubstitution wird auf Systemen unterstützt, die Named Pipes (FIFOs) oder die Methode /dev/fd zum Benennen offener Dateien unterstützen.

Es ist nicht nur ein Bash-Ding, wie es ursprünglich in ksh auftauchte, sondern es ist nicht im Posix-Standard enthalten.

Unter der Haube hat die Prozesssubstitution zwei Implementierungen. Auf Systemen, die /dev/fd unterstützen (die meisten Unix-ähnlichen Systeme) funktioniert es durch den Aufruf von pipe( )-Systemaufruf, der einen Dateideskriptor $fd zurückgibt für eine neue anonyme Pipe und dann die Zeichenfolge /dev/fd/$fd erstellen , und ersetzt das in der Befehlszeile. Auf Systemen ohne /dev/fd Unterstützung, es ruft mkfifo auf mit einem neuen temporären Dateinamen, um eine benannte Pipe zu erstellen, und ersetzt diesen Dateinamen auf der Befehlszeile.


Sie können an <( somecommand ) denken als Dateiname einer temporären Datei, die die Ausgabe von somecommand enthält . Mit anderen Worten,

utility < <( somecommand )

ist eine Abkürzung für

somecommand >tempfile
utility <tempfile
rm -f tempfile

Und

utility <( somecommand )

ist eine Abkürzung für

somecommand >tempfile
utility tempfile  # notice the lack of redirection here (utility expected to read from "tempfile")
rm -f tempfile

Ebenso >( somecommand ) kann als Dateiname einer temporären Datei angesehen werden, die in somecommand eingespeist wird auf seiner Standardeingabe. Mit anderen Worten,

utility > >( somecommand )

ist eine Abkürzung für

utility >tempfile
somecommand <tempfile
rm -f tempfile

Und

utility >( somecommand )

könnte möglicherweise eine Abkürzung für

sein
mkfifo temppipe
somecommand <temppipe &
utility temppipe  # utility is expected to write to "temppipe"
rm -f temppipe

(oder so ähnlich)


Linux
  1. Der Zweck von .bashrc und wie funktioniert es?

  2. Wie funktionieren die Interna von Sudo?

  3. Wie funktioniert der Continue-Befehl in einem Bash-Skript mit eingebetteten Schleifen?

  4. Ssh – Wie funktioniert TCP-Keepalive in Ssh?

  5. Wie funktioniert der Tee-Befehl?

So verwenden Sie den Bash-Lesebefehl

Wie funktioniert Swap-Speicher in Linux?

Wie funktioniert cat << EOF in Bash?

Wie funktioniert der ps-Befehl?

Wie funktioniert die Loopback-Schnittstelle?

Wie funktioniert eine Linux-GUI auf der untersten Ebene?