使用Perl的shebang线的最大长度?

时间:2017-08-22 17:02:52

标签: linux perl unix

我已经在某处看过,在Linux中一个shebang行(#!)不能超过127个字符。我有一个Perl脚本,有超过300个字符的shebang行,它还没有失败。限制是否仅适用于可执行路径(在我的情况下不到100个字符),或者是否有一些奇怪的魔法?

2 个答案:

答案 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';