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

Shell et commandes GNU Discussion :

Comportement étrange ksh sur linux


Sujet :

Shell et commandes GNU

  1. #1
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut Comportement étrange ksh sur linux
    Je n'arrive pas à comprendre un comportement en ksh. Voici le code suivant :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    # définition de i a 0
    typeset -i i=0
    while [[ $i -ne 2 ]]
    do 
        echo $i
        # modification de i
        i=$i+1
    done
     
    # en dehors de la boucle, i a été modifié et la valeur est bien 2
    echo $i
     
    touch toto.txt
    echo "99" > toto.txt
     
    # ici par contre, je modifie i
    cat toto.txt |while read PROCPID
    do
       # ici par contre, je modifie i
        i=4
    done
     
    echo $i
     
    # m'affiche toujours 2....
    Pourquoi la valeur que je modifie dans la seconde boucle est illisible en dehors alors que la première l'est ?

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 401
    Points
    28 401
    Par défaut
    Etonnant en effet...
    J'ai testé ton script avec ksh93, il se comporte normalement.

    Quelle version de ksh utilises-tu ?

  3. #3
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    En fait je viens de tester sur Linux, AIX et Sun, j'ai toujours la même chose.

    Par contre je ne connais pas ma version de ksh, quelle est la commande pour le savoir ?

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 401
    Points
    28 401
    Par défaut
    Citation Envoyé par hugo123
    En fait je viens de tester sur Linux, AIX et Sun, j'ai toujours la même chose.
    Par contre je ne connais pas ma version de ksh, quelle est la commande pour le savoir ?
    Check the version.
    1. Type echo ${.sh.version}. If that prints a version, you're all set; skip the rest of these instructions. Otherwise, continue to step 2.
    2. You don't have the 1993 version of the Korn shell. To find out what version you do have, type the command set -o emacs, then press CTRL-V. This will tell you if you have the 1988 version or the Public Domain Korn shell. In either case, continue to step 3.
    3. Type the command /usr/dt/bin/dtksh. If this gives you a $ prompt, you have the Desktop Korn Shell, which is based on an early version of ksh93.

  5. #5
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    Voici la version :
    PD KSH v5.2.14 99/07/13.2

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 401
    Points
    28 401
    Par défaut
    pdksh n'est pas totalement compatible avec ksh.
    En particulier, la dernière commande d'un pipeline n'est pas exécutée dans le shell parent...d'où ton problème.
    Essaye comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read PROCPID
    do
        i=4
    done < toto.txt
    Tu peux trouver toutes les ressources pour monter le vrai Korn shell à cette adresse là.

  7. #7
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    Les installs je peux pas trop y toucher, j'ai plusieurs machines avec une install bien défini.
    Je me suis arrangé differemment en supposant que mes fichiers n'avaient pas plusieurs lignes (donc pas de while a faire, un VALEUR=`cat fichier` a suffi)
    Merci en tout cas pour la réponse, je trouvais cela assez étrange.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comportement étrange boucle sur éléments
    Par laloune dans le forum jQuery
    Réponses: 1
    Dernier message: 24/09/2014, 10h46
  2. Réponses: 1
    Dernier message: 23/03/2009, 20h42
  3. [2.0] comportement étrange sur condition sur string.indexOf
    Par franculo_caoulene dans le forum VB.NET
    Réponses: 26
    Dernier message: 18/06/2008, 12h09
  4. Réponses: 4
    Dernier message: 25/02/2008, 07h42

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