循环舍邦#! (太多级别的符号链接)
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.
没有。
对于上下文:我正在阅读 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.
没有。