SHELL: read
Résolu
tlep
Messages postés
597
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
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 ? :-((
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
-
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
;-))
-
J'y avais bien pensé mais j'imaginais que ce comportement était explicable;
merci ; -
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-
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
le contenu du fichier est redirigé vers un descripteur de fichier supplémentaire, ainsi le
do
echo "afficher la ligne ? \"oui\" ou \"non\""
read reponse
test "$reponse" = "oui" && echo "$line"
done 3<monFichierstdin
de la bouclewhile
demeure libre pour d'autresread
.
-