如何在zsh中交换(如别名)命令名称?

时间:2013-09-18 02:07:33

标签: zsh

如果我尝试

$ alias pwd=echo
$ alias echo=pwd

我得到了

$ pwd
/home/owen
$ echo hi
hi

似乎别名是递归跟随的。也许如果有办法阻止递归,那就行了。在此示例中,我可以使用builtin,但这通常不起作用,特别是对于-g别名。

2 个答案:

答案 0 :(得分:1)

你想要的就是你的命令被扩展一次。

the zsh documentation中所述;您可以通过引用来阻止别名扩展。

这应该可以解决问题

$ alias pwd="\echo" ; alias echo="\pwd"

答案 1 :(得分:0)

对于不是内置shell命令的命令,有两种方法可以使用builtin等效

第一种方法是使用从which获得的命令的完整路径。例如,

> which cat
/bin/cat
> /bin/cat

将运行cat,忽略您可能设置的任何别名。

另一种选择是使用/usr/bin/env。例如,

> /usr/bin/env cat

也会运行cat而忽略您可能设置的cat的任何别名。