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?
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?
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
bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
aber ist nur eine verschlungene Art zu tun:
curl -s https://rvm.beginrescueend.com/install/rvm | bash
one <<(two)führt den Befehl aus twound leitet seine Ausgabe an weiter one. Die gebräuchlichere Schreibweise ist two | one, sodass Ihr Befehl auch geschrieben werden kann:
curl -s https://rvm.beginrescueend.com/install/rvm | bash
Dieser Link ist jetzt defekt, aber die Website sagt , dass stattdessen dieser verwendet werden soll:
curl -L get.rvm.io | bash -s stable
curlgibt aus, was heruntergeladen wird, daher wird die Datei unter heruntergeladen get.rvm.iound der Inhalt an bash weitergeleitet. Wenn Sie den curlBefehl nur selbst ausführen, sehen Sie, dass es sich um ein bashSkript handelt, das rvm herunterlädt und installiert
|ist mir vertrauter. Warum benutzte er die seltsame Syntax? Ist das ein Trend?
pipe?
<<ist der Dokumentoperator hier . foo < <(bar)ist meist gleichwertig bar | foomit hauptsächlich,:, aber mit einigen Unterschieden , die hier keine Rolle zu tun < <(…), fooführt eine in der Haupt - Shell - Umgebung, und wenn der Befehl foozurückkehrt, während bei einem Rohr, foofü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.)