ฉันต้องการเรียกใช้คำสั่งต่อไปนี้และไปป์ stout ของทั้งสองไปยัง TextEdit:
pmset -g; echo; pmset -g assertions | open -f -a TextEdit
สิ่งนี้ใช้ไม่ได้ แต่จะดำเนินการเฉพาะส่วนหลัง:
อย่างไร?
ฉันต้องการเรียกใช้คำสั่งต่อไปนี้และไปป์ stout ของทั้งสองไปยัง TextEdit:
pmset -g; echo; pmset -g assertions | open -f -a TextEdit
สิ่งนี้ใช้ไม่ได้ แต่จะดำเนินการเฉพาะส่วนหลัง:
อย่างไร?
คำตอบ:
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
หมายเหตุ: คุณสามารถแทนที่|
ตัวละครด้วย>
และส่งออกไปยังไฟล์หากคุณต้องการ
() รวมคำสั่งไว้ในกระบวนการเดียวโดยเชื่อมคำสั่งเข้ากับ stdout:
(pmset -g; echo; pmset -g assertions) | open -f -a TextEdit