Was bedeutet Bash << Syntax?

10

Ruby Version Manager (RVM) wie folgt installiert:

bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

Ich verstehe, was zuerst bedeutet (füttert Bash-Skript an Bash-Interpreter), ich bin mit <(...)Teil verwechselt . Also, was Klammern hier tun und was weniger als Zeichen. In welchen Fällen können wir dieselbe Syntax verwenden?

Ich habe versucht, im Internet zu graben, fand diese SO-Frage /programming/2188199/bash-double-or-single-bracket-parentheses-curly-braces und diese Frage auf ubuntuforums: http: // ubuntuforums .org / showthread.php? p = 7803008 Sie haben jedoch noch keine Ahnung, warum wir diese Klammern verwenden und warum wir die Eingabeverleitung zweimal verwenden.

bash < curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer

ist das nicht dasselbe

Vielen Dank.

Nemoden
quelle
Ich denke, die besseren Fragen sind: Warum ist das sobash <(curl -s ...)
Bruno Bronosky
Befehl <(...) funktioniert, wenn der Befehl einen Dateinamen an dieser Stelle akzeptiert. Wenn Sie ein anderes <davor setzen, muss der Befehl Eingaben von stdin akzeptieren. Einige Befehle funktionieren in beide Richtungen und verwenden stdin, wenn kein Dateiname angegeben ist. Die akzeptierte Antwort weist auf diesen Unterschied hin.
Lee Meador

Antworten:

7

Es ist Prozesssubstitution . Es speist die Ausgabe des Befehls in ein FIFO ein, das wie eine normale Datei gelesen werden kann.

Ignacio Vazquez-Abrams
quelle
5

Es bedeutet "Führen Sie den Befehl in den Klammern aus und geben Sie hier einen Dateinamen zurück, der die Standardausgabe dieses Befehls darstellt".

Das bedeutet also zwei Befehle:

curl ... > something
bash -s stable < something

... wo "etwas" die Magie ist. (Normalerweise /dev/fd/...oder ein Rohr.)

Daniel Pittman
quelle
3
aber warum kann ich nicht einfach locken verwenden ... | Bash -s stabil?
Lilás