From aea7459f02100e82e2e7e55cd2ab4b3e246eec77 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 16 Mar 2026 05:52:37 +0000 Subject: [PATCH] =?UTF-8?q?f7hpb.sh:=20=D0=BD=D0=B5=20=D0=B2=D1=8B=D0=B7?= =?UTF-8?q?=D1=8B=D0=B2=D0=B0=D1=82=D1=8C=20read=20=D0=B1=D0=B5=D0=B7=20TT?= =?UTF-8?q?Y=20=E2=80=94=20=D1=83=D0=B1=D1=80=D0=B0=D1=82=D1=8C=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B2=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=20=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B5=20=D0=B8?= =?UTF-8?q?=D0=B7=20=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82=D0=B0/SSH?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- f7hpb.sh | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) 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