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 :

Portabilité de read


Sujet :

Linux

  1. #1
    Membre régulier
    Homme Profil pro
    Intégrateur
    Inscrit en
    Novembre 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2004
    Messages : 139
    Points : 86
    Points
    86
    Par défaut Portabilité de read
    Bonjour à tous,

    Je porte une bibliothèque de fonctions écrite en ksh sous SunOS qui utilise abondamment l'astuce suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ? echo val1 val2 | read variable1 variable2
    ? echo "<${variable1}> <${variable2}>"
    <val1> <val2>
    Sous Linux, le même script donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ? echo val1 val2 | read variable1 variable2
    ? echo "<${variable1}> <${variable2}>"
    <> <>
    J'ai vérifié la situation de la variable IFS. J'ai vérifié le résultat de la commande suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ?type read
    read is a shell builtin
    Avez-vous une idée ?

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    même en ksh cela n'est pas correcte :
    un read admet une redirection d'entrée (< <<) mais pas un pipe (|).

    ensuite l'utilité dans ton exemple ?
    simplement
    val1="variable"
    et val2="variable"

    sont suffisant ...

  3. #3
    Membre régulier
    Homme Profil pro
    Intégrateur
    Inscrit en
    Novembre 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2004
    Messages : 139
    Points : 86
    Points
    86
    Par défaut
    Citation Envoyé par MarcG
    même en ksh cela n'est pas correcte :
    un read admet une redirection d'entrée (< <<) mais pas un pipe (|).
    La commande s'execute bien depuis des années... !!! ???

    Pourquoi alors la syntaxe suivante est correcte ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    cat fichier | while read var1 var2
    do
    .../...
    done
    Mon cas est un fichier d'une ligne. Par contre, je conserve la portée de mes variables dans mon processus.

    Citation Envoyé par MarcG
    un read admet une redirection d'entrée (< <<) mais pas un pipe (|).
    J'avais testé la solution de redirection sous SunOS et Linux: Elle ne marche pas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ? echo titi tata > read a b
    ? echo "<$a> <$b>"
    <> <>
    L'intérêt est de récupérer le résultat d'un binaire ou d'une fonction shell produit sur sa sortie standard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    programme ou fonction | read var1 var2

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    Il manque probablement le "\n" (0A en hexa) en fin de saisie pour que le read l'interprete comme "fin de fichier" (EOF) .

  5. #5
    Membre régulier
    Homme Profil pro
    Intégrateur
    Inscrit en
    Novembre 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2004
    Messages : 139
    Points : 86
    Points
    86
    Par défaut
    Citation Envoyé par MarcG
    Il manque probablement le "\n" (0A en hexa) en fin de saisie pour que le read l'interprete comme "fin de fichier" (EOF) .
    Malheureusement, c'est une des solutions que j'ai testé...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ? echo "titi\n" | read a
    ? echo "<$a>"
    <>
    Je fais les mêmes tests sous AIX-HP-SUN et ma commande marche !!!
    Je désespère...

    Merci de ton aide ! As-tu d'autres idées ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 40
    Points : 33
    Points
    33
    Par défaut
    Manque de pot, il semblerais que ce soit un bug:

    Citation Envoyé par man KSH
    BTW, the most frequently reported bug is
    echo hi | read a; echo $a # Does not print hi
    m aware of this and there is no need to report it.
    Version ksh: @(#)PD KSH v5.2.14 99/07/13.2

    Désolé...

  7. #7
    Membre régulier
    Homme Profil pro
    Intégrateur
    Inscrit en
    Novembre 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2004
    Messages : 139
    Points : 86
    Points
    86
    Par défaut
    Citation Envoyé par saysay
    Manque de pot, il semblerais que ce soit un bug:


    Version ksh: @(#)PD KSH v5.2.14 99/07/13.2

    Désolé...
    OK merci Je viens de faire lecture du man...
    Trop fort... Vous n'auriez pas un read.c sous la main ?

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

Discussions similaires

  1. portabilité d'une interface
    Par marou dans le forum JBuilder
    Réponses: 4
    Dernier message: 21/03/2003, 09h53
  2. Réponses: 11
    Dernier message: 17/03/2003, 11h56
  3. [controle] propriété read only
    Par Fizgig dans le forum Composants VCL
    Réponses: 6
    Dernier message: 28/08/2002, 11h30
  4. portabilité et BDD
    Par delire8 dans le forum C++Builder
    Réponses: 7
    Dernier message: 04/07/2002, 11h59
  5. CheckBox en Read Only
    Par MrJéjé dans le forum C++Builder
    Réponses: 7
    Dernier message: 23/06/2002, 16h00

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