当我从Perl运行它时,为什么我的shell脚本不起作用?

时间:2010-09-23 21:54:32

标签: perl unix

我有这个命令,我加载(example.sh)在unix命令行中运行良好。

但是,如果我使用system或`语法在Perl中执行它,它就不起作用。 我猜测没有加载某些设置,如环境变量和其他外部sh文件。

是否有编码示例以确保其有效?

有关编码执行失败的更多更新(我一直尝试使用不同的代码):

push (@JOBSTORUN, "cd $a/$b/$c/$d; loadproject cats; sleep 60;");      
...
my $pm = new Parallel::ForkManager(3);

foreach my $job (@JOBSTORUN) {
    $pm->start and next;
    print(`$job`); 
    $pm->finish;
}

print "\n\n[DONE] FINISHED EXECUTING JOBS\n";

输出讯息:

sh: loadproject: command not found

1 个答案:

答案 0 :(得分:5)

您能告诉我们您到目前为止所尝试的内容吗?你是如何运行这个程序的?

如果您从登录shell运行它,我的第一个怀疑将不是环境。你启动的任何Perl脚本(好吧,任何程序,真的)都继承了相同的环境。但是,如果您通过cron运行该程序,那么这是一个不同的故事。

我在这些情况下经常犯的其他错误是错误地指定相对路径。命令行中的路径很好,但我的Perl脚本还有一些其他当前工作目录。

有关一般建议,请参阅Interact with the system when Perl isn't enough Learning Perl 中还有一章介绍了这一点。

鉴于您与我们分享的信息非常有限,这是您可以期待的最佳建议。