From cb694cc96aa241d7363ae839cb4bfafecb368c2a Mon Sep 17 00:00:00 2001 From: denis Date: Thu, 21 May 2026 10:53:21 +0000 Subject: [PATCH] fix(web-install): tolerate missing /dev/tty in non-interactive curl|bash --- web-install.sh | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/web-install.sh b/web-install.sh index 0fdbc9d..ffa2dcf 100755 --- a/web-install.sh +++ b/web-install.sh @@ -91,10 +91,15 @@ say "delegating to $KEISEI_ROOT/bootstrap.sh ${PASS_THROUGH[*]:-}" cd "$KEISEI_ROOT" # curl|bash сценарий: stdin = pipe от curl, поэтому wizard'у read нечего читать. -# Если есть /dev/tty (т.е. сессия реально интерактивная), переподключаем stdin +# Если /dev/tty реально ОТКРЫВАЕТСЯ (сессия интерактивная), переподключаем stdin # к терминалу — иначе onboarding/whiptail падают на первом prompt. -# audit 2026-05-18 bug #4. -if [ -r /dev/tty ] && [ ! -t 0 ]; then +# ВАЖНО: `[ -r /dev/tty ]` недостаточно — путь может stat'иться readable, но +# `exec < /dev/tty` падает с "No such device or address" когда нет управляющего +# терминала (ssh non-interactive, CI, cron). Поэтому пробуем реально открыть его +# через `{ : < /dev/tty; }` и реаттачим ТОЛЬКО при успехе. Иначе установка идёт +# неинтерактивно (рассчитано на --yes / KEISEI_SKIP_ONBOARD). +# audit 2026-05-18 bug #4; non-TTY e2e fix 2026-05-21. +if [ ! -t 0 ] && { : < /dev/tty; } 2>/dev/null; then exec < /dev/tty fi