从perl脚本中寻找shell脚本

从perl脚本中寻找shell脚本,perl,shell,Perl,Shell,我有一个shell脚本将我的路径永久更改为另一个路径。我的要求是使用一个perl脚本(perl脚本还有一些其他代码,最后它必须为下面的shell scipt提供源代码) test.sh: !/bin/bash cd /db/oa/invoke/path test.pl: !/usr/bin/perl system("source /home/test.sh"); 但采购不起作用。我知道从perl脚本执行shell脚本的命令system(“sh/home/test.sh--help”)。但是我

我有一个shell脚本将我的路径永久更改为另一个路径。我的要求是使用一个perl脚本(perl脚本还有一些其他代码,最后它必须为下面的shell scipt提供源代码)

test.sh:

!/bin/bash
cd /db/oa/invoke/path
test.pl:

!/usr/bin/perl
system("source /home/test.sh");
但采购不起作用。我知道从perl脚本执行shell脚本的命令
system(“sh/home/test.sh--help”)
。但是我需要类似的命令来生成shell脚本。如果我遗漏了任何细节,请告诉我。我已经看到有人就同一主题提出问题,但我没有看到合适的采购解决方案。有人能帮我吗


正如@tripleee所说的那样,你必须执行你自己。我会这样做:

if (defined $ENV{TOTO}) {
    print "TOTO is $ENV{TOTO}\n";
} else {
    my $cmd = ". ./source.txt ; exec $^X $0 " . join(' ', @ARGV);
    system ($cmd);
}
我的脚本source.txt包含

export TOTO=titi

没有明智的方法去做你所要求的事情。子进程不能影响其父进程的环境。基本上,您必须使用Perl
exec
Bash,然后将
exec
Perl重新置于自身之上,才能完成此任务。此外,shebang需要以两个字符
#开头以便它在语法上有效并且实际有用。如果您是shell脚本,就像在您的示例中一样,只是在更改目录,那么您可以使用perl的
chdir
函数来更改目录。你仍然有上面提到的所有问题。