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 :

problème dans un script shell : utilisation des flèches directionnelles


Sujet :

Linux

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Points : 85
    Points
    85
    Par défaut problème dans un script shell : utilisation des flèches directionnelles
    Alors voilà, j'ai le script suivant :


    #!/bin/bash
    stty erase ^H

    read variable

    echo "$variable"
    exit 0;


    le problème, c'est que si l'utilisateur fait une faute de frappe, il ne peux pas revenir en arrière pour corriger (au début j'avais le mm problème avec le backspace, mais je l'ai fixé avec stty erase ^H )

    Donc en gros, j'aimerais trouver un moyen de corriger un bout de la chaine de caractère sans avoir à tout effacer.

    Voilà, je sais pas si j'ai été bien clair, mais merci d'avance pour votre aide.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    Il ne me semble pas que cela est possible, tu peux supprimer un caractère, un mot, une ligne comme tu l as fait mais pas se déplacer dans un read


    après je sais pas quel est ton but mais tu peux toujours mettre ta lecture parmi tes arguments et là tu pourras te déplacer, supprimer ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/bash
     
    variable=$*
    echo "$variable"
    exit 0;
    => script.sh voici le test
    voici le test

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Points : 85
    Points
    85
    Par défaut
    Merci pour ta réponse, mais ce n'est pas ce que je veux faire. Jai un programme qui demande un truc du genre "quel fichier voulez-vous traiter?" L'utilisateur ecrit sa réponse et ça la récupère dans une variable. Et je voudrais pouvoir faire en sorte qu'on ait le droit de faire une faute de frappe et pouvoir la corriger sans avoir à arrêter le prog et le recommencer.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    ok

    si l'utilisateur se rend compte de son erreur avant d'appuyer sur entrée il la corrige en supprimant avec backspace (stty erase; voir meme stty * werase pour supprimer le mot entier).

    si l'utilisateur a fait une erreur, ton programme la détecte et fait le traitement en conséquence (echo "ce fichier n'existe pas, veuillez entrer un fichier existant ...." en testant ce qu'il a entré ..)

    non ?

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Points : 85
    Points
    85
    Par défaut
    oui voilà c'est ça le principe. Sauf que j'aimerais que pour corriger un bout de la chaine on soit pas obligé de réecrire toute la chaîne.

    Par exemple :

    chemin et nom du fichier correct: "/toto/tata/tutu/titi/pilou.txt"

    chemin et nom de fichier saisi :"/totto/tata/tutu/titi/pilou.txt"

    Typiquement dans ce cas là, c'est un peu lourd de devoir effacer tous les caractères quand on pourrai juste se déplacer et virer le "t" en trop...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    je comprends bien mais non, je peux me tromper mais je ne pense pas qu'on puisse configurer la ligne de terminal ainsi

  7. #7
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Points : 85
    Points
    85
    Par défaut
    snif...

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par kevin07 Voir le message
    Merci pour ta réponse, mais ce n'est pas ce que je veux faire. Jai un programme qui demande un truc du genre "quel fichier voulez-vous traiter?" L'utilisateur ecrit sa réponse et ça la récupère dans une variable. Et je voudrais pouvoir faire en sorte qu'on ait le droit de faire une faute de frappe et pouvoir la corriger sans avoir à arrêter le prog et le recommencer.
    Ben tu modifies ton programme pour qu'il prenne le nom de fichier dans $1. Et l'utilisateur, quand il lance le programme, il lui passe le nom de fichier dans la ligne de commande. Et tu rajoutes aussi en début de script un mécanisme de contrôle de l'existence de $1 pour gérer les cas foireux.

    C'est pas pour t'embêter que je dis ça mais à l'usage, tu verras que c'est 100 fois plus pratique ainsi à la fois pour le programmeur, et à la fois pour l'utilisateur. Déjà le programmeur n'a plus besoin de se casser les c.... à gérer la saisie surtout quand elle est à moitié réussie et à moitié ratée. Et l'utilisateur, s'il sait que le traitement va durer des plombes, peut aller boire un café tranquille en sachant que le programme se déroulera intégralement sans lui. Il n'a pas besoin de rester planté comme un rosier devant son écran en attendant que le programme lui pose sa question... surtout si ledit programme bosse pendant 45 minutes avant de poser cette fameuse question. Surtout si au bout de ces 45 minutes l'utilisateur se trompe dans sa réponse et que le programme lui répond "mauvaise réponse, traitement abandonné". Là ton utilisateur il va regretter de ne pas s'être payé sa licence zindow...

    D'ailleurs, quand toi tu lances un cp source dest, c'est bien comme ça que t'as l'habitude d'utiliser ce programme. Et t'es bien content que le programme "cp" (comme 99,9% des programmes Unix) soit programmé comme ça et pas qu'il te demande "quel fichier voulez-vous copier ?" puis "et où voulez-vous le mettre ?" puis "voulez-vous qu'il garde son nom (répondez par oui ou par non) ?" etc...(dans un pur style serveur vocal et tout aussi chiant à utiliser). Et t'es bien content en plus que le bash t'offre la complétion automatique du nom de fichier quand tu le passes à ta commande "cp". Alors offre à tes utilisateurs cette même facilité d'usage...

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/02/2015, 18h32
  2. [11gR2] Utiliser SQL*Plus dans un script Shell
    Par CinePhil dans le forum Sql*Plus
    Réponses: 6
    Dernier message: 17/06/2013, 15h34
  3. Nom de fichier avec des espaces, problème dans un script
    Par laloupiote dans le forum Shell et commandes GNU
    Réponses: 18
    Dernier message: 08/02/2013, 16h56
  4. Réponses: 3
    Dernier message: 09/06/2012, 21h40
  5. Syntaxe dans un script shell
    Par cubepiege dans le forum Linux
    Réponses: 5
    Dernier message: 27/09/2005, 16h21

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