0

如果我从命令提示符运行以下命令,它将按预期工作:-

ps -eo pid,command | grep -v bash | grep syslogd | awk '{print $1}'

输出只是 syslogd 进程的 pid。根据 bash 的手册页,使用 -c 参数允许传递命令字符串。所以,我尝试了这个: -

/bin/bash -c "ps -eo pid,command | grep -v bash | grep syslogd | awk '{print $1}'"

不仅打印 syslogd 进程的 pid,还打印 syslogd 的路径:-

 19 /usr/sbin/syslogd

有人能解释一下为什么会这样吗?是否可以用这种方式用 bash 调用命令,以便它与直接调用命令时的行为相同并且只打印进程的 pid?

4

2 回答 2

6

$1外部外壳解释,因为它在双引号中。您需要使用反斜杠对其进行转义。

/bin/bash -c "ps -eo pid,command | grep -v bash | grep syslogd | awk '{print \$1}'"

顺便说一句,在 Linux 上,您可以将所有这些替换为pgrep

$ pgrep syslogd
25855
于 2013-11-12T16:29:35.017 回答
1

这也应该有效

pidof syslogd
于 2013-11-12T17:16:04.297 回答