\curl -L https://get.rvm.io | bash -s stable
Warum beginnt der Befehl mit \
?
Dies ist die Seite, auf der ich es gesehen habe.
\curl -L https://get.rvm.io | bash -s stable
Warum beginnt der Befehl mit \
?
Dies ist die Seite, auf der ich es gesehen habe.
Antworten:
alias curl='curl --some --default --options'
Wenn Sie einen Alias für haben curl
und diesen nicht verwenden möchten, deaktiviert das Setzen eines Backslashs den Alias und führt die Curl-Binärdatei direkt aus.
Beachten Sie, dass dies nur für eine interaktive Shell gilt. Aliase werden in Skripten nicht wirksam, daher wäre dies dort nicht erforderlich.
\curl
keine Shell- Funktion namens umgangen wird curl
. Dafür können Sie den eingebauten Befehl bash verwenden command
:command curl ...
\curl ...
istcommand curl ...
dash
(und möglicherweise andere Muscheln, obwohl sie korrekt sind bash
ohne expand_aliases
) nicht erweitern Aliase in Skripten.
Die Shell-Spezifikation (Bourne / POSIX) besagt, dass die Alias-Ersetzung in einer interaktiven Shell unterdrückt wird, wenn ein Zeichen des Befehlsworts in Anführungszeichen gesetzt wird. Ein Backslash ist eine Möglichkeit, dies zu tun, aber es gibt auch andere bekannte Möglichkeiten, Anführungszeichen zu setzen: einfache und doppelte Anführungszeichen. Alle folgenden Schritte unterdrücken die Aliasersetzung:
\curl
cur\l
\c\u\r\l
"c"url
"curl"
"c""u""r""l"
'curl'
'cu'"rl"
Die Verwendung \curl
ist nur die gebräuchlichste und lesbarste Methode. Da dies eine standardisierte Funktion ist, können Sie davon ausgehen, dass sie in allen Bourne-Heritage-Shells funktioniert.
\curl
sieht ein bisschen aus wie ein TeX-Befehl, nicht wahr? :-)
\curl
Aliase umgangen werden; Beachten Sie, dass nur Aliase auf diese Weise umgangen werden, keine Shell-Funktionen . command curl ...
würde sicherstellen, entweder zu umgehen .
command() { echo "Not command, lol!"; } ; command -V echo ; \command -V echo ; \command command echo "This is command! (masking despair)"
druckt Not command, lol!
x 3.
command
sich durch eine Shell-Funktion ersetzen , besiegen Sie den Mechanismus. Ihr Beispiel zeigt, dass Funktionen wie angegeben \
nicht umgangen werden . Ein nicht selbstzerstörerisches Beispiel : date() { echo 'not date'; }; date; command date
. Wenn Sie besorgt sind über böswillige Manipulation mit command
, siehe stackoverflow.com/a/35931876/45375
command
nicht überschrieben werden. Von Ihrem eigenen Link:Thus, with no control over the execution environment, you cannot write shell scripts that are fully immune to tampering, unless you know that your code will be executed by dash, ksh, or bash (with the workaround in place)
shopt -s expand_aliases
vor der Verwendung des Alias verwendet werden