\curl -L https://get.rvm.io | bash -s stable
为什么命令以 \
开头?
这是我看到它的网站。
alias curl='curl --some --default --options'
如果您为curl
设置了别名并且不想使用它,可以在前面加入反斜杠来禁用别名并直接运行curl二进制文件。(Bourne/POSIX)shell规范指出,在交互式shell中,当命令单词的任何字符被引用时,会禁止别名替换(alias substitution)。反斜杠是其中一种方法,但也有其他众所周知的引用方式:单引号和双引号。以下所有内容都将禁止别名替换:
\curl
cur\l
\c\u\r\l
"c"url
"curl"
"c""u""r""l"
'curl'
'cu'"rl"
使用\curl
是最常见和易读的方式。由于这是一个标准化功能,您可以期望它在所有Bourne衍生shell中正常工作。
\curl
看起来有点像TeX命令,不是吗? :-)
\curl
可以绕过与其同名的别名,需要注意只有 别名 会被绕过,而不是 _shell 函数_,使用 command curl ...
可以确保绕过 _二者_。 - mklement0command() { echo "不是命令,哈哈!"; } ; command -V echo ; \command -V echo ; \command command echo "这是命令!(掩盖绝望)"
会打印出 Not command, lol!
三次。 - Adrian Güntercommand
本身,你就破坏了这个机制。你的例子表明\
不能绕过_shell函数_,正如所述。一个非自我破坏的例子:date() { echo 'not date'; }; date; command date
。如果你担心恶意篡改command
,请参见https://dev59.com/nJTfa4cB1Zd3GeqPXu_T#35931876。 - mklement0command
不被覆盖。从您自己的链接中得出:因此,在没有对执行环境进行控制的情况下,除非您知道您的代码将由dash、ksh或bash(使用解决方法)执行,否则您无法编写完全免疫篡改的shell脚本
。 - Adrian Günter\curl
工作得非常好。我一直在使用 /usr/bin/curl
来绕过别名。感谢您为我节省了 8 次按键! - exbctel
shopt -s expand_aliases
在脚本中启用别名。 - Alex\cd "$@"
。 - David W.\curl
不会绕过任何名为curl
的 shell function。为此,您可以使用 bash 内置命令command
:command curl ...
。 - Keith Thompson\curl ...
写为command curl...
更易理解。 - glenn jackmandash
(以及其他一些 shell,虽然对于没有expand_aliases
的bash
命令是正确的) 确实 在脚本中扩展别名。 - Adrian Günter