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

标签 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 权限。
脚本中的 $value 被附加到 .bashrc 但是当我使用“env”或“printenv”来显示 env 变量时,我看不到附加到 .bashrc 的那个。我猜源命令不起作用,因为当我从 CL 中获取 .bashrc 文件时,它会显示在 env 列表中。请帮助我或建议另一种方式。提前致谢。

最佳答案

反引号启动将执行源的子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.

关于perl - 在 Perl 脚本中使用时,source 命令不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45365597/

相关文章:

当 "src"值不同时,捕获 <img> 标签的正则表达式失败

regex - 在以 "mySqlQueryToArray"开头的行末尾找到单引号

perl - 是否允许将管道传递给构造函数?

mysql - 为什么 Perl 的 DBI 占位符会因负数 MySQL 查询而中断?

perl - Web 服务器如何解释 ".cgi"?

html - 如何从 CGI 脚本中启动 HTMLDOC?

python - 使用cgi python区分不同形式

python - 使用 cgi 字段存储发布到数据库时无法获取属性

python - 是否有适用于 Python 的 Term::ANSIScreen 等效项?

perl - 如何对我的 Perl CGI 脚本进行故障排除?