如何在Perl脚本中调用shell命令?[closed]

nc1teljy  于 2022-11-15  发布在  Perl
关注(0)|答案(2)|浏览(173)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

三个月前关门了。
Improve this question
如何执行shell命令,保留所有ENV变量,指定shell类型/示例等。访问所有别名,并设置更多别名。
示例:

#!/usr/bin/perl
system("alias test-alias echo TEST;");
system("test-alias;");
system("echo \$SHELL");

结果:

sh: line 0: alias: test-alias: not found
sh: line 0: alias: echo: not found
sh: line 0: alias: TEST: not found
sh: test-alias: command not found
/tool/pandora/bin/tcsh
blmhpbnm

blmhpbnm1#

alias: test-alias not found
alias: echo not found
alias: TEST not found

这是因为在sh中创建别名的正确语法是

alias test-alias='echo TEST'

已修复:

system("alias test-alias='echo TEST'");

sh: 1: test-alias: not found
在修复了第一个问题之后,仍然会出现这种情况。您确实创建了一个shell,并且在其中创建了一个名为test-alias的别名,但是该shell退出了。您正在一个新的shell中运行test-alias;,在该shell中还没有创建test-alias
您需要在同一shell中运行这两个命令。
已修复:

system("alias test-alias='echo TEST'\ntest-alias");
m3eecexj

m3eecexj2#

Perl有一个特殊的全局变量%ENV,它存储了Perl启动时使用的所有环境变量。

my $shell = $ENV{SHELL};

获取所有环境变量。

while ( my ($key,$value) = each %ENV ) {
    printf "%s => %s\n", $key, $value;
}

您也可以使用这个杂凑来储存新的环境变量。

$ENV{FOO} = "bla";
system('echo $FOO');

上面将打印bla。如果你这样做的话,当然可以。

$ENV{FOO} = "bla";
system('/bin/bash');

然后它会产生一个新的Shell,你在那里设置了$FOO。但是我看不出这里有什么意义。只要在Linux中使用.profile或者其他什么来设置环境变量。
最后一点在我看来像是一个经典的XY问题。

相关问题