From 0df89bdff03faccb1a01a614e1b20809ea3c0a6c Mon Sep 17 00:00:00 2001 From: Michael Chus Date: Thu, 23 Apr 2026 21:46:07 +0300 Subject: [PATCH] ops: fix interactive prompts (printf to stderr, no subshell) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit printf шёл в stdout внутри $(...), поэтому prompt не выводился и read висел. Теперь prompt идёт в stderr напрямую. Co-Authored-By: Claude Sonnet 4.6 --- ops/build-image.sh | 22 +++++++++++----------- ops/push-image.sh | 22 +++++++++++----------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/ops/build-image.sh b/ops/build-image.sh index 3327251..a4dca13 100755 --- a/ops/build-image.sh +++ b/ops/build-image.sh @@ -16,14 +16,14 @@ command -v docker >/dev/null 2>&1 || { echo "error: docker not found in PATH" >& DEFAULT_TAG=$(git -C "${ROOT_DIR}" rev-parse --short HEAD 2>/dev/null || echo dev) ask() { - prompt="$1"; default="$2" - if [ -n "$default" ]; then - printf "%s [%s]: " "$prompt" "$default" + # $1 = variable name, $2 = prompt, $3 = default + if [ -n "$3" ]; then + printf "%s [%s]: " "$2" "$3" >&2 else - printf "%s: " "$prompt" + printf "%s: " "$2" >&2 fi - read -r value - echo "${value:-$default}" + read -r _val + eval "$1=\"\${_val:-$3}\"" } if [ $# -ge 3 ]; then @@ -32,12 +32,12 @@ if [ $# -ge 3 ]; then OWNER="$3" elif [ $# -ge 1 ]; then IMAGE_TAG="$1" - REGISTRY=$(ask "Registry" "") - OWNER=$(ask "Owner" "") + ask REGISTRY "Registry" "" + ask OWNER "Owner" "" else - IMAGE_TAG=$(ask "Tag" "${DEFAULT_TAG}") - REGISTRY=$(ask "Registry" "") - OWNER=$(ask "Owner" "") + ask IMAGE_TAG "Tag" "${DEFAULT_TAG}" + ask REGISTRY "Registry" "" + ask OWNER "Owner" "" fi IMAGE_NAME="${IMAGE_NAME:-jukebox-maker}" diff --git a/ops/push-image.sh b/ops/push-image.sh index 43827f3..42ab92f 100755 --- a/ops/push-image.sh +++ b/ops/push-image.sh @@ -22,14 +22,14 @@ docker buildx version >/dev/null 2>&1 || die "docker buildx not available" DEFAULT_TAG=$(git -C "${ROOT_DIR}" rev-parse --short HEAD 2>/dev/null || echo dev) ask() { - prompt="$1"; default="$2" - if [ -n "$default" ]; then - printf "%s [%s]: " "$prompt" "$default" + # $1 = variable name, $2 = prompt, $3 = default + if [ -n "$3" ]; then + printf "%s [%s]: " "$2" "$3" >&2 else - printf "%s: " "$prompt" + printf "%s: " "$2" >&2 fi - read -r value - echo "${value:-$default}" + read -r _val + eval "$1=\"\${_val:-$3}\"" } if [ $# -ge 3 ]; then @@ -38,12 +38,12 @@ if [ $# -ge 3 ]; then OWNER="$3" elif [ $# -ge 1 ]; then IMAGE_TAG="$1" - REGISTRY=$(ask "Registry" "") - OWNER=$(ask "Owner" "") + ask REGISTRY "Registry" "" + ask OWNER "Owner" "" else - IMAGE_TAG=$(ask "Tag" "${DEFAULT_TAG}") - REGISTRY=$(ask "Registry" "") - OWNER=$(ask "Owner" "") + ask IMAGE_TAG "Tag" "${DEFAULT_TAG}" + ask REGISTRY "Registry" "" + ask OWNER "Owner" "" fi IMAGE_NAME="${IMAGE_NAME:-jukebox-maker}"