\ curl ... | bash ...什么是斜线?

pag*_*gid 34 bash shell

看看为所有类型的项目出现的魔术安装程序(例如对于rvm),你总会看到如下命令:

\curl ... | bash
Run Code Online (Sandbox Code Playgroud)

例如

\curl -L https://get.rvm.io | bash -s stable
Run Code Online (Sandbox Code Playgroud)

我想知道为什么这些命令以斜线开头 - 它们似乎在没有它的情况下运行良好.

有什么建议?

fed*_*qui 58

这用于调用"原始"命令,避免使用可能的别名调用它.也就是说,禁用命令上可能的别名curl并调整为原始别名.

如果你有

alias grep='grep --color=auto'
Run Code Online (Sandbox Code Playgroud)

然后你做grep,它会有颜色.所以如果你不想要颜色,你就会写\grep.

  • 谢谢......当你知道它时很简单,但通过谷歌找不到;) (5认同)
  • 如果没有相同名称的函数,它将仅调用原始命令.请参阅我对bash评估的alias/function /命令顺序的回答(简而言之:`\ something`:只会避免别名,但不会绕过函数.`命令的东西`:将绕过别名和功能并启动命令"something") (2认同)

Oli*_*lac 21

这是一个反斜杠

它是以该名称(或函数)开始的命令,而不是ALIAS.

要确保绕过功能别名:

command somecommand
Run Code Online (Sandbox Code Playgroud)

要绕过别名(从而启动一个函数,或者如果没有函数,则命令):

\somecommand
Run Code Online (Sandbox Code Playgroud)

让我们看看哪个优先于哪个(我使用bash 2.05b ... ymmv)

我将定义一个函数AND一个与命令(ls)同名的别名:

$ alias ls='echo A'
$ function ls { echo B ; }
Run Code Online (Sandbox Code Playgroud)

使用"type -all ls"显示评估顺序:

$ type -all ls
ls is aliased to `echo A'
ls is a function
ls ()
{
    echo B
}
ls is /usr/bin/ls
Run Code Online (Sandbox Code Playgroud)

但我们也可以通过尝试找出它们:

$ ls
A
$ \ls
B
$ command ls
file1 file2 file3
Run Code Online (Sandbox Code Playgroud)

因此,优先顺序似乎是:在路径中采用alias -before- function -before- 命令.

当然,如果你精确确定相对/绝对路径,那么它将被强制为指向的命令:

$ /usr/bin/ls
file1 file2 file3
Run Code Online (Sandbox Code Playgroud)

  • 今天我学会了"命令"关键字.经过近二十年的Unix/Linux shell使用. (3认同)