Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Detection d'une touche en script shell
Envoyé par: panthere noire

Bonjours
Je cherche a detecter l'appuis d'une touche.
j'ais bien trouvé 2 exemple, mai il gèle le reste du code j'usqu' a que la touche n' est pas apuiyée.

ce qui me pose problème : voici le code que j'ai trouver
#!/bin/bash
# keypress.sh : Détecte un appui sur une touche ("hot keys").

echo "start"

#ancienne_config_tty=$(stty -g) # Sauvegarde de l'ancienne configuration (pourquoi ?).
stty -icanon
Appui_touche=$(head -c1) # ou $(dd bs=1 count=1 2> /dev/null)
# sur les systčmes non-GNU
echo "en cour"
echo
echo "La touche est \""$Appui_touche"\"."
echo

#stty "$ancienne_config_tty" # Restaure l'ancienne configuration.

# Merci, Stephane Chazelas.

exit 0


Code suivant

#!/bin/bash
# dd-keypress.sh
#+ Capture des touches clavier sans avoir besoin d'appuyer sur ENTER.


touches_appuyees=4 # Nombre de touches ŕ capturer.


ancien_parametrage_du_tty=$(stty -g) # Sauve l'ancienne configuration du terminal.

echo "Appuyez sur $touches_appuyees touches."
stty -icanon -echo # Désactive le mode canonique.
echo "info 1" # Désactive l'echo local.
touches=$(dd bs=1 count=$touches_appuyees 2> /dev/null)
# 'dd' utilise stdin si "if" (input file, fichier en entrée) n'est pas spécifié.
echo "info 2"
stty "$ancien_parametrage_du_tty" # Restaure l'ancien paramčtrage du terminal.

echo "Vous avez appuyé sur les touches \"$touches\"."

# Merci, Stéphane Chazelas, pour avoir montré la façon.
exit 0



Ce que je cherche a faire.

j'ais une boucle qui tourne et quand l'utilisateur apuiye sur la touche e (exit)
sa quitte la boucle

merci d'avance

Poste le Wednesday 18 October 2006 11:00:38
Répondre     Citer    
Re: Detection d'une touche en script shell

A mon avis ce genre de choses ne se codent pas en shell....

Pourquoi ne pas utiliser un autre langage de script, par exemple qui interface ncurses ou bien readline (Ruby, Ocaml, Perl, Python, ...)?

Chaque tâche a son outil, et pour le but initial, le shell n'est pas le meilleur indiqué.


Toutefois, zsh a des possibilité de lecture d'une seule touche.....

----

Basile STARYNKEVITCH

Membre de l'APRIL « promouvoir et défendre le logiciel libre » - adhérez vous aussi à l'APRIL!

Projet logiciel libre: RefPerSys

Poste le Wednesday 18 October 2006 19:40:21
Répondre     Citer    
Re: Detection d'une touche en script shell
Envoyé par: panthere noire

Merci d'avoire répondu bon je vai essayer de contouner le problème en crée un sous process qui va attendre la touche et qui quand il ce termine re-donne la main aux premier a l'aide des touches ctrl + c
j'espere juste que sa va pas stopper tout le soft mai juste le sous prog smiling smiley

Poste le Wednesday 18 October 2006 20:21:49
Répondre     Citer    
Re: Detection d'une touche en script shell
Envoyé par: oudoubah

Tu peux utiliser un sous process qui attend la main comme tu le dis.
Ensuite, ce sous process envoit un signal au process principal (kill -SIGUSR1 pid_process)

Dans le process, tout au début, tu utilises la commande trap pour déclencher une action lorsque tu reçois le signal en question (lancement de commandes ou d'une fonction)

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Friday 20 October 2006 08:23:37
Répondre     Citer    
Re: Detection d'une touche en script shell
Envoyé par: panthere noire

Je me suis finalment tourner du coter du C ];-)
Et des sources de cpulimit ];-)
Et qui semble déjà pas mal marcher merci encore smiling smiley

Poste le Sunday 22 October 2006 08:23:08
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Detection d'une touche en script shell
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons