The*_*ght 0 linux macos bash shell awk
如果我从命令提示符运行以下命令,它按预期方式工作: -
ps -eo pid,command | grep -v bash | grep syslogd | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)
输出只是syslogd进程的pid.根据bash的手册页,使用-c参数允许传递一串命令.所以,我试过这个: -
/bin/bash -c "ps -eo pid,command | grep -v bash | grep syslogd | awk '{print $1}'"
Run Code Online (Sandbox Code Playgroud)
不打印syslogd进程的pid,而是打印syslogd的路径: -
19 /usr/sbin/syslogd
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么会这样,如果可以用这种方式用bash调用命令,那么它的作用与直接调用命令时的行为相同,只打印进程的pid?
在$1正在由外部shell来解释,因为它是在双引号.你需要用反斜杠来逃避它.
/bin/bash -c "ps -eo pid,command | grep -v bash | grep syslogd | awk '{print \$1}'"
Run Code Online (Sandbox Code Playgroud)
顺便说一下,在Linux上你可以用以下内容替换所有这些pgrep:
$ pgrep syslogd
25855
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
264 次 |
| 最近记录: |