Kommandosubstitution Der Kommandozeileninterpreter Bash Pfadnamensexpansion Inhalt Index


Substitution von Prozessen

Der Vollständigkeit halber sei auch diese Substitution beschrieben...

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. Auf der Kommandozeile erscheint nach erfolgter Substitution der Name der erzeugten FIFO-Datei.

user@sonne> ls <(echo "hello")
/dev/fd/63  


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

user@sonne> vi <(ls /boot/vm*)
/boot/vmlinuz
/boot/vmlinuz.old
~

~
"/dev/fd/63" [fifo/socket] 2L, 32C                             1,1           All

Ein weiteres Beispiel (danke Martin;-) dient zur Bestandsaufnahme laufender Prozesse:

user@sonne> 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:

user@sonne> 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.


Kommandosubstitution Der Kommandozeileninterpreter Bash Pfadnamensexpansion Inhalt Index