Как подключить stdout, сохраняя его на экране? (а не выходному файлу)

Я хотел бы пропустить стандартный вывод программы, сохраняя ее на экране.

С простым примером (использование echo здесь просто для иллюстрации):

$ echo 'ee' | foo
ee <- вывод, который я хотел бы видеть

Я знаю, что tee может копировать stdout в файл, но это не то, что я хочу.
$ echo 'ee' | tee output.txt | foo

Я пытался
$ echo 'ee' | tee /dev/stdout | foo $ echo 'ee' | tee /dev/stdout | foo но он не работает, так как выход tee в /dev/stdout передается в foo

Вот решение, которое работает в любой версии Unix / Linux, предполагая, что оно должно следовать стандарту POSIX . Он работает в некоторых не-Unix-средах, таких как cygwin .

 echo 'ee' | tee /dev/tty | foo 

Ссылка: базовые спецификации открытой группы Выпуск 7 IEEE Std 1003.1, выпуск 2013 года, §10.1 :

/ DEV / TTY

Связан с группой процессов этого процесса, если таковой имеется. Это полезно для программ или процедур оболочки, которые хотят быть уверенными в написании сообщений или чтении данных с терминала независимо от того, как перенаправлен выход. Он также может использоваться для приложений, требующих имени файла для вывода, когда требуется напечатанный вывод, и очень утомительно выяснить, какой терминал в настоящее время используется. В каждом процессе синоним управляющего терминала

Другое дело:

 echo 'ee' | tee >(foo) 

The >(foo) – это подстановка процесса .

Пытаться:

 $ echo 'ee' | tee /dev/stderr | foo 

Конечно, использование stderr – это вариант.

Доступ к «/ dev / stdout» запрещен в некоторых системах, но доступ к пользовательскому терминалу предоставляется «/ dev / tty». Используя «wc» для «foo», приведенные выше примеры работают нормально (на Linux, OSX и т. Д.) Как:

% echo 'Hi' | tee /dev/tty | wc Hi 1 1 3

Чтобы добавить счет в нижней части списка совпадающих файлов, я использую что-то вроде:
% ls [AJ]* | tee /dev/tty | wc -l

Чтобы избежать необходимости запоминать все это, я определяю псевдонимы:
% alias t tee /dev/tty
% alias wcl wc -l

так что я могу просто сказать:
% ls [AJ]* | t | wcl


POSTSCRIPT: для младшего набора, который мог бы произносить на свое произношение как «титти», я мог бы добавить, что «tty» когда-то было общей аббревиатурой термина «телетайп», в котором использовался рулон желтой бумаги и круглые клавиши, которые часто застрял.

сначала вам нужно выяснить терминал, связанный с вашим экраном (или в зависимости от того, какой экран вы хотите отображать на выходе):

 tty 

то вы можете выполнить вывод на этот терминал и передать другую копию через вашу программу foo:

 echo ee | tee /dev/pty/2 | foo 
Давайте будем гением компьютера.