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.