IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Shell, lire une entrée clavier


Sujet :

Linux

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Points : 16
    Points
    16
    Par défaut Shell, lire une entrée clavier
    Bonjour,

    J'aimerai savoir s'il y a un moyen de lire une entrée clavier dans un script shell(par exemple la fleche haut) sans que l'utilisateur n'aient à valider avec la touche "Entrée".
    Le but est d'aller lire les commandes saisient par un utilisateur dans un fichier lorsqu'il clique sur une touche du clavier, et les afficher, comme sous une console unix, où quand on tape fleche haut, on voit défiler nos dernières commandes...

    Ceci est-il réalisable.. ?

    Merci,
    Manu

  2. #2
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 681
    Points
    18 681
    Par défaut
    J'avais trouvé cela... mais je n'avais pas encore testé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If you're using sh and want to read a *single* character from the
          terminal, you can try something like
     
                echo -n "Enter a character: "
                stty cbreak         # or  stty raw
                readchar=`dd if=/dev/tty bs=1 count=1 2>/dev/null`
                stty -cbreak
     
                echo "Thank you for typing a $readchar ."

    dis moi le résultat... ça devrait bientôt me servir

  3. #3
    Membre éclairé Avatar de Tuxico
    Profil pro
    Étudiant
    Inscrit en
    Août 2003
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2003
    Messages : 662
    Points : 770
    Points
    770
    Par défaut
    oui ce script marche parfaitement je l'avais utilisé à peu près de la même façon pour un menu console

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    Effectivement, il marche super bien!

    Mon seul problème c'est comment le mélanger avec une lecture normal (là j'en demande un peu trop peut etre... lol ). En effet, je voudrais que quand on tape une commande on puisse valider (genre who puis "entrée") mais si cette commande est une touche spécifique (genre fleche haut ou lettre R si ca simplifie) alors il n'y ait pas besoin de validation pour executer un script ...

    actuellement j'ai :

    echo "$nom@$mac>"; read cmd
    set $cmd

    case $1 in
    welcome ) echo "***** Bienvenue dans le reseau de
    machines vituelles *****" ;;
    help ) ksh ./Files/help $*;;
    who ) cat ./Files/journal | grep -e "!$mac!.*!
    Connected" ;;
    Et il faudrait que quand l'utilisateur rentre R ou fleche haut pour cmd ca execute un script (ou une action) sans qu'il est besoin de tapé sur entrée...

    Ca m'a l'air super lourd quand même, vous avez le droit de briser mes reves si ca semble impossible...

    Merci,
    Manu

  5. #5
    Membre éclairé Avatar de Tuxico
    Profil pro
    Étudiant
    Inscrit en
    Août 2003
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2003
    Messages : 662
    Points : 770
    Points
    770
    Par défaut
    il faut récupérer le code ascii de la touche en question et déclarer des constantes

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    Je suis novice dans le domaine, pour ce qui est du code ascii, ce n'est pas un problème, imaginons que je prenne le r (code 114), mais que veux tu dire par, déclarer des constantes, et comment fait en sorte que dans mon case, il ne faille pas faire entrée pour r (stty cbreak ... comme dis ci dessus) mais que pour une commande who, il faille faire entrée ?

    Ca serait vraiment génial si c'était possible...

  7. #7
    Membre éclairé Avatar de Tuxico
    Profil pro
    Étudiant
    Inscrit en
    Août 2003
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2003
    Messages : 662
    Points : 770
    Points
    770
    Par défaut
    avec une déclaration de mots-clés (who,...) qui attendent l'entrée clavier suivie de enter

  8. #8
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 681
    Points
    18 681
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tmp=`echo $tmp`$readchar
     
    case $readchar
    '\n' ...

  9. #9
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    Ca serait possible d'avoir des précisions sur vos deux derniers post svp,

    Je sais que là, ca va faire inculte, mais
    comment déclarer des mots clés et leur dire qu'ils attendent l'entrée clavier suivie de entrée...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tmp=`echo $tmp`$readchar
     
    case $readchar
    '\n' ...
    A quoi sert ce code, comment le mixer à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    stty cbreak 
    readchar=`dd if=/dev/tty bs=1 count=1 2>/dev/null`
    stty cbreak
    Comme ca ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    echo -n "Enter a character: "
    tmp=`echo $tmp`$readchar
    stty cbreak         # or  stty raw
    readchar=`dd if=/dev/tty bs=1 count=1 2>/dev/null`
    stty -cbreak
    case $readchar in 
     who ))
     114 ))

Discussions similaires

  1. Comment lire une entrée clavier pour une variable StringBuffer ?
    Par Haktarus dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 16/06/2014, 16h19
  2. [Débutant] lire une valeur numérique au clavier
    Par cherifamc dans le forum C#
    Réponses: 1
    Dernier message: 28/10/2011, 11h25
  3. Lire une entrée clavier
    Par Azael dans le forum Groovy
    Réponses: 4
    Dernier message: 15/12/2010, 15h27
  4. Shell : Lire une ligne sur N
    Par CSIE_Angel#5 dans le forum Linux
    Réponses: 3
    Dernier message: 02/10/2008, 14h47
  5. Lire une variable saisie au clavier JAVA
    Par racoboss dans le forum Eclipse Java
    Réponses: 8
    Dernier message: 13/11/2007, 15h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo