สิ่งนี้“ … | คำสั่ง ps `cat`” ทำอย่างไร


10

จากการวิจัยอินเทอร์เน็ตของฉันฉันพบคำสั่งต่อไปนี้เป็นวิธีแก้ปัญหาเพื่อค้นหาชื่อกระบวนการของหน้าต่าง:

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

|ผมก็ไม่เข้าใจว่าเกิดอะไรขึ้นที่นี่หลังจากที่ครั้งแรก

สมมติว่าxprop _NET_WM_PIDเอาต์พุต1000เป็น ID กระบวนการ จะเกิดอะไรขึ้นต่อไป ทำไมเรามีความcatหลังps? ฉันสับสนเล็กน้อย

คำตอบ:


15

xprop ... | sed ...ถูกดำเนินการก่อนจากนั้นcatอ่านเอาต์พุต เนื่องจากการใช้ backticks เอาท์พุทของแมวแทนในดังกล่าวว่าคำสั่งจะกลายเป็นps `cat`ps 1000

คำสั่งทางเลือกที่นำไปสู่ผลลัพธ์เดียวกันคือ:

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

งานนี้เป็นดังนี้:

  1. ดำเนินการxprop _NET_WM_PIDเพื่อดึงข้อมูล ID กระบวนการของหน้าต่าง หลังจากคลิกหน้าต่างมันจะแสดงผลลัพธ์ดังนี้:

    _NET_WM_PID(CARDINAL) = 12345
    
  2. แยกที่=และใช้ฟิลด์ที่สอง cut -d= -f2ใช้_NET_WM_PID(CARDINAL) = 12345สตริงจากอินพุตมาตรฐานและเขียน12345ไปยังเอาต์พุตมาตรฐาน
  3. สุดท้ายเรียกใช้psคำสั่งกับ$(...)แทนสำหรับการส่งออกของคำสั่งที่ได้รับจะถูกดำเนินการ... ps 12345(หมายเหตุด้านข้าง: `...`สามารถใช้แทนได้$(...)แม้ว่าจะมีความแตกต่างกันบ้าง )

4
"ผิว" ที่น่าสนใจนี้| command 'cat'(ฉันไม่สามารถฝัง backticks ใน backtick ในความคิดเห็น?) ... วิธีปกติคือ: | xargs command(ด้วยพารามิเตอร์เพิ่มเติมเพื่อ xargs ยกตัวอย่างเช่นเพื่อ จำกัด 1 หรือ n ขัดแย้ง ฯลฯ )
Olivier Dulac
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.