服务器perl脚本 - 带有所需的包 - 由用户“my_user”在本地工作。
但如果我远程运行脚本(ssh),我需要 export PERL5LIB=/usr/local/share/perl/5.10.0/my_modules
,然后再调用perl脚本才能使其正常工作。
为什么要这样做以及如何在每次需要调用远程perl脚本时避免导出PERLIB?
工作:
ssh my_user@remote_server "export PERL5LIB=/usr/local/share/perl/5.10.0/my_modules; /cgi-bin/my_perl_script.pl --option1 foo --option2 '*';"
不工作:
ssh my_user@remote_server "/cgi-bin/my_perl_script.pl --option1 foo --option2 '*';"
返回: 无法在@INC
中找到my_package1.pm这可能是一个ssh问题,而不是严格的perl点:为什么运行perl脚本的远程用户不会从其ENV本地数据继承。
THX
答案 0 :(得分:1)
正如@mu_is_too_short所建议的那样(没有摩擦也很好),并链接到更详细的解释here,有不同类型的shell:“SSH命令执行shell是一个非交互式shell,而普通的shell是登录shell或交互式shell“。
所以解决方案就是我故意做的(例如在运行脚本之前添加“export PERL5LIB”),或者更好的是,从远程用户获取整个环境以运行远程shell。预期的行为。