Извините, если это глупый вопрос, но я пытаюсь сделать что-то вроде этого, но в одной строке:
$ prog1 | prog2
$ prog1 | prog3
Итак, я в основном хочу выполнить prog1 и направить вывод в prog2 и prog3 отдельно (не в цепочку). Сначала я пытался использовать tee, но это казалось неправильным, потому что он выводил вывод в файл (а это не то, что мне нужно).
$ prog1 | tee prog2 | prog3 # doesn't work - creates file "prog2"
В какой-то момент я, возможно, захочу расширить это, чтобы передать вывод более чем двум программам, но сейчас я просто начинаю с простого.
$ prog1 | prog2
$ prog1 | prog3
$ prog1 | prog4
...
Ответы:
Процесс замещения.
источник
Подобно ответу Игнасио, вы можете использовать временный именованный канал, используя
mkfifo(1)
.Это немного более многословно, но будет работать в системах, в которых нет замены процесса, например
dash
. Этоsleep 1
для обработки любых условий гонки.источник
Существует небольшая утилита PTEE , которая делает работу:
Вместо записи в файлы ptee записывает все файлы, которые указаны в командной строке.
Ptee является частью pipexec .
источник
Вам не нужны никакие файлы или специальные файлы или что-то подобное - в любом случае, не в Linux:
Я пометил результаты,
grep
выделенные для меня, чтобы показать, что они были не только тремя результатами из одного потока, но и результатом отдельныхgrep
совпадений процессов.источник