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 :

Retour chariot qui ne se fait pas ?


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de CedrX
    Inscrit en
    Avril 2007
    Messages
    1 111
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 111
    Par défaut Retour chariot qui ne se fait pas ?
    Voici une petite fonction que j'ai programmé en bash:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    defipaddr() {
        matchipaddr=1
        while [ $matchipaddr -ne 0 ] ; do  
            echo -n "Adresse IP du serveur? ($1) "
            read IPADDR
            IPADDR=${IPADDR:-$1}
            echo $IPADDR | egrep $regexpipaddr > /dev/null
            matchipaddr=$?
            [ $matchipaddr -eq 1 ] && echo "Mauvais format"
    done
    echo $IPADDR
    }
    Lorsque j'appelle cette fonction le echo qui est censé m'afficher la question ne s'affiche qu'une fois que j'ai entré l'adresse IP à l'écran (une fois que j'ai appuyé sur la touche retour en fait)

    bash ./script.sh
    172.16.128.35
    Adresse IP du serveur? (172.16.128.134) 172.16.128.35
    Alors que moi je voudrais avoir ça à l'écran

    Adresse IP du serveur? (172.16.128.134) 172.16.128.35
    Bref j'ai l'impression que tant que je n'ai pas appuyé sur retour les caractères de ma fonction echo ne s'affichent pas.
    Je pense que c'est un problème de tampon mais j'avoue qu'en shell je ne sais pas le régler ?
    Si quelqu'un a une idée ...

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Pour éviter le problème tu peux peut-être utiliser /bin/echo au lieu du echo interne de bash.
    Ceci dit personnellement je ne reproduis pas le problème que tu rencontres avec le echo interne de bash, j'ai bien l'affichage immédiat.

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 677
    Par défaut
    moi aussi, j'ai l'affichage immédiat.
    essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    read -p "Adresse IP du serveur? ($1) : "
    ...
    ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #!/bin/bash
     
    defaultAddr=123.456.789.159
    regexipaddr="[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
     
    defipaddr() {
       read -p"Adresse IP du serveur? ($1) " IPADDR
       IPADDR=${IPADDR:-$1}
       [[ $IPADDR =~ ^${regexipaddr}$ ]] || {
          echo "Mauvais format"
          defipaddr $defaultAddr
       }
       echo $IPADDR
    }
     
    defipaddr $defaultAddr
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Rédacteur
    Avatar de CedrX
    Inscrit en
    Avril 2007
    Messages
    1 111
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 111
    Par défaut
    Bon ben il semble que le read avec l'option -p m'ait tiré d'affaire.
    Mais c'est effectivement la première fois que j'ai des problèmes avec la fonction echo (ou /bin/echo).
    Pourquoi ? comment ? Mystère ...
    Merci à vous pour votre aide

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 853
    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 853
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par CedrX Voir le message
    Bon ben il semble que le read avec l'option -p m'ait tiré d'affaire.
    Mais c'est effectivement la première fois que j'ai des problèmes avec la fonction echo (ou /bin/echo).
    Pourquoi ? comment ? Mystère ...
    Merci à vous pour votre aide
    Problème non reproduit chez-moi. Le echo s'affiche immédiatement.

    Toutefois cela pourrait provenir (pourquoi j'en sais rien) de ton echo -n initial. Les options "-n" n'ont pas toujours été les mêmes partout dans tous les shells.
    Essaye de remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo -n "Adresse IP du serveur? ($1) "
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "Adresse IP du serveur? ($1) " |awk '{printf("%s", $0)}'
    histoire de vérifier cette hypothèse (et bien sûr de retirer l'option "-p" de read)

    Petite parenthèse: tester une erreur de programme en testant $? -eq 1 n'est pas une bonne idée. Le retour "1" n'est pas obligatoire. Si le programme retourne 2 t'es marron. Mieux vaut tester $? -ne 0 ou mieux, tester directement if !echo $IPADDR | egrep $regexpipaddr
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [Mail] Envoi d'e-mail qui ne se fait pas
    Par sam01 dans le forum Langage
    Réponses: 3
    Dernier message: 26/07/2007, 10h41
  2. rsync : sauvegarde incrementale qui ne se fait pas
    Par nixonne dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 22/07/2007, 12h11
  3. [Tableaux] création de tableau qui ne se fait pas
    Par mussara dans le forum Langage
    Réponses: 2
    Dernier message: 01/11/2006, 21h44
  4. Test qui ne se fait pas
    Par GLDavid dans le forum Linux
    Réponses: 12
    Dernier message: 07/03/2006, 14h57
  5. Pb de selection qui ne se fait pas
    Par Stef.proxi dans le forum Langage SQL
    Réponses: 4
    Dernier message: 06/08/2004, 10h54

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