@@ -297,9 +297,28 @@ cmd_home() {
297297 printf " Enter key/name to run (blank to return): "
298298 read -r runkey
299299 if [[ -n " $runkey " ]]; then
300- printf " Extra args (after --), or blank: "
301- read -r extra
302- if [[ -n " $extra " ]]; then cmd_run " $runkey " -- $extra ; else cmd_run " $runkey " ; fi
300+ # Pre-resolve here to surface ambiguities before asking for extra args
301+ local candidates chosen
302+ candidates=" $( resolve_script_by_key_or_name " $runkey " ) "
303+ if [[ -z " $candidates " ]]; then
304+ echoerr " No matches for '$runkey '"
305+ :
306+ elif [[ " $( printf ' %s\n' " $candidates " | wc -l) " -gt 1 ]]; then
307+ chosen=" $( printf ' %s\n' " $candidates " | choose_interactively) " || chosen=" "
308+ if [[ -z " $chosen " ]]; then
309+ echowarn " Selection canceled"
310+ :
311+ else
312+ printf " Extra args (after --), or blank: "
313+ read -r extra
314+ if [[ -n " $extra " ]]; then cmd_run " $chosen " -- $extra || true ; else cmd_run " $chosen " || true ; fi
315+ fi
316+ else
317+ chosen=" $candidates "
318+ printf " Extra args (after --), or blank: "
319+ read -r extra
320+ if [[ -n " $extra " ]]; then cmd_run " $chosen " -- $extra || true ; else cmd_run " $chosen " || true ; fi
321+ fi
303322 fi
304323 ;;
305324 2)
@@ -308,25 +327,47 @@ cmd_home() {
308327 if [[ -n " $q " ]]; then
309328 resolved=" $( resolve_script_by_key_or_name " $q " ) "
310329 if [[ -z " $resolved " ]]; then echoerr " No matches" ; else
311- chosen=" $( printf ' %s\n' " $resolved " | choose_interactively) "
312- [[ -n " $chosen " ]] && cmd_run " $chosen "
330+ chosen=" $( printf ' %s\n' " $resolved " | choose_interactively) " || chosen=" "
331+ if [[ -n " $chosen " ]]; then
332+ printf " Extra args (after --), or blank: "
333+ read -r extra
334+ if [[ -n " $extra " ]]; then cmd_run " $chosen " -- $extra || true ; else cmd_run " $chosen " || true ; fi
335+ else
336+ echowarn " Selection canceled"
337+ fi
313338 fi
314339 fi
315340 ;;
316341 r|R)
317342 printf " Enter key/name to run: "
318343 read -r runkey
319344 if [[ -n " $runkey " ]]; then
320- printf " Extra args (after --), or blank: "
321- read -r extra
322- if [[ -n " $extra " ]]; then cmd_run " $runkey " -- $extra ; else cmd_run " $runkey " ; fi
345+ local candidates chosen
346+ candidates=" $( resolve_script_by_key_or_name " $runkey " ) "
347+ if [[ -z " $candidates " ]]; then
348+ echoerr " No matches for '$runkey '"
349+ elif [[ " $( printf ' %s\n' " $candidates " | wc -l) " -gt 1 ]]; then
350+ chosen=" $( printf ' %s\n' " $candidates " | choose_interactively) " || chosen=" "
351+ if [[ -z " $chosen " ]]; then
352+ echowarn " Selection canceled"
353+ else
354+ printf " Extra args (after --), or blank: "
355+ read -r extra
356+ if [[ -n " $extra " ]]; then cmd_run " $chosen " -- $extra || true ; else cmd_run " $chosen " || true ; fi
357+ fi
358+ else
359+ chosen=" $candidates "
360+ printf " Extra args (after --), or blank: "
361+ read -r extra
362+ if [[ -n " $extra " ]]; then cmd_run " $chosen " -- $extra || true ; else cmd_run " $chosen " || true ; fi
363+ fi
323364 fi
324365 ;;
325- 3) cmd_run health/check; ;;
326- 4) cmd_run system-maintenance/update-and-report -- --dry-run; ;;
327- 5) cmd_install_runner --user; ;;
328- 6) cmd_overview; ;;
329- 7) cmd_setup_motd; ;;
366+ 3) cmd_run health/check || true ; ;;
367+ 4) cmd_run system-maintenance/update-and-report -- --dry-run || true ; ;;
368+ 5) cmd_install_runner --user || true ; ;;
369+ 6) cmd_overview || true ; ;;
370+ 7) cmd_setup_motd || true ; ;;
330371 q|Q|" " ) break ;;
331372 * ) echoerr " Unknown choice" ;;
332373 esac
@@ -403,10 +444,14 @@ choose_interactively() {
403444 printf " [%d] %s (%s)\n" " $i " " $key " " $it "
404445 i=$(( i+ 1 ))
405446 done
406- printf " Select [1-%d]: " " $count "
447+ printf " Select [1-%d] (blank cancels) : " " $count "
407448 local sel
408449 read -r sel
409- if [[ -z " $sel " ]] || ! [[ " $sel " =~ ^[0-9]+$ ]] || (( sel < 1 || sel > count )) ; then
450+ if [[ -z " $sel " ]]; then
451+ echowarn " Selection canceled"
452+ return 2
453+ fi
454+ if ! [[ " $sel " =~ ^[0-9]+$ ]] || (( sel < 1 || sel > count )) ; then
410455 echoerr " Invalid selection"
411456 return 2
412457 fi
@@ -951,6 +996,7 @@ main() {
951996 if [[ $no_policy -eq 1 ]]; then env_prefix+=" SOLEN_POLICY=/dev/null" ; fi
952997 # try both flags and env
953998 set +e
999+ [[ -x " $f " ]] || chmod +x " $f " 2> /dev/null || true
9541000 out=$( eval " $env_prefix " " $f " --json --dry-run 2> /dev/null)
9551001 rc=$?
9561002 set -e
0 commit comments