#1 Le 29/03/2021, à 19:12
- philoeil
[RESOLU] erreur dans select (je ne trouve pas l'erreur)
Bonjour,
Pouvez-vous à m'aider à identifier mon erreur
(dans le script l'erreur apparait dans le test qui reprend cette portion du script je n'ai pas l'erreur, et pourtant ...)
le code du script test
#!/bin/bash
# paramètre en local test
ParamChe="ParamChemins.csv"
CheminJournal="./journal.txt"
CheminJournalDeveloppeur="./JournalDeveloppeur.txt"
D_RLDD="/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D2/T5_D2.1"
D_CPC="/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D3/T5_D3.4_Cpie_CPCMiroir_DeT2_D2.1"
NbrF_D_RLDD="2"
NbrF0_D_RLDD="0"
Verbeux="false"
CheminJournalErreur="./JournalErreur.txt"
# ================================ Premiere redirections des erreurs =============================================================
# pour usage dans la suspension des redirections des erreurs
tty=$(tty)
if [[ ! "$Verbeux" == "True" ]] #>>>>>>>>>>>>>>>>>>>>>>>>>>> OUVRE la redirection stdout selon mode verbeux ou non Affiche texte suivant dans les 2 cas
then
exec 1>$tty # re affiche les commande suivante sur stdout et interrompt l'envoi de stdout au journal developpeur
echo -e "\nLA SECONDE CONDITION EST VRAI, \n VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===\n$D_RLDD est miroir EGAL du dossier Cent Pour cent suivant\n Le dossier $D_CPC\n Un des 2 peut être supprimé\nVVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===\nDans $D_RLDD :\n Nombre de fichiers $NbrF_D_RLDD\n Nombre de fichiers non doublons :$NbrF0_D_RLDD\n ---------------------------------------------\n" | tee -a "$CheminJournal" | tee -a "$CheminJournalDeveloppeur"
else
echo -e "\nLA SECONDE CONDITION EST VRAI, \n VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===\n$D_RLDD est miroir EGAL du dossier Cent Pour cent suivant\n Le dossier $D_CPC\n Un des 2 peut être supprimé\nVVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===\nDans $D_RLDD :\n Nombre de fichiers $NbrF_D_RLDD\n Nombre de fichiers non doublons :$NbrF0_D_RLDD\n ---------------------------------------------\n" | tee -a "$CheminJournal"
fi
if [[ ! "$Verbeux" == "True" ]] #>>>>>>>>>>>>>>>>>>>>>>>>>>> OUVRE SELECT la redirection stdout selon mode verbeux ou non
then
echo "# exec 1>$tty"
fi
# echo -e "\nLA SECONDE CONDITION EST VRAI, \n VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===\n$D_RLDD est miroir EGAL du dossier Cent Pour cent suivant\n Le dossier $D_CPC\n Un des 2 peut être supprimé\nVVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===\nDans $D_RLDD :\n Nombre de fichiers $NbrF_D_RLDD\n Nombre de fichiers non doublons :$NbrF0_D_RLDD\n ---------------------------------------------\n"
unset itemAction2
exec 2>$tty # Suspend la redirection d'erreur
PS3="Choisir l'action"
select itemAction2 in "- Choix suppression de $D_RLDD" "- Choix suppression de $D_CPC"
do
echo "Le choix fait numéro:$REPLY >>>> $itemAction2"
exec 2>>"$CheminJournalErreur" # Rétabli la redirection d'erreur
# pour tester la variable de type entier :
if let $REPLY 2>/dev/null
then
echo "choix conforme"
break
else
echo "Entrée erronée ! variable non numérique"
fi
done
echo "fonction FermeRedirections appelée"
case $REPLY in
1)
echo "MirMOINS appelé"
;;
2)
echo "MirPLUS appelé"
;;
*)
echo "Je sors .........."
break
;;
esac
echo " terminé..."
Le resultat correct
$ ./SelMiroirEgal1.sh
LA SECONDE CONDITION EST VRAI,
VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===
/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D2/T5_D2.1 est miroir EGAL du dossier Cent Pour cent suivant
Le dossier /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D3/T5_D3.4_Cpie_CPCMiroir_DeT2_D2.1
Un des 2 peut être supprimé
VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===
Dans /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D2/T5_D2.1 :
Nombre de fichiers 2
Nombre de fichiers non doublons :0
---------------------------------------------
# exec 1>/dev/pts/4
1) - Choix suppression de /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D2/T5_D2.1
2) - Choix suppression de /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D3/T5_D3.4_Cpie_CPCMiroir_DeT2_D2.1
Choisir l'action1
Le choix fait numéro:1 >>>> - Choix suppression de /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D2/T5_D2.1
choix conforme
fonction FermeRedirections appelée
MirMOINS appelé
terminé...
La portion du code du script (que je pense identique) qui plante :
if [ "$BoucleVrai" -eq "$NbrF_D_RLDD" ] # If SECONDE CONDITION
then # If SECONDE CONDITION
if [[ ! "$Verbeux" == "True" ]] #>>>>>>>>>>>>>>>>>>>>>>>>>>> OUVRE la redirection stdout selon mode verbeux ou non Affiche texte suivant dans les 2 cas
then
exec 1>$tty # re affiche les commande suivante sur stdout et interrompt l'envoi de stdout au journal developpeur
echo -e "\nLA SECONDE CONDITION EST VRAI, \n VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===\n$D_RLDD est miroir EGAL du dossier Cent Pour cent suivant\n Le dossier $D_CPC\n Un des 2 peut être supprimé\nVVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===\nDans $D_RLDD :\n Nombre de fichiers $NbrF_D_RLDD\n Nombre de fichiers non doublons :$NbrF0_D_RLDD\n ---------------------------------------------\n" | tee -a "$CheminJournal" | tee -a "$CheminJournalDeveloppeur"
else
echo -e "\nLA SECONDE CONDITION EST VRAI, \n VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===\n$D_RLDD est miroir EGAL du dossier Cent Pour cent suivant\n Le dossier $D_CPC\n Un des 2 peut être supprimé\nVVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===\nDans $D_RLDD :\n Nombre de fichiers $NbrF_D_RLDD\n Nombre de fichiers non doublons :$NbrF0_D_RLDD\n ---------------------------------------------\n" | tee -a "$CheminJournal"
fi
if [[ ! "$Verbeux" == "True" ]] #>>>>>>>>>>>>>>>>>>>>>>>>>>> OUVRE SELECT la redirection stdout selon mode verbeux ou non
then
exec 1>$tty
fi
set -x
# echo -e "\nLA SECONDE CONDITION EST VRAI, \n VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===\n$D_RLDD est miroir EGAL du dossier Cent Pour cent suivant\n Le dossier $D_CPC\n Un des 2 peut être supprimé\nVVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===\nDans $D_RLDD :\n Nombre de fichiers $NbrF_D_RLDD\n Nombre de fichiers non doublons :$NbrF0_D_RLDD\n ---------------------------------------------\n"
unset itemAction2
exec 2>$tty # Suspend la redirection d'erreur
PS3="Choisir l'action"
select itemAction2 in "- Choix suppression de $D_RLDD" "- Choix suppression de $D_CPC"
do
echo "Le choix fait numéro:$REPLY >>>> $itemAction2"
exec 2>>"$CheminJournalErreur" # Rétabli la redirection d'erreur
# pour tester la variable de type entier :
if let $REPLY 2>/dev/null
then
echo "choix conforme"
break
else
echo "Entrée erronée ! variable non numérique"
fi
done
set +x
FermeRedirections
case $REPLY in
1)
MirMOINS
;;
2)
MirPLUS
;;
*)
echo "Je sors .........."
break
;;
esac
Le resultat (bug)
VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===
/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D2/T5_D2.1 est miroir EGAL du dossier Cent Pour cent suivant
Le dossier /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D3/T5_D3.4_Cpie_CPCMiroir_DeT2_D2.1
Un des 2 peut être supprimé
VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===
Dans /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D2/T5_D2.1 :
Nombre de fichiers 2
Nombre de fichiers non doublons :0
---------------------------------------------
+ PS3='Choisir l'\''action'
+ select itemAction2 in "- Choix suppression de $D_RLDD" "- Choix suppression de $D_CPC"
1) - Choix suppression de /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D2/T5_D2.1
2) - Choix suppression de /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D3/T5_D3.4_Cpie_CPCMiroir_DeT2_D2.1
Choisir l'action+ echo 'Le choix fait numéro:/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D3/T5_D3.5_CopieMiroirdeT5_D2.1Plus2Fichiers >>>> '
Le choix fait numéro:/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D3/T5_D3.5_CopieMiroirdeT5_D2.1Plus2Fichiers >>>>
+ exec
Entrée erronée ! variable non numérique
Je sors ..........
Merci de votre aide (et de votre courage...)
Dernière modification par philoeil (Le 22/04/2021, à 17:54)
Hors ligne
#2 Le 30/03/2021, à 07:52
- Watael
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
- select gère très bien tout seul les entrées non valide
- le case devrait être dans le select
- la sorte d'erreur doit être redirigée vers la sortie d'erreur, pas vers la sortie standard.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 30/03/2021, à 20:14
- philoeil
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
Bonjour,
Merci Watael mais je n'arrive pas à m'en sortir
J'ai enlevé les redirections d'erreur pour simplifier,
echo -e "\nLA SECONDE CONDITION EST VRAI, \n VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===\n$D_RLDD est miroir EGAL du dossier Cent Pour cent suivant\n Le dossier $D_CPC\n Un des 2 peut être supprimé\nVVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===\nDans $D_RLDD :\n Nombre de fichiers $NbrF_D_RLDD\n Nombre de fichiers non doublons :$NbrF0_D_RLDD\n ---------------------------------------------\n"
set -x
unset itemAction2
PS3="Choisir l'action"
select itemAction2 in "- Choix suppression de $D_RLDD" "- Choix suppression de $D_CPC"
do
echo "Le choix fait numéro:$REPLY >>>> $itemAction2"
# pour tester la variable de type entier :
if let $REPLY 2>/dev/null
then
echo "choix conforme"
case $REPLY in
1)
MirMOINS
;;
2)
MirPLUS
;;
*)
echo "Je sors .........."
break
;;
esac
break
else
echo "Entrée erronée ! variable non numérique"
fi
set +x
done
Le resulltat :
LA SECONDE CONDITION EST VRAI,
VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===
/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D2/T5_D2.2 est miroir EGAL du dossier Cent Pour cent suivant
Le dossier /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D1/MirEgal_De_T5_D2.2
Un des 2 peut être supprimé
VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===
Dans /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D2/T5_D2.2 :
Nombre de fichiers 4
Nombre de fichiers non doublons :0
---------------------------------------------
Le choix fait numéro:/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D3/T5_D3.2 >>>>
Entrée erronée ! variable non numérique
+ unset itemAction2
+ PS3='Choisir l'\''action'
+ select itemAction2 in "- Choix suppression de $D_RLDD" "- Choix suppression de $D_CPC"
1) - Choix suppression de /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D2/T5_D2.2
2) - Choix suppression de /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D1/MirEgal_De_T5_D2.2
Choisir l'action+ echo 'Le choix fait numéro:/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D3/T5_D3.2 >>>> '
+ let /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D3/T5_D3.2
ci-dessous le fichier MiroirSupprimer :
+ echo 'Entrée erronée ! variable non numérique'
+ set +x
Choisir l'action/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D1/MiroirMoins_de_T5_D2.2 § MirCopie_T5_D3.2_F2Ori.JPG § 12.5515 § Wed Mar 17 11:48:10.9271954870 2021 § dernier accès le mardi 30 mars 2021 à 19:15:35.1415954620 § 95960f0379ce775efd5ba1d7b393a4cb
/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D1/MiroirMoins_de_T5_D2.2 § MirCopie4_T5_D3.2_F2Ori.JPG § 12.5515 § Wed Mar 17 11:48:11.1831950320 2021 § dernier accès le mardi 30 mars 2021 à 19:15:35.1735952820 § 95960f0379ce775efd5ba1d7b393a4cb
/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D1/MiroirMoins_de_T5_D2.2 § MirFD2.2_F1_Ori.JPG § 14.0436 § Wed Mar 17 11:48:11.3871946680 2021 § dernier accès le mardi 30 mars 2021 à 19:15:35.2055951010 § 48cf96764912ca3194157bf605dc4c8f
Passage de l'info dans les paramètres du projet nous sommes le 20210330 à 2102.
+ unset itemAction2
+ PS3='Choisir l'\''action'
+ select itemAction2 in "- Choix suppression de $D_RLDD" "- Choix suppression de $D_CPC"
1) - Choix suppression de /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D3/T5_D3.4_Cpie_CPCMiroir_DeT2_D2.1
2) - Choix suppression de /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D2/T5_D2.1
Choisir l'action+ echo 'Le choix fait numéro:/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D3/T5_D3.5_CopieMiroirdeT5_D2.1Plus2Fichiers >>>> '
+ let /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D3/T5_D3.5_CopieMiroirdeT5_D2.1Plus2Fichiers
+ echo 'Entrée erronée ! variable non numérique'
+ set +x
Choisir l'action+ unset itemAction2
+ PS3='Choisir l'\''action'
+ select itemAction2 in "- Choix suppression de $D_RLDD" "- Choix suppression de $D_CPC"
1) - Choix suppression de /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D1/MirEgal_De_T5_D2.2
2) - Choix suppression de /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D2/T5_D2.2
Choisir l'action+ echo 'Le choix fait numéro:/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D1/MiroirMoins_de_T5_D2.2 >>>> '
+ let /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D1/MiroirMoins_de_T5_D2.2
+ echo 'Entrée erronée ! variable non numérique'
+ set +x
Choisir l'actionChoisir l'actionChoisir l'action+ unset itemAction2
+ PS3='Choisir l'\''action'
+ select itemAction2 in "- Choix suppression de $D_RLDD" "- Choix suppression de $D_CPC"
1) - Choix suppression de /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D2/T5_D2.1
2) - Choix suppression de /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D3/T5_D3.4_Cpie_CPCMiroir_DeT2_D2.1
Choisir l'action+ echo 'Le choix fait numéro:/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D3/T5_D3.5_CopieMiroirdeT5_D2.1Plus2Fichiers >>>> '
+ let /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D3/T5_D3.5_CopieMiroirdeT5_D2.1Plus2Fichiers
+ echo 'Entrée erronée ! variable non numérique'
+ set +x
Je ne sais pas comment faire... Pourquoi le select ne me donne pas la main pour le choix ???
Hors ligne
#4 Le 30/03/2021, à 20:54
- Watael
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
comme ça
echo
echo "LA SECONDE CONDITION EST VRAI
echo "VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV==="
echo "$D_RLDD est miroir EGAL du dossier Cent Pour cent suivant"
echo "Le dossier $D_CPC"
echo "Un des 2 peut être supprimé"
echo "VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV===VVV==="
echo "Dans $D_RLDD :
echo "Nombre de fichiers $NbrF_D_RLDD"
echo "Nombre de fichiers non doublons :$NbrF0_D_RLDD"
echo " ---------------------------------------------"
echo #c'est un peu moins dégueu comme ça
PS3="Choisir l'action : "
select itemAction2 in "- Choix suppression de $D_RLDD" "- Choix suppression de $D_CPC"
do
echo "Le choix fait numéro:$REPLY >>>> $itemAction2"
case $REPLY in
1) MirMOINS
;;
2) MirPLUS
;;
*) echo "Je sors .........."
;;
esac
break
done
Dernière modification par Watael (Le 30/03/2021, à 20:55)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 30/03/2021, à 22:08
- philoeil
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
Bonjour,
et Merci Watael
Mon problème semble situé ailleurs : dans le traitement des redirections, j'avais il y a quelque mois ajouté une fonctionnalité de traitement d'erreur
Et là j'ai un peu oublié ... il faut que je reprenne d'un peu plus loin.
Je pense avoir une redirection qui m'empêche d'interagir avec le select, il me faut chercher un peu plus, je verrai cela prochainement, peut être demain, là je suis fatigué, dodo....
Merci
Hors ligne
#6 Le 12/04/2021, à 08:36
- philoeil
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
Bonjour,
Merci Watael
(apres une interruption) je reprends ma question car je n'ai pas encore trouvé
J'ai inséré le code en #4 et le résultat (ci-dessous) est le même que mon erreur initiale
1) - Choix suppression de /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D1/MirEgal_De_T5_D2.2
2) - Choix suppression de /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D2/T5_D2.2
Choisir l'action : Le choix fait numéro:/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D1/MiroirMoins_de_T5_D2.2 >>>>
Je sors ..........
Le problème semble tourner autour de $REPLY qui renvoi le contenu du choix de select au lieu du numéro,
"quelle cause peut rendre cela possible ?" La réponse me permettra sans doute de trouver la source du problème
Merci
Hors ligne
#7 Le 12/04/2021, à 09:07
- iznobe
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
Bonjour,
Le problème semble tourner autour de $REPLY qui renvoi le contenu du choix de select au lieu du numéro,
"quelle cause peut rendre cela possible ?" La réponse me permettra sans doute de trouver la source du problèmeMerci
Bonjour , est ce que dans ta variable $REPLY tu ne stockes pas le chemin au lieu du numero justement ?
sinon creer une autre variable genre numero_choix pour voir
Dernière modification par iznobe (Le 12/04/2021, à 10:17)
retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#8 Le 12/04/2021, à 09:58
- philoeil
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
Bonjour,
Merci Iznobe
Mais justement
sinon creer une autre variable genre numero_choix pour voir
c'est bien mon problème comment puis-je retrouver le numero de mon choix il me semblait que REPLY était une variable donnant l'indice du choix
Hors ligne
#9 Le 12/04/2021, à 10:15
- iznobe
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
A priori c ' est plus une variable qui donne un chemin ( pour effacer un fichier si j' ai bien compris ) correspondant au choix de l' utilisateur .
je dirais l ' etape d ' apres dans la logique du script . j ' ai juste regarder en vitesse .
Avec l' exemple de Watael ca ne fonctionne pas ?
si c' est pas $REPLY , essaie $itemAction2 .
Dernière modification par iznobe (Le 12/04/2021, à 12:40)
retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#10 Le 12/04/2021, à 12:25
- nany
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
Bonjour,
J’ai beau copier ce que tu mets en #1 puis la correction en #3 depuis le forum dans un script et chez moi ça marche : $REPLY est bien renseignée.
Peux-tu redonner le contenu complet de ton script en l’état actuel que je puisse retester ?
Je soupçonne la présence de caractères spéciaux qui seraient effacés par le forum.
@iznobe : $REPLY est une variable renvoyée par select.
En ligne
#11 Le 12/04/2021, à 12:47
- philoeil
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
Merci Iznobe et Nany
Peux-tu redonner le contenu complet de ton script en l’état actuel que je puisse retester ?
Mon problème tourne autour de cela aussi je n'arrive pas à reproduire l'erreur en dehors du script complet.
Il est un peu long pour le transfert, je vais essayer de couper petit à petit pour ne garder que la portion qui plante et je posterai
Hors ligne
#12 Le 12/04/2021, à 13:19
- iznobe
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
Alors je ne connais pas bien le codage en bash , mais ca serait pas un probleme de portée de variable ?
par exemple , je fais une analogie avec d ' autre langages , c ' est peut etre nimporte quoi mais bon , si tu fais modifie $REPLY dans une fonction puis que tu l' appelle apres , en dehors de la fonction , elle n' aura pas la valeur attendue , modifiée et accessible uniquement dans la fonction ?
je sais pas si c' est clair et si ca s' applique en bash .
retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#13 Le 12/04/2021, à 16:44
- Watael
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
un read (sans nom de variable cela assigne $REPLY) dans un select ne modifie pas le $REPLY du select.
ce serait un beau bordel, sinon.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#14 Le 12/04/2021, à 18:35
- philoeil
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
Bonjour,
Je n'arrive pas à reproduire mon erreur, ailleurs que dans le script,
je n'arrive pas à simplifier mon script pour le rendre lisible avec l'erreur
Voyez-vous un autre moyen pour cerner mon erreur qui est que le REPLY renvoie du texte au lieu de son indice ?
Merci
Dernière modification par philoeil (Le 12/04/2021, à 18:48)
Hors ligne
#15 Le 13/04/2021, à 20:56
- philoeil
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
Bonjour,
Je progresse, j'ai réussi à reproduire l'erreur dans un script test plus court (qui reste quand même un peu long 500 lignes c'est pourquoi je m'abstiens de vous balancer le tout)
L'erreur tourne autour la gestion de la redirection avant l'appel select
Je place ci-dessous les moments clef du code qui peuvent permettre de suivre :
Au lancement :
# Lancement
# ================================ Premiere redirections des erreurs =============================================================
# pour usage dans la suspension des redirections des erreurs
tty=$(tty)
# ==========================================================================================
exec 2> >(tee -a "$CheminJournalErreur" >&2) # envoi les erreurs et les affiches sur stdout
# ==========================================================================================
La fonction FermeRedirectionS
FermeRedirectionS()
{
if [[ ! "$Verbeux" == "True" ]] #<<<<<<<<<<<<<<<<<<<<<< ferme la redirection SELECT stdout selon mode verbeux ou non
then
exec 5>&1 # Lie le descripteur de fichier #5 avec stdout.
#echo -e "\n====================\n FIN Test affichage SELECT Verbeux= FALSE\n========================\n" >>"$CheminJournalDeveloppeur"
exec >>"$CheminJournalDeveloppeur" # envoie stdout dans le #5 et dans le CheminJournalDeveloppeur
exec 2> >(tee -a "$CheminJournalErreur" >&2) # envoi les erreurs et les affiches sur stdout
exec 2> >(tee -a "$CheminJournalDeveloppeur" >&2) # envoi les erreurs et les affichent Dans journal developpeur
exec 2> >(tee -a "$CheminJournal" >&2) # envoi les erreurs dans #2 et chemin journal
else
#echo -e "\n====================\n FIN Test affichage SELECT Verbeux = TRUE\n========================\n"
exec 5>&1 # Lie le descripteur de fichier #5 avec stdout.
exec 2> >(tee -a "$CheminJournalErreur" >&2) # envoi les erreurs et les affiches sur stdout
exec 2> >(tee -a "$CheminJournal" >&2) # envoi les erreurs dans #2 et chemin journal
exec 2> >(tee -a "$CheminJournalDeveloppeur" >&2) # envoi les erreurs et les affichent Dans journal developpeur
fi
}
Puis au moment clef ou cela plante :
set -x
unset itemAction2
if [ ! "$Verbeux" == "True" ] #>>>>>>>>>>>>>>>>>>>>>>>>>>> OUVRE SELECT la redirection stdout selon mode verbeux ou non
then
exec 1>$tty # re affiche les commande suivante sur stdout et interrompt l'envoi de stdout au journal developpeur
fi
exec 2>$tty # Suspend la redirection d'erreur pour select
PS3="Choisir l'action"
select itemAction2 in "- Choix suppression de $D_RLDD" "- Choix suppression de $D_CPC"
do
echo -e "\nLe choix fait numéro:$REPLY >>>> $itemAction2"
# pour tester la variable de type entier :
if let $REPLY 2>/dev/null
then
echo "choix conforme"
case $REPLY in # Case Choix numREPLY
1) # Case Choix numREPLY
MirMOINS
;;
2) # Case Choix numREPLY
MirPLUS
;;
*) # Case Choix numREPLY
echo "Je sors .........."
break
;;
esac # Case Choix numREPLY
break
else
echo -e "\n\nEntrée erronée ! variable non numérique \n\n"
# debug exit
fi
done
FermeRedirectionS
set +x
Le detail du retour à l'ecran :
+ unset itemAction2
+ '[' '!' '' == True ']'
+ exec
+ exec
+ PS3='Choisir l'\''action'
+ select itemAction2 in "- Choix suppression de $D_RLDD" "- Choix suppression de $D_CPC"
1) - Choix suppression de /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D2/T5_D2.2
2) - Choix suppression de /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D1/MirEgal_De_T5_D2.2
Choisir l'action+ echo -e '\nLe choix fait numéro:/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D3/T5_D3.2 >>>> '
Le choix fait numéro:/home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D3/T5_D3.2 >>>>
+ let /home/phil/Documents/JeCodeShell/ShellEssaiRepDblons/T6_Racine/T5_D3/T5_D3.2
+ echo -e '\n\nEntrée erronée ! variable non numérique \n\n'
Entrée erronée ! variable non numérique
Choisir l'action
+ FermeRedirectionS
+ [[ ! '' == \T\r\u\e ]]
+ exec
+ exec
+ exec
++ tee -a ./JournalErreur
+ exec
++ tee -a ./JournalDeveloppeur
+ exec
++ tee -a ./JournalNomBatchLisezMoiJournalSauvegarde
+ set +x
Merci pour votre aide
Hors ligne
#16 Le 13/04/2021, à 21:26
- iznobe
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
Re , tu n' as pas moyen d' imprimer ta $REPLY a chaque modif et apres chaque fonctions ( et dedans aussi ) a l' ecran dans tes test afin de comprendre exactement a partir d' ou ca merdoie ?
genre t ' as une fonction qui travaille avec ta variable dedans tu y met un : echo $REPLY ;
parfois c' est ce que je faisais pour debugguer dans d' autres langages quand j' arriver pas trouver le soucis .
retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#17 Le 13/04/2021, à 21:43
- MicP
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
Bonjour
… quand même un peu long 500 lignes c'est pourquoi je m'abstiens de vous balancer le tout …
Pour ça, il y a : https://paste.ubuntu.com/
Dernière modification par MicP (Le 13/04/2021, à 21:44)
Hors ligne
#18 Le 13/04/2021, à 22:08
- Watael
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
Tu as réussi à montrer que "jouer" avec les redirections peut casser select. ah, bravo !!!
&2 n'est pas /dev/ttyN, ou /dev/pts/N ($tty)
&2, c'est /dev/stderr !
pareil, pour &1, il faut le re-rediriger vers /dev/stdout
Dernière modification par Watael (Le 13/04/2021, à 22:08)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#19 Le 14/04/2021, à 03:19
- nany
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
Bon, Watael a mis le doigt où ça cloche.
Question subsidiaire : comment tu t’y retrouve avec des indentations aussi aléatoires ?
En ligne
#20 Le 14/04/2021, à 09:30
- kamaris
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
Bon, Watael a mis le doigt où ça cloche.
Je ne pense pas : 2 est effectivement /dev/stderr, de même que 1 est /dev/stdout, lesquels pointent par défaut au même endroit : $(tty).
$ readlink -f /dev/stdout
/dev/pts/1
$ readlink -f /dev/stderr
/dev/pts/1
$ tty
/dev/pts/1
$
Je pense que le problème vient plutôt d'une redirection, quelque part (je vois un exec 5>&1 plus haut, donc ça suppose que le jeu des redirections a été poussé assez loin…) de 0, c'est-à-dire de /dev/stdin, vers quelque chose.
Car $REPLY contient la réponse fournie sur l'entrée standard.
Hors ligne
#21 Le 14/04/2021, à 19:00
- philoeil
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
Bonjour,
Merci à tous de vos messages,
Je ne vois pas très bien ce que je peux faire, je suis d'accord il y a un problème de redirection,
pour le moment je cherche encore la solution
Dans mon code jusqu'à présent quand je faisais précéder le select de
exec 2>$tty
cela se passait plutôt bien
Là ça ne marche pas
Il faut que je cherche une autre piste peut-être du côté de la boucle while qui contient ce select
Merci encore
Hors ligne
#22 Le 14/04/2021, à 19:13
- kamaris
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
Tu n'as pas de exec 0 dans ton code ? (ou même exec.*0 en regex)
Hors ligne
#23 Le 17/04/2021, à 18:34
- philoeil
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
Bonjour,
Merci Kamaris,
Non je ne crois pas avoir de exec 0 (ou alors caché sous une forme que je ne connais pas)
J'ai mis un peu de temps pour trouver les lignes qui déclenchent le problème les voici :
while IFS="\n" read D_RLDD # =colonne 1 parcours de la liste des dossier contenant les doublons
do # parcours de la liste des dossier contenant les doublons
# boucle de comparaison des fichiers de chaque dossier pour déterminer si miroir ou non de D_CPC
Si je supprime la boucle while le problème disparait, si je la replace le problème réapparait.
Je précise que juste avant il y a une suspension de redirections ainsi : (maiis avec ou sans redirection rien n'y fait)
exec 2>$tty # Suspend la redirection d'erreur
exec 1> >(tee -a "$CheminJournalDeveloppeur" >&1) # envoie stdout dans le #1 et dans le CheminJournalDeveloppeur
# Cette forme ne change rien : exec 1>$tty # re affiche les commande suivante sur stdout et interrompt l'envoi de stdout au journal developpeur
Pouvez-vous m'aider à lever le problème ?
Merci à tous
Hors ligne
#24 Le 17/04/2021, à 20:28
- kamaris
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
Peux-tu donner le code entier de cette boucle while ? (si ça ne fait pas 5 000 lignes )
Hors ligne
#25 Le 17/04/2021, à 20:40
- Watael
Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)
on a accès au script complet quelque part ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne