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