\curl -L https://get.rvm.io | bash -s stable
Почему команда начинается с \
?
Это сайт, где я это видел.
\curl -L https://get.rvm.io | bash -s stable
Почему команда начинается с \
?
Это сайт, где я это видел.
alias curl='curl --some --default --options'
Если у вас есть псевдоним для, curl
и вы не хотите его использовать, то указание обратной косой черты приводит к отключению псевдонима и непосредственному запуску двоичного файла curl.
Обратите внимание, что это применимо только к интерактивной оболочке. Псевдонимы не действуют в сценариях, поэтому в этом нет необходимости.
shopt -s expand_aliases
перед использованием псевдонима\curl
не обходится никакая именованная функция оболочкиcurl
. Для этого вы можете использовать встроенную команду bashcommand
:command curl ...
\curl ...
являетсяcommand curl ...
dash
(и, возможно, другие оболочки, хотя вы правы дляbash
безexpand_aliases
) действительно расширяет псевдонимы в сценариях.Спецификация оболочки (Bourne / POSIX) гласит, что подстановка псевдонимов в интерактивной оболочке подавляется, когда любой символ командного слова указан в кавычках. Обратная косая черта - это один из способов сделать это, но есть и другие хорошо известные способы цитирования: одинарные и двойные кавычки. Все нижеизложенное будет подавлять замену псевдонимов:
Использование
\curl
- это самый распространенный и читаемый способ. Поскольку это стандартная функция, можно ожидать, что она будет работать во всех оболочках наследия Борна.\curl
выглядит немного как команда TeX, не так ли? :-)источник
\curl
обходит псевдонимы с тем же именем; обратите внимание, что таким образом обходятся только псевдонимы , а не функции оболочки ;command curl ...
будет гарантировать обход либо .command() { echo "Not command, lol!"; } ; command -V echo ; \command -V echo ; \command command echo "This is command! (masking despair)"
печатаетNot command, lol!
х 3.command
себя функцией оболочки, вы победите механизм. То, что показывает ваш пример, это то,\
что не обходит функции , как указано. Не-пагубным пример:date() { echo 'not date'; }; date; command date
. Если вы беспокоитесь о вредоносных фальсификации сcommand
, см stackoverflow.com/a/35931876/45375command
не быть отвергнутым. По вашей собственной ссылке: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)