我想在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);
但它似乎根本不起作用,任何人都可以帮我解决吗?非常感谢。
答案 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();