Tại thời điểm tôi viết bài này, cú pháp của câu trả lời được chấp nhận là sai đối với hầu hết, nếu không phải tất cả, các vỏ có nguồn gốc Bourne, bao gồm cả bash
. Tôi đã đề xuất một chỉnh sửa lên đầu và chấp nhận câu trả lời để khắc phục điều đó, nhưng tôi cũng có xu hướng thêm tất cả các thông tin khác này và điều này sẽ được viết lại nhiều hơn thay vì chỉnh sửa.
Bạn có thể sử dụng các lệnh ghép:
{ grep ...; bzgrep ...; } >file
.. hoặc subshells (lưu ý dấu ngoặc đơn thay vì dấu ngoặc nhọn):
(grep ...; bzgrep ...) >file
.. để nhóm các lệnh. Cách thức con có cú pháp đẹp hơn (tha thứ hơn cho việc thiếu khoảng trắng và cho phép bạn bỏ qua dấu chấm phẩy cuối cùng), nhưng nó sẽ tạo ra một quy trình mới hoặc "giả vờ" bằng cách chạy các lệnh trong môi trường được dọn sạch. Cả hai đều có lợi thế tùy thuộc vào những gì bạn muốn làm, điều này không quan trọng ở đây, nhưng đáng để tìm kiếm nếu bạn muốn thành thạo hơn với vỏ.
Lưu ý: Bạn cũng có thể sử dụng pipelining với các thủ thuật này, vì vậy bạn có thể làm một cái gì đó như thế này:
{ grep ...; bzgrep ...; } | less
PS nếu bạn không quan tâm đến thứ tự của các trận đấu trong đầu ra kết hợp của mình, bạn có thể sử dụng một lệnh duy nhất &
giữa hai lệnh, như vậy : { grep ... & bzgrep ...; }
. Sau đó, hai lệnh chạy đồng thời: grep
shell được khởi chạy và shell đặt nó dưới nền, sau đó shell sẽ chạy bzgrep
. (Nhưng có một cảnh báo nhỏ với điều đó, với lời giải thích liên quan đến chuyển hướng tệp và bộ đệm luồng tệp có khả năng khiến một phần rất nhỏ các dòng trong tệp đầu ra bị phân tách / xáo trộn: bạn có thấy điều này phụ thuộc vào cách grep
, bzgrep
và các libc
stdio.h
chức năng được triển khai. Trong hầu hết các triển khai, tôi tin rằng việc đặt lệnh trước khi chuyển hướng đến một tệp sẽ tránh được vấn đề, vì vậy bạn có thể làm { foo & bar; } | cat - >file
như một cách giải quyết.)