result=`./command 2>&1 | tee output.log | tee /dev/tty`
[править]
Как отметил Н.М. в комментарии, tee
принимает несколько аргументов:
result=`./command 2>&1 | tee output.log /dev/tty`
[второе редактирование]
ЗаимствованиеИдея Криса в комментариях, вы также можете сделать это, чтобы отправить вывод в stderr:
result=`./command 2>&1 | tee /tmp/foo.log >(cat 1>&2)`
Чтобы сделать именно то, что вы хотите, лучшее, что я нашел, это:
exec 3>&1 ; result=`./command 2>&1 | tee /tmp/foo.log >(cat 1>&3)` ; exec 1>&3
(Вся проблема в том, что обратные перенаправления stdout перед выполнением чего-либо внутри. Таким образом, эта строка сохраняет и восстанавливает старый stdout в качестве дескриптора 3, что может быть или не быть хорошей идеей ...)