bash-script: Prompt ohne Bestätigung durch Return

bash-script: Prompt ohne Bestätigung durch Return

de > scratchpad > bash-prompt-ohne-bestatigung-durch-return

Mit der Bash ein Menü zu bauen, dass schon beim Drücken einer Taste und nicht erst nach Bestätigung durch [RETURN] reagiert ist möglich, aber kaum dokumentiert. Was unter DOS dem Verhalten vom Kommando choice entspricht, hier als Bash-script:

#!/bin/bash
# flush reads characters as long as characters are available
function flush()
{
  while [[ true ]]; do
    read -t0
    case $? in
      0) read -n1 ;;
      *) break    ;;
    esac;
  done;
}

while [ not $CHOICE ]; do
  flush
  read -n1 -s -p"[1,2,(3)] " CHOICE
  case $CHOICE in
    1) echo "selection 1"; break ;;
    2) echo "selection 2"; break ;;
    'q') break ;;
    *) unset CHOICE ;;
  esac
  echo
done

Zeile 3 leert den Eingabepuffer: Alle Eingaben zuvor sind vergeben und vergessen.

Zeile 4

-n1 sorgt dafür, dass read schon beim ersten Zeichen abgebrochen wird.

-s (=silent) macht, dass die Eingabe nicht angezeigt wird

-p zeigt eine Zeichenkette als prompt an. Das könnten wir auch mit einem vorgeschalteten echo erledigen, aber dann bräuchten wir auch dann den Parameter -n, damit kein newline davor landet.

top