圆形Shebang#!(符号链接级别太多)



上下文:我读到了这个用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的实现细节。

为什么会出现这种特殊错误?

因为当内核尝试运行可执行文件时,尝试运行/usr/bin/loop,然后尝试运行/usr/bin/loop,然后尝试执行/usr/bin/loop,等等,最后以ELOOP错误失败。它检查了这一点。

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

为不同的shell共享一些其他错误消息。

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

为什么有符号链接涉及

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

这是否是bash的实现细节。

不是。

相关内容

  • 没有找到相关文章

最新更新