如果我从命令提示符运行以下命令,它会按预期工作:-
ps -eo pid,command | grep -v bash | grep syslogd | awk '{print $1}'
输出只是系统日志进程的 pid。根据 bash 的手册页,使用 -c 参数允许传递一串命令。所以,我试了这个: -
/bin/bash -c "ps -eo pid,command | grep -v bash | grep syslogd | awk '{print $1}'"
除了打印系统日志进程的 pid 外,还打印了系统日志的路径:-
19 /usr/sbin/syslogd
有人可以解释为什么会这样,以及是否可以以这种方式使用 bash 调用命令,以便它的行为与直接调用命令时相同,并且只打印进程的 pid?
$1
由外部 shell 解释,因为它在双引号中。您需要使用反斜杠对其进行转义。
/bin/bash -c "ps -eo pid,command | grep -v bash | grep syslogd | awk '{print $1}'"
顺便说一句,在 Linux 上,您可以将所有这些替换为 pgrep
:
$ pgrep syslogd
25855
这也
应该有效
pidof syslogd