通过sudo运行的Perl脚本无法找到库,@ INC内容已更改

时间:2015-12-18 18:16:21

标签: perl sudo

通过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

1 个答案:

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