1

У меня есть скрипт bash, где я перенаправляю вывод в файл для регистрации.

if test -t 1; then
    # stdout is a terminal
    exec > $OUTPUT_FILE 2>&1
else
    # stdout is not a terminal, no logging.
    false     
fi 

У меня есть одно место позже, где мне действительно нужен вывод для перехода на стандартный вывод. Есть ли способ переопределить только один вызов, чтобы заставить это?

echo test 1>

1 ответ1

3

Вы можете поместить эту строку ранее в свой скрипт:

exec 3>&1

Затем всякий раз, когда вам нужно отправить что-то, чтобы перейти на стандартный вывод:

echo "this goes to stdout" 1>&3

Очистка:

exec 1>&3
echo "now goes to normal stdout"
exec 3>&-  #to remove fd3

Как это работает, вы определяете новый файловый дескриптор 3, и он указывает на то же место, что и стандартный вывод. Затем вы перенаправляете стандартный вывод по мере необходимости, но fd3 остается таким же, каким он был (который является вашим терминалом). Когда вы закончите, просто удалите fd3!

Редактировать:

Если вы хотите, чтобы вывод шел как в ваш файл, так и в "классический stdout", сделайте следующее:

echo "goes both places" | tee -a $OUTPUT_FILE 1>&3

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .