这个 "... | ps `cat`" 命令有什么作用?

New*_*bie 10 command-line pipe execute-command

在我的互联网研究中,我发现以下命令作为查找窗口进程名称的解决方案:

xprop _NET_WM_PID | sed 's/_NET_WM_PID(CARDINAL) = //' | ps `cat`
Run Code Online (Sandbox Code Playgroud)

我只是不明白第一次之后会发生什么|

让我们假设xprop _NET_WM_PID输出1000为进程 ID。接下来发生什么?为什么我们有一个catafter ps?我有点困惑。

Lek*_*eyn 15

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

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

ps $(xprop _NET_WM_PID | cut -d= -f2)
Run Code Online (Sandbox Code Playgroud)

其工作原理如下:

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

    _NET_WM_PID(CARDINAL) = 12345
    
    Run Code Online (Sandbox Code Playgroud)
  2. 分裂=并采取第二个领域。从标准输入cut -d= -f2获取_NET_WM_PID(CARDINAL) = 12345字符串并写入12345标准输出。
  3. 最后ps$(...)代替 的输出运行...命令,执行的命令是ps 12345。(旁注:`...`也可以用来代替$(...),尽管有一些区别

  • 有趣的“肤色”,这个`| 命令'cat'`(我不能在注释的反引号中嵌入反引号?)...通常的方法是:`| xargs 命令`(带有 xargs 的附加参数,例如限制为 1 个或 n 个参数等) (4认同)