Что это значит? ... | ps 'cat' 'command do?

10

В своем исследовании в Интернете я нашел следующую команду в качестве решения для поиска имени процесса в окне:

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

Я просто не понимаю, что происходит здесь после первого | .

Предположим, что xprop _NET_WM_PID выводит 1000 в качестве идентификатора процесса. Что будет дальше? Почему у нас есть cat после ps ? Я немного смущен.

    
задан Newbie 18.04.2013 в 10:03
источник

1 ответ

15
Сначала выполняется

xprop ... | sed ... , затем cat считывает свой вывод. Из-за использования обратных выходов выход cat заменяется в ps 'cat' , так что команда становится ps 1000 .

Альтернативная команда, которая приводит к такому же результату:

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

Это работает следующим образом:

  1. Выполните xprop _NET_WM_PID , чтобы получить идентификатор процесса окна. После нажатия окна он выводит что-то вроде:

    _NET_WM_PID(CARDINAL) = 12345
    
  2. Разделите на = и возьмите второе поле. cut -d= -f2 берет строку _NET_WM_PID(CARDINAL) = 12345 со стандартного ввода и записывает 12345 в стандартный вывод.
  3. Наконец, запустите команду ps с $(...) , заменяемой выходом ... , команда, которая будет выполнена, будет ps 12345 . (примечание стороны: '...' также может использоваться вместо $(...) , хотя есть некоторые отличия )
ответ дан Lekensteyn 18.04.2013 в 10:13
источник