我已经在某处看过,在Linux中一个shebang行(#!
)不能超过127个字符。我有一个Perl脚本,有超过300个字符的shebang行,它还没有失败。限制是否仅适用于可执行路径(在我的情况下不到100个字符),或者是否有一些奇怪的魔法?
答案 0 :(得分:3)
限制是否仅适用于可执行路径(在我的情况下不到100个字符),或者是否有一些奇怪的魔法?
该限制仅适用于可执行路径,因为工作中存在奇怪的魔法。奇怪的魔法以Perl的名字命名。
首先,127个字符的限制为真。 (或者可能是128或126,实际上没有计算。)过去的一切都被截断了。其次,无论shebang行上是否有空格,Linux都会将可执行文件名后的所有内容作为一个参数传递。第三,Perl将解析shebang线并自行解释,这就是为什么这样做的原因。但请注意,所有这些的影响是奇怪的,有点不正常。假设shebang线看起来像这样:
#!/bin/perl -I/lib-one -I/lib-two
并且假设截断发生在结尾附近,比如说,在“两个”中的“w”之前(也就是说,为了便于阅读,假设限制为32而不是128)。然后效果就像在命令行中调用perl一样,如下所示:
shell-prompt$ /bin/perl "-I/lib-one -I/lib-t" -I/lib-one -I/lib-two
在这种情况下哪个“有效”,但一般不会。
答案 1 :(得分:2)
我知道这不会回答您关于最大#!
行的原始问题,但我想您宁愿拥有XY problem。
你为什么不use lib
?如果您的脚本(在您的shebang行中)中有硬编码包含路径,那么您也可以使用use lib
语句表示它们并保持shebang行简短:
#!/usr/bin/perl -some -absolutely -necessary -options
use lib '/lib-one';
use lib '/lib-two';
...
use lib '/lib-twenty-four';