ในการรันคำสั่งพร้อมกันคุณสามารถใช้&ตัวคั่นคำสั่ง
~$ 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 %2CtrlC
พวกเขาตามลำดับฆ่ากระบวนการพื้นหลังที่ 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] /'
คุณสามารถของหลักสูตรมีลักษณะที่หน้าจอ มันช่วยให้คุณสามารถแยกคอนโซลออกเป็นคอนโซลแยกได้มากเท่าที่คุณต้องการ ดังนั้นคุณสามารถตรวจสอบคำสั่งทั้งหมดแยกกัน แต่ในเวลาเดียวกัน