f7hpb.sh: не вызывать read без TTY — убрать зависание при запуске из скрипта/SSH
This commit is contained in:
parent
40ec91d363
commit
aea7459f02
13
f7hpb.sh
13
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_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; }
|
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 ИМЯ_ПЕРЕМЕННОЙ "Подсказка для пользователя"
|
||||||
get_var() {
|
get_var() {
|
||||||
local name="$1"
|
local name="$1"
|
||||||
local prompt="$2"
|
local prompt="$2"
|
||||||
local val="${!name}"
|
local val="${!name}"
|
||||||
if [ -z "$val" ]; then
|
if [ -z "$val" ]; then
|
||||||
|
if is_interactive; then
|
||||||
read -rp "$prompt: " val
|
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"
|
printf -v "$name" '%s' "$val"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
# Опциональная переменная: запрос с возможностью оставить пустым
|
# Опциональная переменная: запрос с возможностью оставить пустым (только при TTY)
|
||||||
get_var_optional() {
|
get_var_optional() {
|
||||||
local name="$1"
|
local name="$1"
|
||||||
local prompt="$2"
|
local prompt="$2"
|
||||||
local val="${!name}"
|
local val="${!name}"
|
||||||
if [ -z "$val" ]; then
|
if [ -z "$val" ] && is_interactive; then
|
||||||
read -rp "$prompt: " val
|
read -rp "$prompt: " val
|
||||||
printf -v "$name" '%s' "$val"
|
printf -v "$name" '%s' "$val"
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user