使用 -c 和管道字符串调用 bash 命令以获得 awk



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

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

最新更新