使用帮助perl脚本设置shell变量

使用帮助perl脚本设置shell变量,perl,shell,Perl,Shell,我试图在perl脚本的帮助下设置shell变量名 但情况并不乐观 system("variable_name=\"variable_value\""); `variable_name=\"variable_value\"`; 有人告诉我为什么它不起作用 实际上我的问题有点不同。 我想知道如何在perl脚本的帮助下设置环境“setenv”。 我试过了 $ENV{“VARIABLE\u NAME}=“home\/path\u 1\/path\u 2\/path\u 3” 然后我启动命令echo$V

我试图在perl脚本的帮助下设置shell变量名

但情况并不乐观

system("variable_name=\"variable_value\"");
`variable_name=\"variable_value\"`;
有人告诉我为什么它不起作用


实际上我的问题有点不同。 我想知道如何在perl脚本的帮助下设置环境“setenv”。 我试过了
$ENV{“VARIABLE\u NAME}=“home\/path\u 1\/path\u 2\/path\u 3”

然后我启动命令echo$VARIABLE_NAME,然后它没有给我从perl脚本设置的路径


谢谢

它起作用了。问题是下一个
system
命令运行一个新的shell,它不知道在第一个shell中设置的变量

system 'x=value; echo $x'; # Outputs "value".
system 'echo $x';          # Empty line - the shell with $x doesn't exist anymore.

您不需要运行新的shell来设置环境变量;事实上,这样做会适得其反,因为该值不会比分配给它的外壳寿命长(除非通过该外壳中可能继承该值的任何幸存子代)

您可以直接在perl中设置环境变量:

$ENV{"variable_name"} = "variable_value"

从perl脚本开始的任何后续shell都会看到这一点。

如果希望环境变量持久化在新shell中,而不是从perl脚本返回,还可以执行以下操作:
system($ENV{'shell');kill'kill',getppid()@LexScarisbrick,…嗯<代码>系统($ENV{'anywhere'})
是一个可怕的想法——将数据替换成字符串,然后传递给
sh-c
是造成外壳注入漏洞的一种方法,除非该变量的值经过仔细检查。我一点也不清楚你上面评论中的代码更普遍地想要实现什么。如果您想派生一个子流程,请在其中设置一个环境变量,然后执行一个shell来替换该perl子流程,最好使其显式化。我的假设(可能是错误的)是,问题的目的是,“在shell中执行
源文件
的Perl等价物是什么?”在Perl中设置环境变量,调用
system()
调用一个新的shell,然后终止调用Perl的进程有效地实现了这一点。但是正如您所提到的,由于存在安全风险,调用新shell不应该基于环境变量。实际上,我的问题有点不同。我想知道如何在perl脚本的帮助下设置环境“setenv”。我试过$ENV{“VARIABLE\u NAME}=“home\/path\u 1\/path\u 2\/path\u 3”;然后我启动命令echo$VARIABLE_NAME,然后它没有给我从perl脚本设置的路径。提前感谢您的支持当然不是。这是一个完全不同的过程。您需要将x设置为一个环境变量,并在父进程中设置它(即在调用
system
的Perl进程中)。实际上,我的问题有点不同。我想知道如何在perl脚本的帮助下设置环境“setenv”。我试过$ENV{“VARIABLE\u NAME}=“home\/path\u 1\/path\u 2\/path\u 3”;然后我启动命令echo$VARIABLE_NAME,然后它没有给我从perl脚本设置的路径。提前感谢您的光临support@AshutoshRawal字体为我工作
perl-we'$ENV{VAR}=q(a/b/c);系统q(echo$VAR)
。请注意,变量是用双引号插入的,Perl不知道您指的是shell变量。@Choroba感谢您的回复,我已经尝试了您提到的内容。但在同一个终端上运行perl脚本后,如果我发出echo$VARIABLE\u NAME命令,它将不打印任何内容。在perl脚本中,echo$VAR正在工作,但在终端上它不工作。@ashutshrawal:这是正常的。在子进程中设置变量无法更改父进程中变量的值。可能的重复项1,2.3.实际上我的问题有点不同。我想知道如何在perl脚本的帮助下设置环境“setenv”。我试过$ENV{“VARIABLE\u NAME}=“home\/path\u 1\/path\u 2\/path\u 3”;然后我启动命令echo$VARIABLE_NAME,然后它没有给我从perl脚本设置的路径。提前感谢您的支持。您想做什么还不清楚。我建议添加一个独立的复制程序——也就是说,在你的问题代码中包含执行赋值和使用赋值的代码,并提供代码的实际输出和预期输出。此外,由于它需要五次重新打开投票,您可能需要一个明确指定的新问题,而不是试图恢复这个问题;系统(“echo$VARIABLE_NAME”);运行此perl脚本后,预期输出:home\/path\u 1\/path\u 2\/path\u 3实际输出:它不会打印任何内容