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

评论

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

#1 楼

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

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

使用“命令”:按照Mikel的command ls

使用完整路径:/bin/ls(根据其他)。

引用命令:"ls"'ls'(根据Mikel注释)。

您可以删除别名暂时与unalias command_name进行终端会话。

评论


这是我执行此操作的标准方法。

– ncmathsadist
2012年5月25日下午1:34

非常好,也可以与tcsh一起使用

–莱文
2012年5月25日13:15

这种方式非常有用。它仅绕过别名,不绕过函数,这使其不同于命令或内置函数。

– Mikel
2012年5月25日下午16:31

好像l \ s做同样的事情。这是错误还是功能?

–尼古拉斯B.
2012年5月25日16:46



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

– Mikel
2012年5月25日17:55

#2 楼

这就是command命令的用途。

尝试

command ls


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

bash,zsh和ash / dash支持这种方式。

评论


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

– 0xC0000022L
2012年5月25日12:44

因为它会将字符数增加8倍作为反斜杠方法

– JoelFan
2012年5月25日13:12

@STATUS_ACCESS_DENIED这也不适用于tcsh(因此也可能不适用于csh)。 `\`方法可以

–莱文
2012年5月25日13:15



反斜杠功能不安全。虽然它提供了针对名称相似的别名的保护,但它不针对名称相似的功能提供保护。

– Dejay Clayton
15年6月17日在18:48

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

–丹尼斯
18/12/18在9:52

#3 楼

别名只是定义的快捷方式。在此示例中,定义的别名是字符串ls,该字符串执行ls --color=auto。如果您不希望出现这种情况,则可以使用绝对路径调用二进制ls

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

您还可以将别名更改为其他名称,或添加一个新别名仅执行ls而没有颜色参数。

评论


您必须知道命令在哪里。在某些系统上,/ bin和/ usr / bin之间的划分是任意的。

–基思·汤普森(Keith Thompson)
2012年5月25日20:50

@KeithThompson为此,您可以在某些命令中使用which:ls。

–cst1992
16-4-19的11:44

@ cst1992:如果要使用哪个(或类型),它将通过$ PATH进行查找;您也可以只使用ls或\ ls而不是指定路径。

–基思·汤普森(Keith Thompson)
16年4月19日在15:10

#4 楼

以@uther的答案为基础的另一种方法是使用$(which ...)`which ...`(使用反引号``)自动查找可执行文件的路径。这将在bash中起作用:

$(which ls)

`which ls`


\就会更短。

更新:根据操作方法在别名命令上使用“哪个”?这似乎根本不可靠。

评论


括号是什么?我猜你的意思是`哪个ls'直接执行二进制文件。

–杏仁核
2012年5月25日9:34



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

– krlmlr
2012年5月25日晚上11:25

实际上(ls)对我不起作用(在Ubuntu 12.04 LTS上),反引号很辛苦,我只是逃脱了:“哪个ls \”。到达那里花了很多时间:)

–杏仁核
2012年5月25日15:39



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

– Mikel
2012年5月25日16:24

@amyassin:您添加了$吗?

– krlmlr
2012年5月25日下午16:34

#5 楼

就个人而言,我只是避免使用与命令相同的名称来定义别名,因此ls总是调用实际的命令。我具有别名或函数,用于llllg等各种选项的组合。 (这意味着我需要在我的unalias ls.bashrc中使用.cshrc。)

我发现操作系统关于我可能更喜欢哪些选项的假设(覆盖ls命令本身的设计者的假设)很少与我自己的选择相匹配。个人品味。我碰巧不喜欢ls --color=auto的外观,它的可读性在黑白与黑白之间变化很大。

YMMV,其他解决方案当然仍然很容易理解。

#6 楼

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

评论


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

– Mikel
2012年5月24日23:32

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

–伊兹卡塔
2012年5月25日0:18



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

– asmeurer
2012年5月25日下午2:34

在mn页面上,这只是个玩笑:):LS-显示动画,旨在纠正偶然输入LS而不是ls的用户。

–杏仁核
2012年5月25日9:29



我认为这适用于Mac OS X,因为默认情况下其文件系统不区分大小写。在其他Unix上不起作用。

–詹德
2012年5月25日13:30