运行被别名隐藏的命令

Mir*_*lov 190 shell bash alias

假设我在 bash 中有以下别名 - alias ls='ls --color=auto'- 我想在ls没有选项的情况下调用普通。这样做的唯一方法是取消别名,执行命令然后再次别名吗?或者有一些漂亮的技巧或解决方法?

Not*_*Now 251

您还可以添加反斜杠前缀以禁用别名: \ls

编辑:做同样的其他方法包括:

使用“命令”:command ls根据Mikel

使用完整路径:/bin/ls根据uther

引用命令:"ls"'ls'根据 Mikel 评论。

您可以使用 临时删除该终端会话的别名unalias command_name

  • 这种方式非常有用。它只绕过别名,而不是函数,这使得它与 `command` 或 `builtin` 不同。 (11认同)
  • 这是一个“特征”。仅扩展未加引号的别名。所以你可以把它放在引号中,或者在你喜欢的任何地方使用反斜杠。请参阅 [bash 别名参考](http://www.gnu.org/software/bash/manual/html_node/Aliases.html#Aliases)。 (5认同)
  • 如果这些解决方案不起作用,请执行“type -a ls”进行故障排除。https://unix.stackexchange.com/questions/39291/run-a-command-that-is-shadowed-by-an-alias/663608#663608 (2认同)

Mik*_*kel 95

这就是command命令的用途。

尝试

command ls
Run Code Online (Sandbox Code Playgroud)

这告诉 shell 绕过别名和函数。

bashzshash /dash支持这种方式。

  • 因为它增加了 8 倍于 *backslash* 方法的字符数 (13认同)
  • 反斜杠功能不安全。虽然它提供了针对同名别名的保护,但它不提供针对同名函数的保护。 (3认同)
  • @JoelFan 我更希望有几个额外的字符,并且让我的脚本易于理解并为每个人工作。而不是一个神秘的斜线,它不直观,容易错过,没有很好的文档,并且不适用于绕过功能。 (3认同)

Geo*_*e M 20

别名只是一个定义的快捷方式。在这个例子中,定义的别名是 string ls,它执行ls --color=auto。如果你不想要这种行为,你可以调用二进制文件ls使用绝对路径。

所以执行只会/bin/ls产生没有颜色的输出,因为它不是你定义的别名。

您还可以将别名更改为不同的名称,或者添加一个新别名,该别名在ls没有颜色参数的情况下执行。

  • 你必须知道命令在哪里。在某些系统上,`/bin` 和 `/usr/bin` 之间的划分是任意的。 (2认同)

krl*_*mlr 10

另一种基于@uther 的回答的方法是使用$(which ...)`which ...`(使用反引号``)自动查找可执行文件的路径。这将适用于bash

$(which ls)

`which ls`
Run Code Online (Sandbox Code Playgroud)

毫无疑问,简单地在命令前加上 a\会短得多。

更新:根据如何在别名命令上使用`which`?,这似乎根本不可靠。

  • @amyassin:两种语法是等效的。(顺便说一句,你是如何在代码格式中加入反引号的?) (2认同)