如何在Perl中将调用环境正确导出到子shell中?

如何在Perl中将调用环境正确导出到子shell中?,perl,path,environment,Perl,Path,Environment,我试图使用一个Perl脚本在我们现有的工具(wpj)中添加某些目录。直接命令看起来像 $ wpj add path/to/desired/library makefile.wpj 为此我得到 wpj: not found 但是,来自shell的相同调用成功。有些内容导出不正确,您能否给我一些建议,说明如何将调用环境导出到反引号创建的子shell中?检查路径并根据需要修改其内容: use Env qw(@PATH); # check the PATH: print join("\n", @PA

我试图使用一个Perl脚本在我们现有的工具(wpj)中添加某些目录。直接命令看起来像

$ wpj add path/to/desired/library makefile.wpj 为此我得到

wpj: not found
但是,来自shell的相同调用成功。有些内容导出不正确,您能否给我一些建议,说明如何将调用环境导出到反引号创建的子shell中?

检查路径并根据需要修改其内容:

use Env qw(@PATH);

# check the PATH:
print join("\n", @PATH);

# modify its content:
push @PATH, "/usr/bin/wpj";

对于此模块。

无需执行任何操作即可继承环境。我怀疑
wpj
不是一个可执行文件,而是一个shell别名。因此,您需要在定义了该别名的shell中运行该命令。这可能需要一个交互式shell,具体取决于您创建别名的方式

system('bash', '-i', '-c', 'wpj add path/to/desired/library makefile.wpj');

抱歉,检查得更仔细了,它不起作用,我的意思是,在通过system()或backticks``启动系统命令时,是否也会使用调用脚本的环境。佩德罗·佩雷斯,谢谢你。你不必做任何特别的事。子对象继承父对象的环境。
system('bash', '-i', '-c', 'wpj add path/to/desired/library makefile.wpj');