Answers:
alias curl='curl --some --default --options'
如果您有别名,curl
并且不想使用它,则在前面加上反斜杠将禁用别名并直接运行curl二进制文件。
请注意,这仅适用于交互式外壳。别名在脚本中不会生效,因此在此没有必要。
\curl
它不会绕过任何名为的shell 函数curl
。为此,您可以使用bash内置命令command
:command curl ...
\curl ...
是command curl ...
dash
(可能还有其他炮弹,虽然你是正确bash
无expand_aliases
)不扩大别名脚本。
(Bourne / POSIX)Shell规范指出,当引用命令字的任何字符时,将禁止在交互式Shell中使用别名替换。反斜杠是一种实现方法,但是还有其他众所周知的引用方式:单引号和双引号。以下所有内容都将禁止别名替换:
\curl
cur\l
\c\u\r\l
"c"url
"curl"
"c""u""r""l"
'curl'
'cu'"rl"
使用\curl
只是最常见和易读的方式。由于这是一项标准化功能,因此可以期望它可以在所有Bourne遗产外壳中使用。
\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
自己替换为shell函数,那么您将无法使用该机制。如示例所述,您的示例显示的是\
不绕过函数。一个不败的例子:date() { echo 'not date'; }; date; command date
。如果你担心恶意篡改带command
,看到stackoverflow.com/a/35931876/45375
command
不被覆盖。通过您自己的链接: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
前请先使用别名