通过sudo运行的Perl脚本无法找到库。通过sudo运行时,@ INC中不存在包含所需库的路径。
sudo perl -e "print \"@INC\""
打印的路径少于
perl -e "print \"@INC\""
我尝试通过
更改sudoers文件Defaults !env_reset
这没有帮助。
有没有办法保留@INC内容?
Environment variables to remove:
RUBYOPT
RUBYLIB
PYTHONUSERBASE
PYTHONINSPECT
PYTHONPATH
PYTHONHOME
TMPPREFIX
ZDOTDIR
READNULLCMD
NULLCMD
FPATH
PERL5DB
PERL5OPT
PERL5LIB
PERLLIB
PERLIO_DEBUG
JAVA_TOOL_OPTIONS
SHELLOPTS
GLOBIGNORE
PS4
BASH_ENV
ENV
TERMCAP
TERMPATH
TERMINFO_DIRS
TERMINFO
_RLD*
LD_*
PATH_LOCALE
NLSPATH
HOSTALIASES
RES_OPTIONS
LOCALDOMAIN
CDPATH
IFS
Environment variables to preserve:
XAUTHORIZATION
XAUTHORITY
TZ
PS2
PS1
PATH
LS_COLORS
KRB5CCNAME
HOSTNAME
DISPLAY
COLORS
感谢您的帮助。答案是:
Defaults !env_reset
Defaults env_delete-=PERLLIB
答案 0 :(得分:0)
根据您提供的信息,我们实际上只能猜测。直接影响Perl脚本中@INC
的环境变量是$PERL5LIB
。
然而,最可能的原因是$PATH
在根shell中是不同的,并且您实际上正在运行不同的Perl二进制文件,它将具有编译的@INC
的不同默认值。使用{{1 }和which perl
来测试这个理论。
要解决您的问题,请确保'shebang'行(脚本的第一行)指向您要使用的Perl二进制文件:
sudo which perl
然后在您的Perl脚本中添加您需要的库路径,显式:
#!/usr/bin/perl
或相对于脚本本身所在目录的位置:
use lib '/opt/path/to/site/lib';