这是什么意思?ps`cat`“命令执行吗?


10

在我的Internet研究中,我找到以下命令作为找到窗口的进程名称的解决方案:

xprop _NET_WM_PID | sed 's/_NET_WM_PID(CARDINAL) = //' | ps `cat`

我只是不明白第一次发生之后在这里发生了什么|

假设将xprop _NET_WM_PID输出1000作为进程ID。接下来发生什么?为什么会有cat追随者ps?我有点困惑。

Answers:


15

xprop ... | sed ...首先执行,然后cat读取其输出。由于使用了反引号,因此cat的输出被替换为ps `cat`,命令变为ps 1000

导致相同结果的替代命令是:

ps $(xprop _NET_WM_PID | cut -d= -f2)

其工作原理如下:

  1. 执行xprop _NET_WM_PID以检索窗口的进程ID。单击窗口后,它输出如下内容:

    _NET_WM_PID(CARDINAL) = 12345
    
  2. 在处拆分,进入=第二个字段。从标准输入cut -d= -f2获取_NET_WM_PID(CARDINAL) = 12345字符串,然后写入12345标准输出。
  3. 最后运行ps命令$(...)替换输出...,执行的命令是ps 12345。(旁注:`...`也可以代替$(...),尽管有一些区别

4
有趣的“复杂性”,这| command 'cat'(我不能在评论的反引号中插入反引号吗?)……通常的方式是:(| xargs command带有xargs的附加参数,例如限制为1或n个参数,等等)
Olivier Dulac
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.