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

时间:2016-08-15 14:17:43

标签: perl variables aix

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

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}拉入其中(我认为因为它认为是$命令作为包?)

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

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

然而,这不适用于"或死"功能最终。

我的问题,最终;是否有可能在第一种方法中使变量替换,如果是,如何?

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

谢谢!

1 个答案:

答案 0 :(得分:1)

在第

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

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