#!(shebang) 行长度限制

Ole*_*nge 3 linux unix shebang

在开发 GNU Parallel 时,我似乎遇到了 #! (舍邦)。这个shebang行:

#!/bin/echo 123456789a123456789b123456789c123456789d123456789e123456789f123456789g123456789h123456789i123456789j123456789k123456789done bar
Run Code Online (Sandbox Code Playgroud)

在 Debian、Mandriva、SuSE、Ubuntu、Centos、RedHat 上打印:

123456789a123456789b123456789c123456789d123456789e123456789f123456789g123456789h123456789i123456789j123456789k12345 ./shebang
Run Code Online (Sandbox Code Playgroud)

所以它似乎在128个字节后被砍掉了。但它在 FreeBSD、DragonFlyBSD 和 Hurd 上完成了我所期望的(打印整行)。在 OpenBSD 和 Tru64 上,它什么也不打印(?!)。

造成这种限制的原因是什么?我可以解决它吗?

背景

GNU Parallel 的 --shebang 使得在 #! 行中编写完整的并行命令成为可能。因此,如果完整命令只能是 128 个字符,则在某种程度上受到限制。

文件的其余部分用作并行的输入,因此不能在那里写入命令。

小智 5

长度限制取决于实现。我最近调查了类似的问题,我发现了 Sven Mascheck 关于不同版本的 Unix 和 Linux 中的 shebang line 的精彩报告。你绝对应该看看。它说,特别是,shebang 行最初被限制为 16 个字节。