Как вывести стандартный вывод как на процесс, так и на экран оболочки
Кто-нибудь знает способ отправить стандартный вывод команды и другой команде и отобразить ее на экране оболочки? Примечание: без использования файлов.
Пример (в этом случае я использую 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
Именованный канал - это файл, но он не будет выполнять ни дисковый ввод, ни буферизацию памяти.