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

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

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

~> echo "test" | wc -l
1

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

test
1

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

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

Есть идеи? Спасибо

2 ответа

Решение

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

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

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

Таким образом, вы оба будете отправлены на ваш терминал через stdout а также stderr,

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

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

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

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

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

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

Другие вопросы по тегам