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 进程。然后 subshell 将退出并且您的 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.
考虑以下代码:
#!/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 进程。然后 subshell 将退出并且您的 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.