Фон
Я тренируюсь в POSIX сценариях оболочки, пожалуйста, избегайте любых Bashism во время ответа. Спасибо.
Теперь я знаю, благодаря Кусалананде answer , как определить, работает ли мой скрипт в интерактивном режиме, т.е. когда он подключен к stdin
.
Вопрос
Поскольку я редко использую exec
( man-страницу ), я не уверен, правильно ли я делаю следующую идею? Пожалуйста, уточните.
Если скрипт запущен:
в интерактивном режиме : выводить сообщения об ошибках в stderr
, иначе запускаться с настройками среды по умолчанию.
неинтерактивно : перенаправить весь вывод в /dev/null
в этом примере (в конце я, вероятно, захочу перенаправить stdout
и stderr
в актуальные файлы).
Код
# test if file descriptor 0 = standard input is connected to the terminal
running_interactively () { [ -t 0 ]; }
# if not running interactively, then redirect all output from this script to the black hole
! running_interactively && exec > /dev/null 2>&1
print_error_and_exit ()
{
# if running interactively, then redirect all output from this function to standard error stream
running_interactively && exec >&2
...
}