运行被别名遮盖的命令


163

假设我在bash中具有以下别名alias ls='ls --color=auto'--我想ls不带选项地调用普通对象。唯一的方法就是取消别名,先执行命令,然后再次别名吗?还是有一些漂亮的技巧或解决方法?


2
请注意以下一些答案:“命令”是完成此操作的唯一安全方法。例如,“。” 或内置的“源”可能会被脚本定义的函数覆盖。“命令。” 或“命令源”是安全地执行源而不调用脚本定义的函数的唯一方法。没有其他替代方法(包括反斜杠方法“ \。”)有效,当然也没有通过指定完整路径可调用的“ / bin / source”替代方法。
Dejay Clayton 2015年

Answers:


209

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

编辑:其他相同方法包括:

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

使用完整路径:/bin/ls按照uther

引用命令:"ls"'ls'按照Mikel的注释。

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


这是我执行此操作的标准方法。
ncmathsadist,2012年

很漂亮,也与tcsh的效果很好
捷尔

10
这种方式非常有用。它仅绕开别名,不绕过函数,这使其不同于commandbuiltin
Mikel

1
似乎l\s做同样的事情。这是错误还是功能?
Niklas B.

4
这是一个“功能”。仅扩展未引用的别名。因此,您可以将其放在引号中,也可以在任意位置使用反斜杠。请参阅bash别名参考
Mikel

79

这就是command命令的目的。

尝试

command ls

这告诉外壳绕过别名和函数。

bashzshash / dash 支持这种方式。


2
最佳答案,为什么它不是最受欢迎的?:) +1
0xC0000022L 2012年

11
因为它添加的字符数是反斜杠方法的8倍
JoelFan 2012年

1
@STATUS_ACCESS_DENIED这也不适用于tcsh(因此大概也不适用于csh)。“ \”方法可以实现
Levon 2012年

3
反斜杠功能不安全。尽管它提供了针对名称相似的别名的保护,但它不针对名称相似的功能提供保护。
Dejay Clayton

2
@JoelFan我宁愿有几个额外的字符,并让我的脚本易于遵循并为每个人使用。而不是一个不直观,不易遗漏,没有充分记录且对旁路功能不起作用的神秘斜线。
丹尼斯

19

别名只是定义的快捷方式。在此示例中,定义的别名是ls执行的字符串ls --color=auto。如果您不想要这种行为,则可以ls使用绝对路径调用二进制文件。

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

您也可以将别名更改为其他名称,或者添加一个新别名,该别名仅在ls不使用color参数的情况下执行。


2
您必须知道命令在哪里。在某些系统中,该师之间/bin/usr/bin是任意的。
基思·汤普森

@KeithThompson为此,您可以使用which一些命令:which ls
cst1992 '16

@ cst1992:如果要使用which(或type),它将通过$PATH; 进行查找。您最好只使用ls\ls不指定路径。
基思·汤普森

10

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

$(which ls)

`which ls`

毫无疑问,仅在命令前加上a \会短很多。

更新:根据如何在别名命令上使用`哪个`?,这似乎一点都不可靠。


括号是什么?我猜你的意思是`which ls`直接执行二进制文件。
Amyassin 2012年

2
@amyassin:两种语法都是等效的。(顺便说一句,您如何将反引号变成代码格式?)
krlmlr 2012年

实际上,这(which ls)对我不起作用(在Ubuntu 12.04 LTS上),反引号很辛苦,我只是逃脱了:“`ls \”。到那儿花了很多时间才编辑:)
Amyassin 2012年

1
@ user946850“要在代码范围内包含文字反引号字符,可以使用多个反引号作为开始和结束定界符”。资料来源:Markdown参考
Mikel 2012年

@amyassin:您添加了$吗?
krlmlr 2012年

2

就个人而言,我只是避免使用与命令相同的名称来定义别名,因此ls始终调用实际命令。我有像选择各种组合的别名或功能lll以及lg。(这意味着我需要unalias ls输入.bashrc.cshrc。)

我发现操作系统关于我可能会选择哪些选项的假设(覆盖ls命令本身设计者的假设)很少符合我自己的个人喜好。我碰巧不喜欢的外观ls --color=auto,它的可读性在黑白与黑白之间会有很大差异。

YMMV和其他解决方案当然仍然很了解。


1

以大写字母键入命令似乎可以正常工作,例如LS,虽然我不确定为什么。


4
在哪个外壳,哪个操作系统,哪个终端等?
Mikel

@Mikel有一个包“ sl”,提供“ sl”作为“ ls”。bash在Ubuntu中给出的提示还说“ LS”由“ sl”提供。
Izkata 2012年

1
这是Mac OS X 10.7中的bash 4(与Fink一起安装)。它也适用于我别名的其他命令,例如rm和grep。
asmeurer

3
这只是个玩笑:)从mn页面:LS - display animations aimed to correct users who accidentally enter LS instead of ls.
amyassin

7
我认为这适用于Mac OS X,因为默认情况下其文件系统不区分大小写。在其他Unix上不起作用。
詹德(Jander)2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.