第一次在这里提问,所以我希望我的格式正确:
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脚本。已经要求我们将这些脚本移植到其他服务器而不必编辑脚本本身,让他们查看列出他们正在寻找的内容的配置文件(在这种情况下,它是一个查找应该处理的进程的脚本)在服务器上运行)。
谢谢!
答案 0 :(得分:1)
在第
行my $command = 'ps -ef |grep -w $config{variable1} |grep -wi $config{variable2} |grep -v grep > /wilyagent/BriansPerlTesting/applytest.txt|';
您设置了变量$command
。由于您使用单引号'...'
,因此不会替换变量。使用双引号"..."
代替变量替换。