2012-07-21 1 views
3

Je peux obtenir read -n 1 KEY pour obtenir la plupart des clés, sauf pour les clés qui sont représentées par plusieurs caractères. Par exemple, si j'appuie sur la touche flèche haut:Comment lire une clé dans Bash?

$ read -n 1; echo 
^[[A 
$ [A 

Comme vous pouvez le voir, read ne prend la Esc et la [A qui reste.

Ce que je veux être en mesure de le faire dans un script est:

  1. Go dans une liste avec les touches fléchées et appuyez sur Entrée pour faire quelque chose avec elle
  2. Pour d'autres actions, appuyez différentes clés.
+0

Ncurses est une bibliothèque pour faire de telles interfaces de console: http://stackoverflow.com/questions/7876008/what-ncurses-frameworks-are-available-for-bash –

Répondre

8

Vous feriez mieux d'utiliser dialogue comme jm666 mentionné, mais il y a d'autres façons de la peau ce chat.

read -n 1 x; while read -n 1 -t .1 y; do x="$x$y"; done 

Fondamentalement attendre jusqu'à ce que vous lisez un caractère puis tourner jusqu'à ce que la consommation d'entrée .1 secondes se sont écoulées w/o entrée. Attention, les dactylos rapides peuvent être ennuyés. Vous devrez peut-être modifier ce délai.

+0

Un délai de 0.01 semble fonctionner pour moi. – biggles5107

+2

@ bi99l35: Je suppose que les connexions commutées 2400 bauds sont assez rares, donc cela devrait être sûr. –

+0

Toujours pas bon quand vous copiez et collez du texte. Ensuite, aucun délai d'attente n'est suffisamment rapide pour détecter cela. Nous devrions utiliser le terminfo pour savoir si nous avons une touche multi-octets à portée de main. – Alfe

Questions connexes