Я хотел бы передать стандартный вывод программы, сохраняя ее на экране.
С простым примером ( echo
используйте здесь только для иллюстрации):
$ echo 'ee' | foo
ee
<- вывод, который я хотел бы увидеть
Я знаю, что можно скопировать стандартный вывод в файл, но это не то, что я хочу.
$ echo 'ee' | tee output.txt | foo
Я пытался,
$ echo 'ee' | tee /dev/stdout | foo
но это не работает, так как выход тройника /dev/stdout
кfoo
echo 'ee' | tee /dev/stderr
работает, поэтому, если ваше требование "на экране" удовлетворяется и stderr, это подойдет.Ответы:
Вот решение, которое работает в любой реализации Unix / Linux, при условии, что оно будет следовать
POSIX
стандарту. Это работает в некоторых не Unix средах, какcygwin
тоже.Ссылка: Открытая группа базовых спецификаций, выпуск 7 IEEE Std 1003.1, издание 2013 г., §10.1 :
Сообщалось, что некоторые среды, такие как Google Colab, не реализуются,
/dev/tty
хотя ихtty
команда возвращает работоспособное устройство. Вот обходной путь:или с древней скорлупой Борна:
источник
/dev/tty
- обязательное устройство Unix. Вы работаете в тюрьме BSD?tee
это следующим образом:cat some.log | tee /dev/tty | tee -a other.log | grep -i 'foo' >> foo.log
1) получить все это на консоли, 2)foo
добавить все это в другой файл, 3) получить строки в другой файл./dev/tty
, но выводtty
можно использовать.Еще одна вещь, чтобы попробовать это:
>(foo)
Является замена процесса .источник
foo
должна быть частью процесса замещения. Вот пример:echo 'ee' | tee file.txt >(wc -c | tr -d ' ')
echo 'ee' | tee >(cat) | foo | bar
.Доступ к "/ dev / stdout" запрещен в некоторых системах, но доступ к пользовательскому терминалу предоставляется "/ dev / tty". Используя "wc" для "foo", приведенные выше примеры работают нормально (на linux, OSX и т. Д.) Как:
Чтобы добавить счетчик внизу списка подходящих файлов, я использую что-то вроде:
% ls [A-J]* | tee /dev/tty | wc -l
Чтобы избежать необходимости помнить все это, я определяю псевдонимы:
% alias t tee /dev/tty
% alias wcl wc -l
так что я могу просто сказать:
% ls [A-J]* | t | wcl
источник
Пытаться:
Если использование stderr это вариант, конечно.
источник
сначала вам нужно выяснить терминал, связанный с вашим экраном (или любым экраном, на котором вы хотите выводить вывод):
затем вы можете передать вывод на этот терминал и передать другую копию через вашу программу foo:
источник
t
бесполезно. Вы можете использовать,echo ee | tee $(tty) | foo
но он по-прежнему имеет бесполезную команду (tty
), учитывая тот факт,/dev/tty
что просто работает.