Zum Inhalt springen

Bash/Prozesssubstitution: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 2: Zeile 2:


== Beschreibung ==
== Beschreibung ==
Taucht ein Konstrukt der Art <(Liste) bzw. >(Liste) auf, werden die durch Liste benannten Kommandos in einer Subshell gestartet. Gleichzeitig wird die Ausgabe (>(...)) bzw. Eingabe (<(...)) der Kommandos mit einer automatisch erzeugten FIFO-Datei verbunden.  
Taucht ein Konstrukt der Art  
<syntaxhighlight lang="bash" highlight="1-2" line>
<(Liste)
>(Liste)
</syntaxhighlight>
auf, werden die durch Liste benannten Kommandos in einer Subshell gestartet.  
 
Gleichzeitig wird die Ausgabe (>(...)) bzw. Eingabe (<(...)) der Kommandos mit einer automatisch erzeugten FIFO-Datei verbunden.  


Auf der Kommandozeile erscheint nach erfolgter Substitution der Name der erzeugten FIFO-Datei.  
Auf der Kommandozeile erscheint nach erfolgter Substitution der Name der erzeugten FIFO-Datei.  
 
<syntaxhighlight lang="bash" highlight="1" line copy>
'''ls <(echo "hello")'''
ls <(echo "hello")
  /dev/fd/63
  /dev/fd/63
</syntaxhighlight>


Mit Hilfe der Prozesssubstitution könnte man den vi dazu bewegen, die Ausgaben eines Kommandos zu lesen:
Mithilfe der Prozesssubstitution könnte man den vi dazu bewegen, die Ausgaben eines Kommandos zu lesen
 
<syntaxhighlight lang="bash" highlight="1" line copy>
'''vi <(ls /boot/vm*)'''
vi <(ls /boot/vm*)
  /boot/vmlinuz
  /boot/vmlinuz
  /boot/vmlinuz.old
  /boot/vmlinuz.old
  ~
  ~
 
  ~
  ~
  "/dev/fd/63" [fifo/socket] 2L, 32C
  "/dev/fd/63" [fifo/socket] 2L, 32C
                                         1,1            All
                                         1,1            All
</syntaxhighlight>


Ein weiteres Beispiel dient zur Bestandsaufnahme laufender Prozesse:
; Bestandsaufnahme laufender Prozesse
 
<syntaxhighlight lang="bash" highlight="1" line copy>
  '''diff <(ps ax) <(sleep 10; ps ax)'''
  '''diff <(ps ax) <(sleep 10; ps ax)'''
  64d63
  64d63
Zeile 31: Zeile 40:
  >  2134 pts/1    S      0:00 top
  >  2134 pts/1    S      0:00 top
  >  2135 pts/0    R      0:00 ps ax
  >  2135 pts/0    R      0:00 ps ax
</syntaxhighlight>


Im Beispiel ist der Prozess top neu hinzugekommen, dass die Aufrufe der Kommandos ps und sleep erscheinen, war zu erwarten.
Im Beispiel ist der Prozess top neu hinzugekommen, dass die Aufrufe der Kommandos ps und sleep erscheinen, war zu erwarten
 
Und abschließend vergleichen wir die Inhalte zweier Archive:


Und abschließend vergleichen wir die Inhalte zweier Archive
<syntaxhighlight lang="bash" highlight="1" line copy>
  '''diff <(tar tzf Buch1.tar.gz) <(tar tzf Buch.tar.gz)'''
  '''diff <(tar tzf Buch1.tar.gz) <(tar tzf Buch.tar.gz)'''
  325a326,328
  325a326,328
Zeile 41: Zeile 51:
  > Images/GlobaleVariable.gif
  > Images/GlobaleVariable.gif
  > Images/LokaleVariable.gif
  > Images/LokaleVariable.gif
</syntaxhighlight>


Innerhalb der Klammern >(...), <(...) können Parameter- Kommando- sowie arithmetische Substitutionen benutzt werden.
Innerhalb der Klammern
 
<syntaxhighlight lang="bash" highlight="1-2" line>
== Aufruf ==
>(...)
<syntaxhighlight lang="bash" highlight="1" line copy>
<(...)
</syntaxhighlight>
</syntaxhighlight>
können Parameter- Kommando- sowie arithmetische Substitutionen benutzt werden


=== Optionen ===
=== Optionen ===

Version vom 11. Oktober 2025, 14:32 Uhr

Bash/Prozesssubstitution - Ein-/Ausgabe von Prozessen mit einer FIFO-Datei verbinden

Beschreibung

Taucht ein Konstrukt der Art

<(Liste)
>(Liste)

auf, werden die durch Liste benannten Kommandos in einer Subshell gestartet.

Gleichzeitig wird die Ausgabe (>(...)) bzw. Eingabe (<(...)) der Kommandos mit einer automatisch erzeugten FIFO-Datei verbunden.

Auf der Kommandozeile erscheint nach erfolgter Substitution der Name der erzeugten FIFO-Datei.

ls <(echo "hello")
 /dev/fd/63

Mithilfe der Prozesssubstitution könnte man den vi dazu bewegen, die Ausgaben eines Kommandos zu lesen

vi <(ls /boot/vm*)
 /boot/vmlinuz
 /boot/vmlinuz.old
 ~
  
 ~
 "/dev/fd/63" [fifo/socket] 2L, 32C
                                        1,1            All
Bestandsaufnahme laufender Prozesse
 '''diff <(ps ax) <(sleep 10; ps ax)'''
 64d63
 <  2129 pts/0    S      0:00 /bin/bash
 67,68c66
 <  2132 pts/0    R      0:00 ps ax
 <  2133 pts/0    S      0:00 sleep 10
 ---
 >  2134 pts/1    S      0:00 top
 >  2135 pts/0    R      0:00 ps ax

Im Beispiel ist der Prozess top neu hinzugekommen, dass die Aufrufe der Kommandos ps und sleep erscheinen, war zu erwarten

Und abschließend vergleichen wir die Inhalte zweier Archive

 '''diff <(tar tzf Buch1.tar.gz) <(tar tzf Buch.tar.gz)'''
 325a326,328
 > Images/tkinfo.gif
 > Images/GlobaleVariable.gif
 > Images/LokaleVariable.gif

Innerhalb der Klammern

 >(...)
 <(...)

können Parameter- Kommando- sowie arithmetische Substitutionen benutzt werden

Optionen

Unix GNU Parameter Beschreibung

Parameter

Umgebungsvariablen

Exit-Status

Wert Beschreibung
0 Erfolg
>0 Fehler

Anwendung

Problembehebung

Konfiguration

Dateien

Datei Beschreibung


Anhang

Siehe auch



Dokumentation

Links

Projekt

Weblinks