如何在 open(COMMAND, $command) 函数中使用变量?

How can I use variables in open(COMMAND, $command) function?

第一次在这里提问,希望格式正确:

my %config;
$config{variable1}=epaMQMonitor;
$config{variable2}=IntroscopeEPAgent;

#issue the ps grep
my $command = 'ps -ef |grep -w $config{variable1} |grep -wi $config{variable2} |grep -v grep > /wilyagent/BriansPerlTesting/applytest.txt|';
print "Command is ps -ef |grep -w $config{variable1} |grep -wi $config{variable2} |grep -v grep > /wilyagent/BriansPerlTesting/applytest.txt|\n";
print "$command\n";
open( COMMAND, $command )
|| die "Error when executing \"$command\": $!";

现在,我对两者的预期输出是:

Command is ps -ef |grep -w epaMQMonitor |grep -wi IntroscopeEPAgent |grep -v grep > /wilyagent/BriansPerlTesting/applytest.txt|

相反,我得到了第二个(这似乎是运行):

ps -ef |grep -w $config{variable1} |grep -wi $config{variable2} |grep -v grep > /wilyagent/BriansPerlTesting/applytest.txt|

进一步挖掘表明 Perl 正在用第一级变量 ($command) 代替它的内容,但它没有将 $config{variable1} 和 $config{variable2} 拉入其中(我认为是因为它考虑$command 作为一个包?)

我找到了一种方法来获得我想要的输出:

open my $command, "ps -ef |grep -w $config{variable1} |grep -wi $config{variable2} |grep -v grep > /wilyagent/BriansPerlTesting/applytest.txt|";
close($command);

但是,这不适用于最后的 "or die" 函数。

我的问题,归根结底;是否有可能在第一种方法中使用变量替换,如果可以,怎么做?

背景 - 原因是我们目前有一系列硬编码的 perl 脚本。有人要求我们让这些脚本可以移植到其他服务器上,而不必自己编辑脚本,让它们查看一个列出它们正在寻找的内容的配置文件(在这种情况下,它是一个寻找进程的脚本应该在服务器上 运行ning)。

谢谢!

在行

my $command = 'ps -ef |grep -w $config{variable1} |grep -wi $config{variable2} |grep -v grep > /wilyagent/BriansPerlTesting/applytest.txt|';

你设置了变量$command。并且由于您使用单引号 '...' ,因此不会替换变量。使用双引号 "..." 代替变量替换。