Apa ini "... | perintah ps `cat`” lakukan?

10

Pada penelitian Internet saya, saya menemukan perintah berikut sebagai solusi untuk menemukan nama proses dari sebuah jendela:

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

Saya hanya tidak mengerti apa yang terjadi di sini setelah yang pertama |.

Mari kita asumsikan bahwa xprop _NET_WM_PIDoutput 1000sebagai ID proses. Apa yang terjadi selanjutnya? Kenapa kita punya catafter ps? Saya sedikit bingung.

Pemula
sumber

Jawaban:

15

xprop ... | sed ...dieksekusi terlebih dahulu, kemudian catmembaca hasilnya. Karena penggunaan backticks, output dari kucing diganti ps `cat`sedemikian rupa sehingga menjadi perintah ps 1000.

Perintah alternatif yang mengarah ke hasil yang sama adalah:

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

Ini berfungsi sebagai berikut:

  1. Jalankan xprop _NET_WM_PIDuntuk mengambil ID proses dari sebuah jendela. Setelah mengklik sebuah jendela, itu menghasilkan sesuatu seperti:

    _NET_WM_PID(CARDINAL) = 12345
    
  2. Split di =dan ambil bidang kedua. cut -d= -f2mengambil _NET_WM_PID(CARDINAL) = 12345string dari input standar dan menulis 12345ke output standar.
  3. Akhirnya jalankan psperintah dengan $(...)menggantikan output dari ..., perintah yang dijalankan adalah ps 12345. (catatan: `...`juga dapat digunakan sebagai ganti $(...), meskipun ada beberapa perbedaan )
Lekensteyn
sumber
4
"Corak" yang menarik, ini | command 'cat'(saya tidak bisa menanamkan backtick di backtick dalam komentar?) ... cara yang biasa adalah: | xargs command(dengan parameter tambahan ke xargs, misalnya untuk membatasi argumen 1 atau n, dll)
Olivier Dulac