ในการรันคำสั่งพร้อมกันคุณสามารถใช้&
ตัวคั่นคำสั่ง
~$ command1 & command2 & command3
สิ่งนี้จะเริ่มcommand1
ขึ้นจากนั้นรันในพื้นหลัง command2
เช่นเดียวกันกับ จากนั้นก็จะเริ่มcommand3
ตามปกติ
ผลลัพธ์ของคำสั่งทั้งหมดจะอ่านไม่ออกด้วยกัน แต่ถ้านั่นไม่ใช่ปัญหาสำหรับคุณนั่นจะเป็นทางออก
หากคุณต้องการแยกเอาท์พุทในภายหลังคุณสามารถไพพ์เอาท์พุทของแต่ละคำสั่งลงไปtee
ซึ่งช่วยให้คุณระบุไฟล์เพื่อทำมิเรอร์เอาต์พุต
~$ command1 | tee 1.log & command2 | tee 2.log & command3 | tee 3.log
ผลลัพธ์อาจจะยุ่งมาก sed
เพื่อตอบโต้ที่คุณสามารถให้การส่งออกของทุกคำสั่งที่ใช้คำนำหน้า
~$ echo 'Output of command 1' | sed -e 's/^/[Command1] /'
[Command1] Output of command 1
ดังนั้นถ้าเรารวมทั้งหมดเข้าด้วยกันเราจะได้:
~$ command1 | tee 1.log | sed -e 's/^/[Command1] /' & command2 | tee 2.log | sed -e 's/^/[Command2] /' & command3 | tee 3.log | sed -e 's/^/[Command3] /'
[Command1] Starting command1
[Command2] Starting command2
[Command1] Finished
[Command3] Starting command3
นี่เป็นเวอร์ชั่นที่เหมาะอย่างยิ่งสำหรับสิ่งที่คุณอาจจะได้เห็น แต่มันเป็นสิ่งที่ดีที่สุดที่ฉันสามารถนึกได้ในตอนนี้
หากคุณต้องการหยุดทั้งหมดในครั้งเดียวคุณสามารถใช้บิลด์อินtrap
ได้
~$ trap 'kill %1; kill %2' SIGINT
~$ command1 & command2 & command3
ซึ่งจะดำเนินการcommand1
และcommand2
ในพื้นหลังและcommand3
ในเบื้องหน้าซึ่งจะช่วยให้คุณฆ่ามันด้วย+ CtrlC
เมื่อคุณฆ่ากระบวนการสุดท้ายด้วยCtrl+ คำสั่งจะถูกดำเนินการเพราะเราเชื่อมต่อการดำเนินการของพวกเขากับการต้อนรับของสัญญาณรบกวนสิ่งที่ส่งมาโดยการกด+Ckill %1; kill %2
CtrlC
พวกเขาตามลำดับฆ่ากระบวนการพื้นหลังที่ 1 และ 2 (ของคุณcommand1
และcommand2
) trap - SIGINT
อย่าลืมที่จะเอากับดักหลังจากที่คุณทำเสร็จแล้วด้วยคำสั่งของคุณโดยใช้
มอนสเตอร์ที่สมบูรณ์ของคำสั่ง:
~$ trap 'kill %1; kill %2' SIGINT
~$ command1 | tee 1.log | sed -e 's/^/[Command1] /' & command2 | tee 2.log | sed -e 's/^/[Command2] /' & command3 | tee 3.log | sed -e 's/^/[Command3] /'
คุณสามารถของหลักสูตรมีลักษณะที่หน้าจอ มันช่วยให้คุณสามารถแยกคอนโซลออกเป็นคอนโซลแยกได้มากเท่าที่คุณต้องการ ดังนั้นคุณสามารถตรวจสอบคำสั่งทั้งหมดแยกกัน แต่ในเวลาเดียวกัน