O que isso… “| ps 'cat' ”comando 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 só não entendo o que acontece aqui após o primeiro | .

Vamos supor que xprop _NET_WM_PID produza 1000 como ID do processo. O que acontece depois? Por que temos um cat após ps ? Estou um pouco confuso.

    
por Newbie 18.04.2013 / 12:03

1 resposta

15

xprop ... | sed ... é executado primeiro, então cat lê sua saída. Devido ao uso de backticks, a saída de cat é substituída em ps 'cat' de 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_PID para recuperar o ID do processo de uma janela. Depois de clicar em uma janela, ela exibe algo como:

    _NET_WM_PID(CARDINAL) = 12345
    
  2. Divida no = e pegue o segundo campo. cut -d= -f2 usa a string _NET_WM_PID(CARDINAL) = 12345 da entrada padrão e grava 12345 na saída padrão.
  3. Finalmente, execute o comando ps com $(...) substituído pela saída de ... , o comando que é executado é ps 12345 . (nota lateral: '...' também pode ser usada em vez de $(...) , embora haja algumas diferenças )
por Lekensteyn 18.04.2013 / 12:13