Можно ли перенаправить все выходные данные сценария оболочки Bourne куда-нибудь, но с помощью команд оболочки внутри самого сценария?
Перенаправить вывод одной команды легко, но я хочу что-то вроде этого:
#!/bin/sh
if [ ! -t 0 ]; then
# redirect all of my output to a file here
fi
# rest of script...
Значение: если скрипт запускается не в интерактивном режиме (например, cron), сохраните все данные в файле. Если он запускается в интерактивном режиме из оболочки, пусть вывод идет в стандартный вывод.
Я хочу сделать это для скрипта, обычно запускаемого периодической утилитой FreeBSD. Это часть ежедневной работы, которую я, как правило, не хочу видеть каждый день в электронной почте, поэтому мне ее не отправляют. Однако, если что-то внутри этого конкретного сценария не работает, это важно для меня, и я хотел бы иметь возможность собирать и отправлять по электронной почте результаты этой части ежедневных заданий.
Обновление: ответ Джошуа точный, но я также хотел сохранить и восстановить stdout и stderr по всему сценарию, что делается так:
# save stdout and stderr to file descriptors 3 and 4, then redirect them to "foo"
exec 3>&1 4>&2 >foo 2>&1
# ...
# restore stdout and stderr
exec 1>&3 2>&4
exec 1>&3 2>&4 3>&- 4>&-