T. *_*Rex 4 shell terminal zsh
我使用zsh并想稍微扩展内置cd
功能。我希望在调用时cd
直接更改它,然后列出目录的内容。
function cd() {
cd $1
ls .
}
Run Code Online (Sandbox Code Playgroud)
我曾希望此代码能够正常工作,但事实证明,对的调用cd
引用了函数定义,从而导致了无限循环。
除了为我的函数选择其他名称之外,是否有解决方法来解决此问题?
更新
奇怪的是,这工作
function cd() {
`echo $1`
ls .
}
Run Code Online (Sandbox Code Playgroud)
不知道为什么。
为了从具有相同名称的函数中或其他任何地方使用内置命令,可以使用builtin
precommand修饰符:
function cd() {
builtin cd $1
ls .
}
Run Code Online (Sandbox Code Playgroud)
builtin COMMAND
告诉zsh使用具有名称的内置COMMAND
函数,而不是具有相同名称的别名,函数或外部命令。如果不存在这样的内置文件,则会显示一条错误消息。
对于要使用外部命令而不是别名,内置函数或同名函数的情况,可以使用command
precommand修饰符。例如:
command echo foobar
Run Code Online (Sandbox Code Playgroud)
这将使用二进制文件echo
(最有可能/bin/echo
)而不是zsh的 Builtin echo
。
不像功能builtin
和command
通常不必使用别名,以防止递归。虽然可以在别名定义中使用别名
% alias xx="echo x:"
% alias yy="xx y:"
% yy foobar
y: x: foobar
Run Code Online (Sandbox Code Playgroud)
每个别名只会扩展一次。在第二次出现时,别名将不会扩展,并且将使用函数,内置命令或外部命令。
% alias echo="echo echo:"
% echo foobar
echo: foobar
% alias xx="yy x:"
% alias yy="xx y:"
% xx foobar
zsh: command not found: xx
Run Code Online (Sandbox Code Playgroud)
当然,如果要阻止使用其他别名,或者要专门使用内置命令或外部命令,则仍然可以使用builtin
或command
别名。例如:
alias echo="command echo"
Run Code Online (Sandbox Code Playgroud)
这样,echo
将使用二进制文件代替内置文件。
归档时间: |
|
查看次数: |
688 次 |
最近记录: |