如何使用带有system()函数的source命令?

时间:2015-08-17 21:11:13

标签: bash perl system

我需要在另一个文件中获取一些环境变量。如果我使用带有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.

1 个答案:

答案 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";

源完全没必要。