【发布时间】:2013-11-24 22:02:27
【问题描述】:
如果我从命令提示符运行以下命令,它会按预期工作:-
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?
【问题讨论】:
-
顺便说一句,正确的写法是
ps -eo pid,command | awk '!/bash/ && /syslogd/ {print $1}'。另见partmaps.org/era/unix/award.html#grep -
@tripleee 好名字(!),谢谢 ;O)
标签: linux macos bash shell awk