From d1c12dd2b1f61389a0e58013eba44c79b889aec9 Mon Sep 17 00:00:00 2001 From: w1n5t0n Date: Thu, 16 Apr 2026 00:44:52 +0900 Subject: [PATCH] Fix firmware variant prompt TTY detection --- .beads/interactions.jsonl | 2 ++ scripts/firmware-common.sh | 16 ++++++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/.beads/interactions.jsonl b/.beads/interactions.jsonl index 406595f..7e7d577 100644 --- a/.beads/interactions.jsonl +++ b/.beads/interactions.jsonl @@ -2,3 +2,5 @@ {"id":"int-55a0a37d","kind":"field_change","created_at":"2026-04-15T15:32:17.624534929Z","actor":"w1n5t0n","issue_id":"meml-kx6a","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Added firmware helper scripts and updated docs to the RP2350/C++20/O3 build flow"}} {"id":"int-c4271206","kind":"field_change","created_at":"2026-04-15T15:35:23.153751063Z","actor":"w1n5t0n","issue_id":"meml-efb2","extra":{"field":"status","new_value":"in_progress","old_value":"open"}} {"id":"int-4ab84a6f","kind":"field_change","created_at":"2026-04-15T15:37:55.547397813Z","actor":"w1n5t0n","issue_id":"meml-efb2","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Added variant-aware firmware build selection and interactive prompting"}} +{"id":"int-6deafb72","kind":"field_change","created_at":"2026-04-15T15:44:14.681880459Z","actor":"w1n5t0n","issue_id":"meml-zbbs","extra":{"field":"status","new_value":"in_progress","old_value":"open"}} +{"id":"int-fd7690f3","kind":"field_change","created_at":"2026-04-15T15:44:48.605669713Z","actor":"w1n5t0n","issue_id":"meml-zbbs","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Prompt variant selection now uses /dev/tty so interactive shells are detected correctly"}} diff --git a/scripts/firmware-common.sh b/scripts/firmware-common.sh index d5737de..6c572aa 100755 --- a/scripts/firmware-common.sh +++ b/scripts/firmware-common.sh @@ -141,6 +141,7 @@ choose_firmware_variant() { local resolved="" local variant local choice + local tty_fd="" load_firmware_variants @@ -158,30 +159,33 @@ choose_firmware_variant() { exit 1 fi - if [[ -t 0 && -t 1 ]]; then - echo "Select a firmware variant to build:" + if exec {tty_fd}<>/dev/tty 2>/dev/null; then + printf 'Select a firmware variant to build:\n' >&"$tty_fd" local idx=1 for variant in "${FIRMWARE_VARIANTS[@]}"; do if [[ "$variant" == "$ACTIVE_FIRMWARE_VARIANT" ]]; then - echo " $idx) $(variant_alias "$variant") ($variant, current)" + printf ' %d) %s (%s, current)\n' "$idx" "$(variant_alias "$variant")" "$variant" >&"$tty_fd" else - echo " $idx) $(variant_alias "$variant") ($variant)" + printf ' %d) %s (%s)\n' "$idx" "$(variant_alias "$variant")" "$variant" >&"$tty_fd" fi idx=$((idx + 1)) done while true; do - read -r -p "Variant number or name: " choice + printf 'Variant number or name: ' >&"$tty_fd" + IFS= read -r -u "$tty_fd" choice if [[ "$choice" =~ ^[0-9]+$ ]]; then if (( choice >= 1 && choice <= ${#FIRMWARE_VARIANTS[@]} )); then + exec {tty_fd}>&- printf '%s\n' "${FIRMWARE_VARIANTS[choice-1]}" return 0 fi elif resolved="$(resolve_firmware_variant "$choice" 2>/dev/null)"; then + exec {tty_fd}>&- printf '%s\n' "$resolved" return 0 fi - echo "Invalid selection. Enter a number from the list or a variant name." + printf 'Invalid selection. Enter a number from the list or a variant name.\n' >&"$tty_fd" done fi