f7hpb.sh: не вызывать read без TTY — убрать зависание при запуске из скрипта/SSH

This commit is contained in:
root 2026-03-16 05:52:37 +00:00
parent 40ec91d363
commit aea7459f02

View File

@ -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
if is_interactive; then
read -rp "$prompt: " val
[ -z "$val" ] && { log_error "Переменная $name не задана."; exit 1; }
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