Назад | Перейти на главную страницу

Как вывести стандартный вывод как в процесс, так и на экран оболочки

Кто-нибудь знает способ отправить стандартный вывод команды другой команде и отобразить его на экране оболочки? Примечание: без использования файлов.

Пример (в этом случае я использую wc -l, чтобы упростить)

~> echo "test" | wc -l
1

но мне нужно иметь

test
1

Я пробовал команду tee, ожидая, что она это сделает, но она возвращает то же самое

~> echo "test" | tee | wc -l
1

Любые идеи? Спасибо

Вы можете использовать именованный канал с тройником, чтобы добиться цели.

создать именованный канал: mkfifo /tmp/testpipe

используйте tee для дублирования вывода на stdout и pipe: echo "test" | tee /tmp/testpipe

В этот момент ваша команда зависнет, так как к выходу трубы ничего не подключено. Вам нужно запустить в другой оболочке cat /tmp/testpipe | wc -l

Именованный канал - это файл, но он не выполняет ни io диска, ни буферизацию памяти.

Совершенно ясно, как вы хотите отформатировать вывод. Даже если вы используете tee вывод будет перенаправлен на wc -l. Итак, вы не увидите результат echo.

Я могу придумать обходной путь, чтобы отправить оба echo выход и wc -l к терминалу, отправив один stdout и stderr с помощью:

$ echo "test" | tee /dev/stderr | wc -l
test
1

Таким образом, вы оба отправите на свой терминал через stdout и stderr.

Идея использования именованных каналов, опубликованная @DukeLion, также хороша.