O que isso significa… comando ps `cat`” faz?

10

Na minha pesquisa na Internet, encontrei o seguinte comando como solução para encontrar o nome do processo de uma janela:

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

Eu simplesmente não entendo o que acontece aqui após o primeiro |.

Vamos supor que as xprop _NET_WM_PIDsaídas 1000sejam ID do processo. O que acontece depois? Por que temos um catdepois ps? Eu estou um pouco confuso.

Novato
fonte

Respostas:

15

xprop ... | sed ...é executado primeiro e depois catlê sua saída. Devido ao uso de backticks, a saída de cat é substituída de ps `cat`forma que o comando se torne ps 1000.

Um comando alternativo que leva ao mesmo resultado é:

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

Isso funciona da seguinte maneira:

  1. Execute xprop _NET_WM_PIDpara recuperar o ID do processo de uma janela. Depois de clicar em uma janela, ele gera algo como:

    _NET_WM_PID(CARDINAL) = 12345
    
  2. Divida no =e pegue o segundo campo. cut -d= -f2pega a _NET_WM_PID(CARDINAL) = 12345string da entrada padrão e grava 12345na saída padrão.
  3. Finalmente, execute o pscomando com $(...)substituto para a saída de ..., o comando que é executado é ps 12345. (observação: `...`também pode ser usado em vez de $(...), embora haja algumas diferenças )
Lekensteyn
fonte
4
Interessante "aparência", isso | command 'cat'(não consigo incorporar backticks no backtick nos comentários?) ... a maneira usual é: | xargs command(com parâmetros adicionais ao xargs, por exemplo, para limitar a 1 ou n argumentos, etc.)
Olivier Dulac