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

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

我曾经在 O'Reilly 的一本 Bash 书中读过以下内容(我的总结):

命令并启用

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

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

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

答案1

如果你试试

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

没有 commandcd将调用cd函数,该函数将调用该cd函数,该函数将调用该cd函数,依此类推:cd函数内部的语句调用该cd函数,而不是cd内置函数。您会看到“改进的 CD!”在你的终端中重复令人恶心的事情。

最终结果将根据 shell 的不同而有所不同:Zsh 将停止(“达到最大嵌套函数级别”),Bash 将崩溃。

相关内容