我使用zsh,并希望稍微扩展内置的cd
函数。
当我调用cd
时,我希望它直接更改目录并列出目录内容。
function cd() {
cd $1
ls .
}
我本以为这段代码可以工作,但事实证明,对
cd
的调用会指向函数定义,导致无限循环。
除了选择不同的函数名称之外,是否有解决此问题的方法?
更新
奇怪的是,这个方法可行。
function cd() {
`echo $1`
ls .
}
不知道为什么。
builtin
预命令修饰符:function cd() {
builtin cd $1
ls .
}
内置命令COMMAND
告诉 zsh 使用名为 COMMAND
的内置命令,而不是同名的别名、函数或外部命令。如果不存在这样的内置命令,则会打印错误信息。
在想要使用同名别名、内置命令或函数之外的外部命令的情况下,您可以使用command
预命令修饰符。例如:
command echo foobar
echo
(很可能是 /bin/echo
),而不是 zsh 的 内置的 echo
。
builtin
和 command
来防止别名递归。虽然在别名定义中可以使用别名。% alias xx="echo x:"
% alias yy="xx y:"
% yy foobar
y: x: foobar
% alias echo="echo echo:"
% echo foobar
echo: foobar
% alias xx="yy x:"
% alias yy="xx y:"
% xx foobar
zsh: command not found: xx
builtin
或者command
命令,如果你想要防止使用另一个别名,或者特定使用内置命令或外部命令。例如:alias echo="command echo"
使用这个二进制echo
代替内置的echo。
echo
命令可行是因为你可能开启了 autocd
选项。你可以通过输入 setopt
来检查这一点,以获取选项列表。
command cd
命令很好用。但是当我迁移到zsh时,出现了“command not found: cd”的错误。通过参考这篇文章,我将command cd
替换为适用于zsh的builtin cd
,问题得到了解决。 - young_souvlaki