Як я можу передавати вихід однієї команди на вхід двох інших команд одночасно?
Як я можу передавати вихід однієї команди на вхід двох інших команд одночасно?
Відповіді:
Здається, що tee
команда зробить те, що ви хочете.
Ключовим є використання
>( )
для процесу заміщення . З tee
, використовуйте наступний шаблон:
tee >(proc1) >(proc2) >(proc3) | proc4
Тож якщо ви хочете використовувати вихід у ls
якості вхідних даних для двох різних grep
програм, збережіть вихід кожного grep
з різних файлів і перекажіть усі результати less
, спробуйте:
ls -A | tee >(grep ^[.] > hidden-files) >(grep -v ^[.] > normal-files) | less
Результати ls -A
заповіту будуть "прокладені" в обидва grep
s. Файл hidden-files
матиме вміст з виводу першого grep
, а normal-files
також матиме результати другого grep
. Усі файли будуть показані в пейджері EDIT : що ви бачите less
.less
це точно такий же вихід з ls -A
, а не результат grep
с. Якщо ви хочете змінити вихід з ls -A
на less
(наприклад, поміняти порядок, щоб звичайні файли були перелічені перед прихованими), то спробуйте це:
ls -A | tee >(grep ^[.]) >(grep -v ^[.]) >/dev/null | less
Без >/dev/null
цього вихід grep
s буде доданий до виходу ls -A
замість того, щоб замінити його.
Використовуйте «трійник».
Приклад:
grep someSearchString someFile | tee /dev/tty | wc -l > grepresult
Це надішле висновок команди grep як на термінал, так і на wc (вихід якого в свою чергу переспрямований на файл grepresult).
"Трійник" пояснюється у статті Вікіпедії tee (команда) . Центральним є: "Команда tee читає стандартний вхід, потім записує його вміст на стандартний вихід і одночасно копіює його у вказаний файл (и) або змінні."