\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.
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.
shopt -s expand_aliases
przed użyciem aliasu\curl
nie omija żadnej funkcji powłoki o nazwiecurl
. W tym celu możesz użyć wbudowanego polecenia bashcommand
:command curl ...
\curl ...
jestcommand curl ...
dash
(i ewentualnie inne powłoki, chociaż masz racjębash
bez nichexpand_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:
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? :-)źródło
\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)"
drukujeNot 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życiucommand
, zobacz stackoverflow.com/a/35931876/45375command
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)