\curl -L https://get.rvm.io | bash -s stable
Dlaczego polecenie zaczyna się od \
?
To jest strona, w której ją widziałem.
\curl -L https://get.rvm.io | bash -s stable
Dlaczego polecenie zaczyna się od \
?
To jest strona, w której ją widziałem.
Odpowiedzi:
alias curl='curl --some --default --options'
Jeśli masz alias curl
i nie chcesz go używać, umieszczenie odwrotnego ukośnika z przodu wyłącza alias i uruchamia bezpośrednio plik binarny curl.
Zauważ, że dotyczy to tylko interaktywnej powłoki. Aliasy nie działają w skryptach, więc nie byłoby to konieczne.
\curl
nie omija żadnej funkcji powłoki o nazwie curl
. W tym celu możesz użyć wbudowanego polecenia bash command
:command curl ...
\curl ...
jestcommand curl ...
dash
(i ewentualnie inne powłoki, chociaż masz rację bash
bez nich expand_aliases
) , rozszerza aliasy w skryptach.
Specyfikacja powłoki (Bourne / POSIX) mówi, że podstawianie aliasu w powłoce interaktywnej jest pomijane, gdy cytowany jest dowolny znak słowa polecenia. Ukośnik odwrotny to jeden ze sposobów, aby to zrobić, ale istnieją również inne dobrze znane sposoby cytowania: pojedyncze i podwójne cudzysłowy. Wszystkie poniższe elementy powstrzymają podstawianie aliasów:
\curl
cur\l
\c\u\r\l
"c"url
"curl"
"c""u""r""l"
'curl'
'cu'"rl"
Używanie \curl
to tylko najbardziej powszechny i czytelny sposób. Ponieważ jest to znormalizowana funkcja, można oczekiwać, że będzie działać we wszystkich powłokach dziedzictwa Bourne'a.
\curl
wygląda trochę jak polecenie TeX, prawda? :-)
\curl
pomija się aliasy o tej samej nazwie; zauważ, że w ten sposób omijane są tylko aliasy , a nie funkcje powłoki ; command curl ...
zapewniłoby obejście albo .
command() { echo "Not command, lol!"; } ; command -V echo ; \command -V echo ; \command command echo "This is command! (masking despair)"
drukuje Not command, lol!
x 3.
command
się funkcją powłoki, pokonasz ten mechanizm. Jak pokazuje twój przykład, \
nie omijasz funkcji . Non-autodestrukcyjne przykład: date() { echo 'not date'; }; date; command date
. Jeśli martwisz się złośliwym manipulowaniem przy użyciu command
, zobacz stackoverflow.com/a/35931876/45375
command
nie zostać zastąpionym. Z własnego linku: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
przed użyciem aliasu