在Perl脚本

时间:2017-07-28 05:37:17

标签: perl cgi

考虑以下代码:

#!/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列表中。请帮助我或建议另一种方式。谢谢提前。

1 个答案:

答案 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.