为什么在没有“命令”的情况下从cd(shell函数)调用cd(内置)会导致无限循环?

用户名

我曾经在O'Reilly的Bash书中读过以下内容(我的摘要):

命令并启用

cd () {
    echo "Improved CD !"
    # Improvement one;
    command cd
    # Improvement two;
    # Do cool stuff...
}
cd

command当包含内建函数的名称与内建函数同名时,此命令很有用-它可以防止函数中内建函数的递归循环。

我的问题是,如果只调用一次函数,为什么会首先出现递归循环?

斯蒂芬·基特

如果你试试

cd () {
    echo "Improved CD !"
    # Improvement one;
    cd
    # Improvement two;
    # Do cool stuff...
}
cd

不带 commandcd将调用cd函数,将调用cd函数,将调用cd函数,依此类推:cd函数内部的语句将调用cd函数,而不是cd内置函数您会看到“改进的CD!” 在您的终端上反复出现了恶心的广告。

最终结果将因外壳而异:Zsh将停止(“达到最大嵌套功能级别”),Bash将崩溃。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在没有类型应用程序的情况下某些函数调用无法工作?

为什么 foo() 函数在没有被调用的情况下被执行?

为什么在这种情况下没有调用最合适的构造函数?

为什么函数在没有参数的情况下运行?

没有实时CD的情况下如何还原GRUB?

如何在没有 CD 的情况下安装 Ubuntu?

在没有CD的情况下用酒开始游戏

Redland RDF库:为什么在没有基本URI的情况下从Turtle解析模型会导致错误?

for 循环 - 为什么 range(len()) 会导致 TypeError: int not subscriptable 在这种情况下?

反应:调用带有参数的函数会导致无限循环

cd和cd内置命令之间有什么区别?

为什么在没有引用运算符的情况下编译器无法决定要调用哪个函数?

为什么超类为空的构造函数是必需的,而在可怕的菱形情况下却没有调用?

为什么会导致无限循环?

为什么我的方法在没有循环的情况下循环?

安装Ubuntu最快的方法是什么?(您可以在没有CD或DVD的情况下安装吗?)

为什么此代码在没有volatile声明的情况下会失败?

在没有nginx的情况下使用独角兽会不好吗?为什么?

为什么我的 Makefile 在没有更改的情况下会不断重新编译?

为什么在没有内联相同代码的情况下,闭包会引入借位?

为什么我的 WASAPI 侦听器即使在没有播放的情况下也会触发?

在没有return语句的情况下,javascript函数会返回什么?

ScalaTest是否可以在没有同步调用的情况下(例如在无限循环中)检测超时?

为什么在没有引发异常的情况下杰斯特说有断言调用?

为什么在没有显式调用的情况下调用默认函数?

为什么cd会调用函数':'?

为什么在for循环的情况下调用函数很糟糕?

为什么在没有显式调用exec()或show()的情况下显示QProgressDialog?

在没有帮助程序的情况下重写递归 python 函数会导致它停止工作