bash
ในขณะที่เขียนนี้ฉันไวยากรณ์คำตอบที่ได้รับการยอมรับเป็นอย่างผิดปกติให้มากที่สุดหากไม่ได้ทั้งหมดบอร์นที่ได้มาจากเปลือกหอยรวมทั้ง ฉันแนะนำการแก้ไขไปด้านบนและคำตอบที่ได้รับการยอมรับในการแก้ไข แต่ฉันก็อยากจะเพิ่มข้อมูลอื่นทั้งหมดนี้และนี่จะเป็นการเขียนมากกว่าการแก้ไข
คุณสามารถใช้คำสั่งผสม:
{ grep ...; bzgrep ...; } >file
.. หรือ subshells (หมายเหตุวงเล็บแทนวงเล็บปีกกา):
(grep ...; bzgrep ...) >file
.. เพื่อจัดกลุ่มคำสั่ง วิธีการ subshell มีไวยากรณ์ที่ดีกว่า (การให้อภัยที่ไม่มีช่องว่างมากขึ้นและอนุญาตให้คุณละเว้นเซมิโคลอนสุดท้าย) แต่มันจะใช้กระบวนการใหม่หรือ "เสแสร้ง" โดยให้คำสั่งทำงานในสภาพแวดล้อมที่ทำความสะอาด ทั้งสองมีข้อดีขึ้นอยู่กับสิ่งที่คุณต้องการทำซึ่งไม่สำคัญที่นี่ แต่คุ้มค่าที่จะมองหาถ้าคุณต้องการความเชี่ยวชาญมากขึ้นกับเชลล์
หมายเหตุ: คุณสามารถใช้ pipelining กับลูกเล่นเหล่านี้ด้วยดังนั้นคุณสามารถทำสิ่งนี้:
{ grep ...; bzgrep ...; } | less
PS ถ้าคุณไม่สนใจเกี่ยวกับการสั่งซื้อของการแข่งขันในการส่งออกรวมของคุณคุณสามารถใช้เป็นหนึ่งเดียวระหว่างสองคำสั่งเช่นดังนั้น:&
{ grep ... & bzgrep ...; }
จากนั้นทั้งสองคำสั่งทำงานพร้อมกันคือได้รับการเปิดตัวและเปลือกทำให้มันอยู่ในพื้นหลังแล้วเปลือกจะทำงานgrep
bzgrep
( แต่มีข้อแม้ขนาดเล็กด้วยที่มีคำอธิบายที่เกี่ยวข้องกับการเปลี่ยนเส้นทางของไฟล์และไฟล์สตรีมบัฟเฟอร์อาจก่อให้เกิดเป็นส่วนเล็ก ๆ ของบรรทัดในไฟล์ที่ส่งออกที่จะได้รับการแยก / mangled: ไม่ว่าคุณจะเห็นนี้จะขึ้นอยู่กับวิธีการของคุณgrep
, bzgrep
และlibc
stdio.h
ฟังก์ชั่นจะดำเนินการ. ในการใช้งานมากที่สุดผมเชื่อว่าท่อคำสั่งก่อนที่จะเปลี่ยนเส้นทางไปยังไฟล์ที่จะหลีกเลี่ยงปัญหาที่เกิดขึ้นเพื่อให้คุณสามารถทำ{ foo & bar; } | cat - >file
เป็นวิธีแก้ปัญหา.)