Можно ли передать выходные данные одной команды двум другим командам?

14056
Richard Hoskins

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

23
Да. Посмотрите этот вопрос о стеке потока: http://stackoverflow.com/questions/670784/redirecting-bash-stdout-stderr-to-two-places Blair Conrad 15 лет назад 4

2 ответа на вопрос

52
Ben

Похоже, 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. EDIT : что вы видите lessэто точно такой же выход из ls -A, а не результат grepс. Если вы хотите изменить вывод с ls -Aна less(например, поменять порядок, чтобы обычные файлы были перечислены перед скрытыми), попробуйте следующее:

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

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

источник

это очень хорошо! hayalci 15 лет назад 3
+1 потому что даже после 10 лет написания сценариев я никогда не видел этого! jtimberman 15 лет назад 3
6
Peter Mortensen

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

Пример:

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

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

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

Похожие вопросы