当我在命令提示符下执行以下命令时,它工作正常.但是当我在perl脚本中包含相同内容时,它会显示整个进程名称.
ps -ef | grep truecontrol | awk '{print$2}'
Run Code Online (Sandbox Code Playgroud)
回报
4567
3456
Run Code Online (Sandbox Code Playgroud)
当我通过perl执行它时,它显示了整个过程的细节.我想将它分配给一个变量数组并对其进行处理.让我知道怎么做?
my $process_chk_command = `ps -ef | grep truecontrol | awk '{print$2}'`;
print($process_chk_command);
root 9902 9890 0 05:50 ? 00:00:03 /opt/abc/jre/bin/java -DTCFTP=1 -d64 -Xms16m -Xmx64m -Djava.library.path=/opt/abc/server/ext/wrapper/lib -cla
Run Code Online (Sandbox Code Playgroud)
perl的反引号和qx //插入变量,所以当你写:
my $process_chk_command = `ps -ef | grep truecontrol | awk '{print $2}'`;
Run Code Online (Sandbox Code Playgroud)
perl插入特殊变量$2
.在你的情况下,$2
没有设置,因此扩展为空字符串,所以awk命令是简单的{print}
.
你可以逃避美元符号(`ps ... | awk '{print \$2}'`
)以避免这种情况.
(顺便说一句,我建议grep [t]ruecontrol
阻止grep匹配它自己的进程表条目,或者它的构成管道的父shell的条目. 具有POSIX弯曲的sh aficionados可能另外建议`ps -eo pid,comm,args | awk '/[t]ruecontrol/{print \$1}'`
.)