SHELL: read

Résolu
Bonjour,

j'ai un souci avec 2 read en boucle dans un shell :

#!/bin/bash
L=1
while read ligne;do
while true;do
clear
echo "Supprimer \"$ligne\" ?"
reponse=""
read reponse
if [ "$reponse" = "o" ];then
sed -i $L'd' $1
break
elif [ "$reponse" != "" ];then
L=$(($L+1))
break
fi
done
done < mon_fichier

Je veux afficher chaque ligne pour en demander la suppression.
Bizarrement, la variable "$reponse" prend la valeur de "$ligne".

Très étrange non ? :-((
Configuration: Windows XP
Firefox 2.0.0.7

3 réponses

  1. Modérateur
    Salut,

    C'est le double "read" qui met la pagaille je pense (enfin j'en suis même sûr, mais je sais pas pourquoi :-\ ).

    Donc au lieu de passer par une boucle "while", essaie plutôt avec une boucle "for" en modifiant la variable "$IFS", du style :
    L=1
    IFS=$'\n'
    for ligne in $(cat $1)
    do
    echo "Affichage ligne $L ?"
    read -e reponse
    if [ "$reponse" = "o" ]
    then
    echo $ligne
    fi
    L=$(expr $L + 1)
    done
    ;-))
    1
    1. J'y avais bien pensé mais j'imaginais que ce comportement était explicable;

      merci ;
      0
      1. if [ "'read -e'" = "Bonjour" ]
        then
            echo oui
        fi
        

        warning : simple-quotes are back-quotes

        is like :

        read line;
        if [ "$line" = "Bonjour" ]
        then
            echo oui
        fi
        
        -1
        1. as-tu testé cette proposition afin de la valider ? (si je pouvais moinsser davantage ...)

          pour répondre à la question initiale, avec 7 ans de retard :
          while read -r line <&3
          do
          echo "afficher la ligne ? \"oui\" ou \"non\""
          read reponse
          test "$reponse" = "oui" && echo "$line"
          done 3<monFichier
          le contenu du fichier est redirigé vers un descripteur de fichier supplémentaire, ainsi le
          stdin
          de la boucle
          while
          demeure libre pour d'autres
          read
          .
          0