In einem Rails-Buch schrieb der Autor das Skript zur Installation von Ruby RVM.
bash <<(curl -s https://rvm.beginrescueend.com/install/rvm)
Aber ich verstehe nicht, wie es funktioniert. Könnten Sie das erklären?
bash
shell
shell-script
curl
Benjamin
quelle
quelle
Antworten:
Es gibt einen << -Operator (hier Dokument), der hier jedoch nicht verwendet wird.
Sie haben zuerst eine Eingabeumleitung,
<
die besagt, dass Sie die Eingabe aus dem folgenden Argument auswählen müssen. Dann gibt es die<(command)
so genannte Prozessersetzung, die besagt, dass diese durch einen Dateideskriptor ersetzt wird, der die Ausgabe des Befehls enthält.Dieser Befehl könnte geschrieben worden sein
aber ist nur eine verschlungene Art zu tun:
quelle
one <<(two)
führt den Befehl austwo
und leitet seine Ausgabe an weiterone
. Die gebräuchlichere Schreibweise isttwo | one
, sodass Ihr Befehl auch geschrieben werden kann:Dieser Link ist jetzt defekt, aber die Website sagt , dass stattdessen dieser verwendet werden soll:
curl
gibt aus, was heruntergeladen wird, daher wird die Datei unter heruntergeladenget.rvm.io
und der Inhalt an bash weitergeleitet. Wenn Sie dencurl
Befehl nur selbst ausführen, sehen Sie, dass es sich um einbash
Skript handelt, das rvm herunterlädt und installiertquelle
|
ist mir vertrauter. Warum benutzte er die seltsame Syntax? Ist das ein Trend?pipe
?<<
ist der Dokumentoperator hier .foo < <(bar)
ist meist gleichwertigbar | foo
mit hauptsächlich,:, aber mit einigen Unterschieden , die hier keine Rolle zu tun< <(…)
,foo
führt eine in der Haupt - Shell - Umgebung, und wenn der Befehlfoo
zurückkehrt, während bei einem Rohr,foo
führt eine in einer Subshell und die Pipeline wartet sowohl Befehle zu vervollständigen. (Das ist in Bash, das Verhalten ist in ksh und zsh näher.)