24

Как я могу направить вывод одной команды одновременно с вводом двух других команд?

2 ответа2

53

Похоже, команда 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 . Файл hidden-files будет иметь содержимое из вывода первого grep , а normal-files будут иметь результаты второго grep . Все файлы будут отображаться в пейджере less . РЕДАКТИРОВАТЬ: то, что вы видите в less это точно такой же вывод ls -A , а не результат grep s. Если вы хотите изменить вывод с ls -A на less (например, поменять порядок, чтобы обычные файлы были перечислены перед скрытыми), попробуйте следующее:

ls -A | tee >(grep ^[.]) >(grep -v ^[.]) >/dev/null | less

Без >/dev/null вывод grep s будет добавлен к выводу ls -A вместо его замены.

источник

6

Используйте "тройник".

Пример:

grep someSearchString someFile | tee /dev/tty | wc -l > grepresult

Это отправит вывод команды grep как на терминал, так и на wc (чей вывод в свою очередь перенаправляется в файл grepresult).

"Тройник" объясняется в статье Википедии (команда). Центральное значение таково: «Команда tee читает стандартный ввод, затем записывает его содержимое в стандартный вывод и одновременно копирует его в указанный файл (ы) или переменные».

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .