循环舍邦#! (太多级别的符号链接)

Circular Shebang #! (too many levels of symbolic links)

对于上下文:我正在阅读 this 一个可以用 shebang 做的诡计的例子。它使用

#!/bin/rm

这最终会删除您执行的文件(非常有趣;您可以扩展它以创建自删除消息)。这表明程序 (rm) 是使用文件名作为参数调用的,因此可以访问整个文件,包括调用它的 shebang。

我想到的另一个技巧是在 shebang 中调用自己作为解释器来创建无限循环。例如,如果 /usr/bin/loop

开头
#!/usr/bin/loop

t 应该永远调用自己。显然在某些时候会发生错误,在我的特殊情况下我得到:

bash: /usr/bin/loop: /usr/bin/loop: bad interpreter: Too many levels of symbolic links

看起来它有两层深。有人可以向我解释为什么会出现此特定错误吗?或者可以分享一些针对不同 shell 的其他错误消息。

我特别想了解为什么涉及符号链接以及这是否是 bash 的实现细节。

why this particular error occurs?

因为当内核尝试 运行 可执行文件时,先尝试 运行 /usr/bin/loop,然后尝试 运行 /usr/bin/loop,然后尝试 运行 /usr/bin/loop,等等,最后失败并出现 ELOOP 错误。它会检查。

https://elixir.bootlin.com/linux/latest/source/fs/exec.c#L1767

hare some other error messages for different shells.

虽然有可能,但这个特定的 errno 消息来自 glibc strerror

why there are symbolic links involved

因为在执行 input/output 操作时通常会返回 ELOOP,所以消息中提到了它们。不涉及符号链接。

this is an implementation detail of bash or not.

没有。