当我在命令提示符下执行以下命令时,它工作正常。但是当我在 perl 脚本中包含相同的内容时,它会显示整个进程名称。
ps -ef | grep truecontrol | awk '{print$2}'
返回
4567
3456
当我通过 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
最佳答案
perl 的 backticks and qx//插入变量,所以当你写:
my $process_chk_command = `ps -ef | grep truecontrol | awk '{print $2}'`;
perl 插入 special variable
$2
.在您的情况下,$2
未设置,因此扩展为空字符串,因此 awk 命令只是 {print}
.您可以转义美元符号 (
`ps ... | awk '{print \$2}'`
) 以避免这种情况。(顺便说一句,我建议使用
grep [t]ruecontrol
以防止 grep 匹配它自己的进程表条目,或其构建管道的父 shell 的匹配。具有 POSIX 倾向的 sh 爱好者可能会另外建议 `ps -eo pid,comm,args | awk '/[t]ruecontrol/{print \$1}'`
。)
关于perl - 如何使用perl单独获取linux进程ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20077289/