Linux 为什么在CentOS引导期间运行的Perl脚本找不到某些模块?

Linux 为什么在CentOS引导期间运行的Perl脚本找不到某些模块?,linux,perl,Linux,Perl,我目前正在尝试在CENTOS的自定义版本中启动perl脚本 我是通过从rc1脚本调用它来实现的,调用如下所示: /mydirectory/myscript & $ perl -E 'say for @INC' 但我得到的错误是“无法在@INC中找到strict.pm” 这不是strict.pm所特有的,它会对使用列表中的第一个模块抛出该错误。但是,当我从shell运行相同的命令时,它运行没有问题 那么,为什么我的perl脚本在启动过程中找不到模块呢?可能来自环境的@INC还没有建立起

我目前正在尝试在CENTOS的自定义版本中启动perl脚本

我是通过从rc1脚本调用它来实现的,调用如下所示:

/mydirectory/myscript &
$ perl -E 'say for @INC'
但我得到的错误是“无法在@INC中找到strict.pm”

这不是strict.pm所特有的,它会对使用列表中的第一个模块抛出该错误。但是,当我从shell运行相同的命令时,它运行没有问题


那么,为什么我的perl脚本在启动过程中找不到模块呢?

可能来自环境的
@INC
还没有建立起来。它需要指向其库的路径

您可以使用perl解释器和
-I
选项显式调用它,或者设置
PERL5LIB
环境变量

PERL5LIB='/usr/lib/perl5' /mydirectory/myscript &
如果有多个文件夹,请用冒号分隔它们。

 PERL5LIB='/usr/lib/perl5:/tmp:/etc/lib/perl5' /mydirectory/myscript &
请注意,我不知道lib dir在您的CentOS中的位置,所以我创建了该路径

您可以从如下常规shell中打印
@INC
来找到答案:

/mydirectory/myscript &
$ perl -E 'say for @INC'

将它列出的所有路径附加到您在rc1脚本中进行的调用的环境变量中,它应该可以工作。

可能来自环境的
@INC
,尚未建立。检查
perl-e'print“$\n”以获取@INC'
,也许它坏了。我在机器运行时从shell运行它,得到:
/perl/netfort/lib/usr/local/lib64/perl5/usr/local/share/perl5/usr/lib64/perl5/vendor\u perl/usr/share/perl5/vendor\u perl/usr/lib64/perl5/usr/share/perl5。
,然后在机器启动时:
/usr/local/lib64/perl5/usr/local/share/perl5/usr/lib64/perl5/vendor_perl/usr/share/perl5/usr/lib64/perl5/usr/share/perl5。
在不同时间检查my@INC时:我在机器运行时从shell运行它:
/perl/netfort/lib/usr/local/lib64/perl5/usr/local/share/perl/usr/share/perl5/vendor\u perl/usr/lib64/perl5/usr/share/perl5.
然后在机器启动时:
/usr/local/lib64/perl5/usr/local/share/perl5/usr/lib64/perl5/vendor\usr/share/perl5/vendor\usr/lib64/perl5/perl.
我是否应该在第二个列表中添加缺失的内容?我想从那开始。但无论如何,拥有两次目录并没有什么坏处。如果它在启动时查看两次,可能需要更长的时间,但我认为这是可以忽略的。它似乎已经取得了进展,当我刚刚包含/perl时,它给出了一个错误,说它找不到另一个模块(一个自定义模块,位于/netfort/lib中)但是当我尝试包含这两个目录时,它返回到没有找到strict.pm。这个语法对于包含多个目录是否正确?两个目录名之间只有一个空格
PERL5LIB='/perl/netfort/lib'/mydirectory/myscript&
@Spellchamp请参见我的编辑。您需要使用冒号
.Perfect。为了安全起见,我包括了上面所有的目录。在调用我的脚本时,INC似乎没有完全加载,或者两个缺少的目录是这个定制操作系统的一部分,并在引导结束时添加到INC。把你的答案标记为正确。非常感谢你。