我刚刚注意到,bash
我正在使用的 (4.2.25(1)) 没有针对无限函数递归的保护。在这种情况下,会发生段错误(并且进程bash
终止)。要在您的 上检查这一点bash
,只需输入:
$ bash
$ f() { f; }
$ f
(首先启动一个子 shell(第一行)为我们提供了一个候选对象,我们可以对其进行实验而不会危及终端的 shell;如果没有第一行,您的终端窗口可能会很快关闭,以至于您无法看到任何有趣的东西。)
我认为我理解这种现象的原因;它可能是堆栈溢出,导致bash
尝试写入未分配给其进程的内存区域。
我想知道的是两件事:
难道不应该进行检查来
bash
防止这种情况发生吗?像“shell 函数中的 Stack Overflow”这样更体面的错误消息肯定比简单无用的 Segfault 要好。这可能是一个安全问题吗?在此方法将未分配给进程的内存部分写入内存(导致段错误)之前,它可能会覆盖不用于
bash
内部堆栈的其他部分。