Що означає це “… | команда 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зчитується його вихід. Завдяки використанню зворотних посилань вихід кішки підміняється 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. (бічна примітка: `...`також можна використовувати замість $(...), хоча є деякі відмінності )

4
Цікавий "колір обличчя", це | command 'cat'(я не можу вставляти задники в backtick у коментарях?) ... звичайний спосіб: | xargs command(з додатковими параметрами до xargs, наприклад, для обмеження на 1 або n аргументів тощо)
Олів'є Дулак
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.