Мне было интересно, есть ли способ передать вывод команды и направить его на стандартный вывод. Так, например, fortune
печатает печенье с предсказанием, а также копирует его в буфер обмена:
$ fortune | tee >(?stdout?) | pbcopy
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and
the Ugly)."
(By Matt Welsh)
fortune | tee $(tty) | pbcopy
?Ответы:
Ваше предположение:
не будет работать, потому что
fortune
вывод будет записан в стандартный формат дважды, поэтому вы удвоите вывод доpbcopy
.В OSX (и других системах поддержки
/dev/std{out,err,in}
) вы можете проверить это:выведите
2
дважды вместо1
и2
.Вы должны использовать другие файловые дескрипторы, например стандартную ошибку через
/dev/stderr
:или используйте
tty
для получения подключенного псевдотерминала:С
zsh
иmultios
опцией, вам не нужноtee
вообще:источник
tee $(tty)
Или, знаете ли,tee /dev/tty
tee
всегда пишет в свой стандартный вывод. Если вы хотите отправить данные команде в дополнение к терминалу, на котором уже идет стандартный вывод, просто используйте подстановку процесса с этой командой. (Обратите внимание, что, несмотря на начало>
, подстановка процесса не перенаправляет стандартный вывод,tee
команда видит его как параметр.)источник
cuonglm сказал все это.
Просто попробуй:
tty
должен разрешить фактический псевдотерминал (например/dev/pts/99
) в интерактивном сеансе (т. е. в терминале) или не указывать tty в пакете, at и daemon.источник