На момент написання цього моменту синтаксис прийнятої відповіді був неправильним для більшості, якщо не всіх оболонок, отриманих Борном, в тому числі bash
. Я запропонував редагувати вгорі і прийняв відповідь, щоб виправити це, але я також схильний був додати всю цю іншу інформацію, і це було б більше переписати замість редагування.
Ви можете використовувати складені команди:
{ grep ...; bzgrep ...; } >file
.. або додаткові оболонки (зверніть увагу на дужки замість фігурних дужок):
(grep ...; bzgrep ...) >file
..групувати команди. Спосіб допоміжної оболонки має приємніший синтаксис (більше прощає відсутність пробілу та дозволяє опустити останню крапку з комою), але він або видобуває новий процес, або "робить вигляд", виконуючи команди в очищеному середовищі. Обидва мають переваги залежно від того, що ви хочете зробити, але тут не важливо, але варто шукати, якщо ви хочете більше володіти оболонкою.
Примітка: Ви також можете використовувати конвеєрне з'єднання з цими хитрощами, щоб ви могли зробити щось подібне:
{ grep ...; bzgrep ...; } | less
PS якщо ви не дбаєте про впорядкування матчів у вашій сукупної продукції, ви можете використовувати один &
між двома командами, наприклад , так: { grep ... & bzgrep ...; }
. Потім дві команди запускаються одночасно: grep
запускається і оболонка ставить її на задній план, тоді оболонка запустить bzgrep
. (Але тут є невеликий застереження, тому що пояснення включають перенаправлення файлів та буферизацію потоку файлів, що потенційно може спричинити розбиття / змішування дуже невеликої частини рядків у вихідному файлі: чи бачите ви, що це залежатиме від того, як ваш grep
, bzgrep
, і libc
stdio.h
функції реалізовані. У більшості реалізацій, я вважаю, що прошивка команди перед перенаправленням у файл дозволить уникнути проблеми, тож ви можете зробити це { foo & bar; } | cat - >file
як вирішення.)