为什么我的perl脚本需要将包路径导出到@INC以通过ssh远程运行

时间:2011-02-21 15:39:36

标签: perl ssh export

服务器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

1 个答案:

答案 0 :(得分:1)

正如@mu_is_too_short所建议的那样(没有摩擦也很好),并链接到更详细的解释here,有不同类型的shell:“SSH命令执行shell是一个非交互式shell,而普通的shell是登录shell或交互式shell“。

所以解决方案就是我故意做的(例如在运行脚本之前添加“export PERL5LIB”),或者更好的是,从远程用户获取整个环境以运行远程shell。预期的行为。