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

Prozesssubstitution:Eine ungewöhnliche, aber fortschrittliche Methode zur Eingabe-/Ausgabeumleitung in Linux

Wahrscheinlich sind Sie bereits mit der Eingabe/Ausgabe und der Pipe-Umleitung unter Linux vertraut.

Lassen Sie mich Ihnen etwas über eine ähnliche, aber erweiterte Funktion namens Prozesssubstitution erzählen.

Sie finden zwei Arten von Syntax für die Prozesssubstitution:

<(commands)

oder

>(commands)

Lassen Sie mich etwas ins Detail gehen.

Bash-Prozesssubstitution

Sie werden feststellen, dass die Prozessersetzung ähnlich wie die STDOUT- oder STDIN-Umleitung verwendet werden kann.

Mit <(commands) Operator lesen Sie aus der Substitution. Das bedeutet, dass commands ist so eingerichtet, dass es als stdout verwendet wird .

Der folgende Befehl verwendet beispielsweise die Ausgabe von ls *sh :

wc -l <(ls *sh)

Dies entspricht:

ls *sh | wc -l

Mit >(commands) Operator schreiben Sie an die Substitution. Das bedeutet, dass commands ist so eingerichtet, dass es als stdin verwendet wird .

Mit anderen Worten, wenn Sie einen Befehl haben, der in eine Datei ausgibt, aber Sie möchten, dass er in einen anderen Befehl statt in die Datei schreibt.

Hier ist ein Beispiel, das die Dinge etwas klarer machen sollte:

tar -cf >(ssh remote_server tar xf -) .

Sie wissen, was es tut? Stimmt. Sie haben gerade den gesamten Inhalt des aktuellen Verzeichnisses auf einen Remote-Server übertragen. Die Archivdatei wird on the fly erstellt und auf dem Server extrahiert.

Um ehrlich zu sein, >(...) Betreiber ist weniger verbreitet. Sie finden diesen <(...) kann häufiger verwendet werden.

Was ist also der Vorteil der Prozesssubstitution, wenn sie wie die reguläre Input-Output-Umleitung funktioniert?

Sie werden die Leistungsfähigkeit und Nützlichkeit der Bash-Prozesssubstitution erkennen, wenn Sie mehrere Befehlspipelines haben, die Sie in einem einzigen Befehl kombinieren können.

Vorteil der Bash-Prozesssubstitution

Die naheliegendste und häufigste Verwendung der Prozesssubstitution ist der Vergleich der Ausgaben zweier Programme. Lassen Sie es mich Ihnen anhand eines praktischen Beispiels zeigen.

Angenommen, Sie haben einige C-Programmdateien und ihre entsprechenden Objektdateien (.out-Datei) mit demselben Namen in einem Verzeichnis.

ls *
aa.c aa.out bb.c bb.out cc.c cc.out ...

Hier ist Ihr Ziel. Sie möchten überprüfen, ob jede C-Datei ihre entsprechende Ausgabedatei mit dem gleichen Namen wie die C-Datei hat oder nicht.

Ihr typischer Ansatz wäre, die nach Erweiterung gefilterten Dateien aufzulisten und dann den Befehl cut mit dem Trennzeichen .(Punkt) zu verwenden, um den Dateinamen ohne Erweiterung zu extrahieren:

ls *.c | cut -d. -f1
aa
bb
cc
dd

Ihr typischer Ansatz wäre, die Ausgabe von *.c- und *.out-Dateien in temporären Dateien zu speichern und diese Dateien dann mit dem Befehl diff zu vergleichen. Habe ich Recht?

ls *.c | cut -d. -f1 > c.txt
ls *.out | cut -d. -f1 > out.txt
diff c.txt out.txt
rm c.txt out.txt

Sie könnten das /tmp-Verzeichnis verwenden, um temporäre Dateien zu erstellen, aber Sie haben immer noch drei Befehlszeilen.

Sie können die Prozessersetzung wunderbar verwenden, um alle oben genannten Elemente mit einem einzigen Befehl zu ersetzen, ohne temporäre Dateien zu erstellen:

diff <(ls *.c | cut -d. -f1) <(ls *.out | cut -d. -f1)

Sie mussten hier keine temporären Dateien erstellen, und das ist der Schlüssel dazu. Hier ist mein Tipp, wann Sie die Prozessersetzung verwenden sollten.

Wann immer Sie glauben, dass Sie eine temporäre Datei benötigen, um etwas zu tun, überlegen Sie, ob eine Prozessersetzung verwendet werden kann.

Die Prozessersetzung ist eine Bash-Funktion und funktioniert möglicherweise mit anderen Shells.

Ich hoffe, Sie werden in Zukunft versuchen, die Prozesssubstitution zu verwenden. Wie Sie sehen können, ist es sehr nützlich. Ich freue mich über Ihre Fragen und Anregungen.


Linux
  1. Lernen Sie die Grundlagen der Funktionsweise der E/A-Umleitung (Eingabe/Ausgabe) unter Linux kennen

  2. Arbeiten mit Eingabeausgabe und Fehlerumleitung in Linux

  3. Linux Command Basics:7 Befehle für das Prozessmanagement

  4. 30 Übungen zu Linux-Prozessen für Systemadministratoren

  5. Ausgabe welchen Befehls für die Eingabe auf CD verwendet?

Linux dd-Befehl für Anfänger erklärt (8 Beispiele)

30 Top-Befehlsbeispiele für die Überwachung unter Linux

Eingabe-Ausgabe-Umleitung unter Linux erklärt

Erklärt:Eingabe-, Ausgabe- und Fehlerumleitung in Linux

Befehle für das Prozessmanagement in Linux

Process Monitor-Äquivalent für Linux?