В своем исследовании Интернета я нашел следующую команду в качестве решения для поиска имени процесса окна:
xprop _NET_WM_PID | sed 's/_NET_WM_PID(CARDINAL) = //' | ps `cat`
Я просто не понимаю, что происходит здесь после первого |
. ]
Предположим, что xprop _NET_WM_PID
выводит 1000
в качестве идентификатора процесса. Что происходит дальше? Почему у нас есть cat
после ps
? Я немного смущен.
Сначала выполняется xprop ... | sed ...
, затем cat
считывает свой вывод. Из-за использования обратных галочек вывод команды cat подставляется в ps `cat`
так, что команда становится ps 1000
.
Альтернативная команда, которая приводит к тому же результату:
ps $(xprop _NET_WM_PID | cut -d= -f2)
Это работает следующим образом:
Выполнить xprop _NET_WM_PID
, чтобы получить идентификатор процесса из окно. После щелчка по окну выводится что-то вроде:
_NET_WM_PID(CARDINAL) = 12345
=
и занять второе поле. cut -d= -f2
берет строку _NET_WM_PID(CARDINAL) = 12345
из стандартного ввода и записывает 12345
в стандартный вывод. ps
с заменой $(...)
на вывод ...
, команда, которая будет выполнена, - ps 12345
. (примечание: `...`
также может использоваться вместо $(...)
, хотя есть некоторые различия )