diff --git a/f7hpb.sh b/f7hpb.sh index 9e2f018..f69b39d 100644 --- a/f7hpb.sh +++ b/f7hpb.sh @@ -10,24 +10,29 @@ ERROR_LOG="/tmp/install-error-${ROLE}.log" log_error() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERROR: $*" >> "$ERROR_LOG"; echo "ERROR: $*" >&2; } log_warn() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] WARN: $*" >> "$ERROR_LOG"; echo "WARN: $*" >&2; } -# Два режима: если переменная передана (не пустая) — использовать; иначе — запросить ввод. +# Интерактивен ли stdin (терминал). Без TTY read зависает при запуске из скрипта/SSH. +is_interactive() { [ -t 0 ]; } + +# Два режима: если переменная передана (не пустая) — использовать; иначе — запросить ввод (только при TTY). # Использование: get_var ИМЯ_ПЕРЕМЕННОЙ "Подсказка для пользователя" get_var() { local name="$1" local prompt="$2" local val="${!name}" if [ -z "$val" ]; then - read -rp "$prompt: " val - [ -z "$val" ] && { log_error "Переменная $name не задана."; exit 1; } + if is_interactive; then + read -rp "$prompt: " val + fi + [ -z "$val" ] && { log_error "Переменная $name не задана. Задайте в env-файле, аргументом KEY=value или запустите с TTY."; exit 1; } printf -v "$name" '%s' "$val" fi } -# Опциональная переменная: запрос с возможностью оставить пустым +# Опциональная переменная: запрос с возможностью оставить пустым (только при TTY) get_var_optional() { local name="$1" local prompt="$2" local val="${!name}" - if [ -z "$val" ]; then + if [ -z "$val" ] && is_interactive; then read -rp "$prompt: " val printf -v "$name" '%s' "$val" fi