Cái này làm gì | ps `cat` Lệnh làm gì?


10

Trong nghiên cứu Internet của tôi, tôi đã tìm thấy lệnh sau đây là giải pháp để tìm tên quy trình của một cửa sổ:

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

Tôi chỉ không hiểu những gì xảy ra ở đây sau lần đầu tiên |.

Giả sử rằng xprop _NET_WM_PIDđầu ra 1000là ID tiến trình. Chuyện gì xảy ra tiếp theo? Tại sao chúng ta có một catsau ps? Tôi la một chut Nhâm lân.

Câu trả lời:


15

xprop ... | sed ...được thực hiện đầu tiên, sau đó catđọc đầu ra của nó. Do sử dụng backticks, đầu ra của mèo được thay thế ps `cat`để lệnh trở thành ps 1000.

Một lệnh thay thế dẫn đến cùng một kết quả là:

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

Điều này hoạt động như sau:

  1. Thực thi xprop _NET_WM_PIDđể lấy ID tiến trình của một cửa sổ. Sau khi nhấp vào một cửa sổ, nó xuất ra một cái gì đó như:

    _NET_WM_PID(CARDINAL) = 12345
    
  2. Tách tại =và lấy trường thứ hai. cut -d= -f2lấy _NET_WM_PID(CARDINAL) = 12345chuỗi từ đầu vào tiêu chuẩn và ghi 12345vào đầu ra tiêu chuẩn.
  3. Cuối cùng chạy pslệnh với $(...)thay thế cho đầu ra của ..., lệnh được thực thi là ps 12345. (lưu ý bên: `...`cũng có thể được sử dụng thay vì $(...), mặc dù có một số khác biệt )

4
"Sự phức tạp" thú vị, điều này | command 'cat'(tôi không thể nhúng backticks vào backtick trong các bình luận?) ... cách thông thường là: | xargs command(với các tham số bổ sung cho xargs, ví dụ như giới hạn ở 1 hoặc n đối số, v.v.)
Olivier Dulac
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.