在开发 GNU Parallel 的过程中,我似乎遇到了 #! (shebang) 的长度限制。此 shebang-line:
#!/bin/echo 123456789a123456789b123456789c123456789d123456789e123456789f123456789g123456789h123456789i123456789j123456789k123456789done bar
在 Debian、Mandriva、SuSE、Ubuntu、Centos、RedHat 上打印此内容:
123456789a123456789b123456789c123456789d123456789e123456789f123456789g123456789h123456789i123456789j123456789k12345 ./shebang
因此它似乎在 128 个字节后被截断。但它在 FreeBSD、DragonFlyBSD 和 Hurd 上的表现与我预期的一样(打印整行)。在 OpenBSD 和 Tru64 上它什么都不打印(?!)。
是什么原因导致了此限制?我可以解决这个问题吗?
背景
GNU Parallel 的 --shebang 使得在 #! 行中写入完整的并行命令成为可能。因此,如果完整命令只能有 128 个字符,则有一定的限制。
该文件的其余部分用作并行的输入,因此无法将命令写入那里。
答案1
长度限制取决于实现。我最近调查了类似的问题,我发现这份精彩的报告由 Sven Mascheck 撰写,介绍了不同版本的 Unix 和 Linux 中的 shebang 行。您一定要看看。其中特别提到,shebang 行最初限制为 16 个字节。
答案2
看一眼https://stackoverflow.com/questions/10813538/shebang-line-limit-in-bash-and-linux-kernel,它包含了一些如何解决此问题的技术:内核重新编译或 shebang 包装器脚本(大多数用户更喜欢后者)。