perl Shell :: GetEnv

时间:2011-10-19 07:48:28

标签: perl module

我想在perl脚本中源文件,首先,我使用以下方法:

system("source env.bash");

但我得到了一个错误:

不能执行“source”:在s-test.pl第10行没有这样的文件或目录。

我无法解决问题,所以我使用Shell::GetEnv

use Shell::GetEnv;

$env = Shell::GetEnv->new('bash', 'source env.bash' );

$envs = $env->envs(%opt);
$env->import_envs(%opt);

但它似乎根本不起作用,任何人都可以帮我解决吗?非常感谢。

1 个答案:

答案 0 :(得分:1)

system()(至少在类Unix系统上)通过/bin/sh调用命名命令。与bash不同,/bin/sh没有source作为.的同义词。

但即使您将其更改为system(". env.bash"),也无效。据推测env.bash设置环境变量(export FOO=BAR; ...)。此类设置仅适用于当前流程。它将调用一个shell,在该shell中设置环境变量,然后对调用(perl)进程没有任何影响。

我之前从未使用过Shell::GetEnv,但根据文档%opt用于将选项传递给函数您还没有向我们展示%opt的值。你确定需要它吗?也许你只想做:

...
$envs = $env->envs();
$env->import_envs();