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. 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. 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
      .
  2. J'y avais bien pensé mais j'imaginais que ce comportement était explicable;

    merci ;
    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
      ;-))