我正在将bash脚本转换为Perl。我不确定相当于export
是什么。Perl中bash导出的等价物是什么?
LOC=/tmp/1/
export LOC
例如,对于上述两行,等价的Perl代码是什么?
my $LOC = '/tmp/1/';
# what should go here?
我正在将bash脚本转换为Perl。我不确定相当于export
是什么。Perl中bash导出的等价物是什么?
LOC=/tmp/1/
export LOC
例如,对于上述两行,等价的Perl代码是什么?
my $LOC = '/tmp/1/';
# what should go here?
$ENV{LOC} = "/tmp/1";
的%ENV
内容被传播到一个Perl脚本的子进程的环境。
模块的Env(见http://perldoc.perl.org/Env.html)
+1:有趣的......一个警告:它看起来可能很难创建一个新的env变种;这个机制似乎依赖于你在编译时指定要绑定的环境变量('use Env;')。所以,如果你知道你需要'$ ENV {LOC}',那么很好:'使用Env qw(LOC);'。如果你决定通过你的脚本的一部分,你需要一个新的env var,你似乎被使用'$ ENV {NEWVAR}'机制而不是模块'Env'卡住。 –
有趣,但我不相信这是有用的(我从来没有用过它)。它只是意味着你可以输入'$ LOC'而不是'$ ENV {LOC}',这可以让我们更难以看到发生了什么。 (它把'$ PATH'当作一个Perl数组。) –
bash的内部,你可能想要做这样的事情:
EXPORT_CMD=/tmp/${0}_exports.bsh
perl ...
chmod +x $EXPORT_CMD
$EXPORT_CMD
rm $EXPORT_CMD
Perl的内部,这样的:
sub export (@) {
state $exh;
unless ($exh) {
my $export_cmd_path = $ENV{EXPORT_CMD};
open($exh, '>>', $export_cmd_path)
or die "Could not open $export_cmd_path!"
;
}
while (@_ > 1) {
my ($name, $value) = ((uc shift), shift);
# If you want it visible in the current script:
{ no strict 'refs';
${"::$name"} = $value;
}
$exh->print(qq{export $name "$value"\n});
}
}
然后,它只是一个编码本的问题:
export LOC => '/tmp/1/';
问题是,大多数程序不能更改它们被调用的shell变量。
但不是父shell(这对于这个特定的FAQ来说通常是未说明的需求) – ysth
对环境的任何更改都不会传播到Linux中的父级。这是因为在Linux中,每个进程都有自己的环境。但在Windows中,只有一个环境,所以对其进行的任何更改都会显示在所有进程中。 – shawnhcorey
给**未出生的孩子**过程,而是。 – tchrist