考虑以下代码:
#!/usr/bin/perl
use strict;
use warnings;
$value="export PI = 3.14";
open(IN,">>/root/.bashrc");
print IN $value;
close(IN);
`source /root/.bashrc`;
我想使用Perl脚本创建一个env变量。 我已经为根文件夹和.bashrc文件授予了777权限。 脚本中的$值被附加到.bashrc但是当我使用“env”或“printenv”来显示env变量时,我看不到附加到.bashrc的那个。我猜源命令不起作用,因为当我从CL中获取.bashrc文件时,它显示在env列表中。请帮助我或建议另一种方式。谢谢提前。
答案 0 :(得分:3)
反引号启动一个子shell进程,执行源代码。然后子shell退出并且你的perl脚本不会受到影响。你试过$ ENV {PI} = 3.14 ;?这将改变运行的perl脚本和之后创建的所有子进程的环境。
use strict ;
use warnings ;
$ENV{TEST} = 'Yo.' ;
my $subshelled = qx!echo \$TEST! ;
chomp $subshelled ;
printf "Subshelled result: '%s'\n" , $subshelled ;
my $subshellenv = qx!env! ;
printf "Env:\n%s\n" , $subshellenv ;
将打印
Subshelled result: 'Yo.'
Env:
...
TEST=Yo.