我需要在另一个文件中获取一些环境变量。如果我使用带有source
函数的system()
命令,则会抱怨“没有这样的文件或目录”。我错过了什么吗?
我的代码如下所示。在我的代码中,我只有system()
函数运行source
命令。源文件只有一个命令:pwd
(当前工作目录)。
perl_system.pl
#!/usr/bin/perl
system "source env.mk"
env.mk (我想来源的env.mk的内容现在只是pwd“
pwd
当我运行此命令时,我看到以下错误
$ perl -w perl_system.pl
Can't exec "source": No such file or directory at perl_system.pl line 2.
答案 0 :(得分:3)
source是一个内置的shell,它使用当前的shell解释器执行shell脚本。因此它不能作为外部命令工作,即使您更改系统调用以调用shell而不是尝试直接运行外部程序,它也不会改变perl进程的环境。
您可以运行env.mk
然后输出生成的环境并相应地更新perl的环境:
for my $env (`bash -c 'source env.mk;env'`) {
chomp $env;
my ($var,$val) = split /=/, $env, 2;
$ENV{$var} = $val;
}
(如果环境变量包含换行符,则存在明显问题)。
更新:只需阅读所有您的问题,而不仅仅是开头。如果您只想执行shell脚本,只需执行:
system "sh env.mk";
源完全没必要。