Что значит «… | ps `cat`” команду делать?

10

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

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

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

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

Новичок
источник

Ответы:

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
источник
4
Интересный "цвет лица", это | command 'cat'(я не могу встраивать обратные | xargs commandметки в обратный тик в комментариях?) ... обычный способ таков : (с дополнительными параметрами для xargs, например, для ограничения 1 или n аргументов и т. Д.)
Оливье Дюлак