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