Можно ли перенаправить все выходные данные оболочки Bourne script куда-нибудь, но с командами оболочки внутри самого script?
Перенаправить вывод одной команды легко, но мне нужно что-то большее:
#!/bin/sh
if [ ! -t 0 ]; then
# redirect all of my output to a file here
fi
# rest of script...
Значение: если script выполняется неинтерактивно (например, cron), сохраните вывод всего файла в файл. Если вы запускаете интерактивно из оболочки, пусть выход идет на стандартный вывод.
Я хочу сделать это для script, обычно запускаемого периодической утилитой FreeBSD. Это часть ежедневного прогона, который обычно мне не нравится каждый день в электронной почте, поэтому я его не отправил. Однако, если что-то внутри этой конкретной script терпит неудачу, это важно для меня, и я хотел бы иметь возможность собирать и отправлять выходные данные этой части ежедневных заданий.
Обновление: ответ Joshua - спот-на, но я также хотел сохранить и восстановить stdout и stderr вокруг всего script, который выполняется следующим образом:
# 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