source 命令在 Perl 脚本中使用时不起作用

source command not working when used in Perl script

考虑以下代码:

#!/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 脚本创建环境变量。 我已经为根文件夹和 .bashrc 文件授予了 777 权限。 脚本中的 $value 被附加到 .bashrc,但是当我使用 "env " 或 "printenv" 显示环境变量时,我看不到附加到 .bashrc.I 的变量,请猜测来源命令不起作用,因为当我从 CL 获取 .bashrc 文件时,它在环境中显示 list.Please 帮助我或提前建议另一个 way.Thanks。

反引号启动将执行源代码的子 shell 进程。然后 subshel​​l 将退出并且您的 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.