Piping หลายคำสั่ง


8

ฉันต้องการเรียกใช้คำสั่งต่อไปนี้และไปป์ stout ของทั้งสองไปยัง TextEdit:

pmset -g; echo; pmset -g assertions | open -f -a TextEdit 

สิ่งนี้ใช้ไม่ได้ แต่จะดำเนินการเฉพาะส่วนหลัง:

อย่างไร?

คำตอบ:


11

Aahhh การbashเปลี่ยนเส้นทาง: -

( pmset -g && echo && pmset -g assertions ) | open -f -a TextEdit

ที่รันคำสั่งของคุณเป็นคำสั่ง bash เดียว (นั่นคือเอฟเฟ็กต์ของ&&) ใน sub-shell (ซึ่งเป็นสิ่งที่ล้อมรอบในสิ่ง()นั้น) และเปลี่ยนทิศทางเอาต์พุตของ sub-shell ไปยัง TextEdit สำหรับคุณ ในทางเทคนิคคุณไม่จำเป็นต้องใช้&&แทน;แต่ผลของการเปลี่ยนแปลงคือถ้าคำสั่งใด ๆ ล้มเหลวมันจะหยุดสายโซ่ทั้งหมด ณ จุดนั้น

หมายเหตุ: ในตัวอย่างของคุณคำสั่งทั้งหมดจะถูกเรียกใช้ (ตามที่คุณสามารถพิสูจน์ได้โดยเพียงแค่รันpmset -g; echo; pmset -g assertionsที่บรรทัดคำสั่ง) นั่นเป็นเพียงการที่คุณใช้ไพพ์กับคำสั่งสุดท้ายเท่านั้น นั่นเป็นเหตุผลว่าทำไมจึงต้องเรียกใช้ใน subshell

หมายเหตุ: คุณสามารถแทนที่|ตัวละครด้วย>และส่งออกไปยังไฟล์หากคุณต้องการ


เคล็ดลับเล็ก ๆ นี้มีประโยชน์อย่างเหลือเชื่อ รายละเอียดของคำสั่งในตัว / อักขระพิเศษนั้นมีการจัดทำเป็นเอกสารแทบจะไม่ ขอขอบคุณอีกครั้ง.
njboot

4

() รวมคำสั่งไว้ในกระบวนการเดียวโดยเชื่อมคำสั่งเข้ากับ stdout:

(pmset -g; echo; pmset -g assertions) | open -f -a TextEdit
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.