Ответы:
Вы можете позвонить еще execраз, чтобы восстановить оригинальные дескрипторы. Вам нужно их где-то сохранить.
exec 3>&1 4>&2 1>script.log 2>&1
… logged portion …
exec 1>&3 2>&4
echo >&2 "Done"
Внутри зарегистрированной части вы можете использовать исходные дескрипторы для одной команды, перенаправив на дополнительные дескрипторы.
echo "30 seconds remaining" >&3
Кроме того, вы можете поместить зарегистрированную часть вашего скрипта в составную команду и перенаправить эту составную команду. Это не работает, если вы хотите использовать оригинальные дескрипторы в ловушке где-то внутри этой перенаправленной части.
{
… logged portion …
} >script.log 2>&1
echo >&2 "Done"
Используйте дополнительные fd 3 и 4 для stdout и stderr и просто перенаправьте 1 и 2 на них в конце вашего скрипта:
exec 3>&1 4>&2
exec >script.log 2>&1
echo "Some code"
exec >&3 2>&4
echo "Done"
exec 3>/dev/stdout 4>/dev/stderr -bash: /dev/stdout: Permission denied
Сначала вы должны проверить, есть ли у вас tty вообще.
if tty -s; then
echo "Hello, World" > $(tty)
fi
ttyутилиту. Вы можете перенаправить на специальное устройство /dev/tty.
>&3повторить это, делает это моим предпочтительным решением. Еще раз спасибо)!