Contenu | Rechercher | Menus

Annonce

DVD, clés USB et t-shirts Ubuntu-fr disponibles sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/03/2021, à 20: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, à 18:54)

Hors ligne

#2 Le 30/03/2021, à 08: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.


Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 30/03/2021, à 21: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, à 21: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, à 21:55)


Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 30/03/2021, à 23: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, à 09: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, à 10:07

iznobe

Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)

philoeil a écrit :

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ème

Merci

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, à 11:17)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM . avec Ubuntu , LM et W$10

Hors ligne

#8 Le 12/04/2021, à 10:58

philoeil

Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)

Bonjour,
Merci Iznobe
Mais justement

iznobe a écrit :

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, à 11: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, à 13:40)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM . avec Ubuntu , LM et W$10

Hors ligne

#10 Le 12/04/2021, à 13: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. wink

Hors ligne

#11 Le 12/04/2021, à 13:47

philoeil

Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)

Merci Iznobe et Nany

nany a écrit :

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, à 14: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 utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM . avec Ubuntu , LM et W$10

Hors ligne

#13 Le 12/04/2021, à 17: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. smile


Welcome to sHell. · eval is evil.

Hors ligne

#14 Le 12/04/2021, à 19: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, à 19:48)

Hors ligne

#15 Le 13/04/2021, à 21: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, à 22: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 utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM . avec Ubuntu , LM et W$10

Hors ligne

#17 Le 13/04/2021, à 22:43

MicP

Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)

Bonjour

Dans son message #15, philoeil a écrit :

… 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, à 22:44)

Hors ligne

#18 Le 13/04/2021, à 23: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 !!! lol

&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, à 23:08)


Welcome to sHell. · eval is evil.

Hors ligne

#19 Le 14/04/2021, à 04: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 ? yikes

Hors ligne

#20 Le 14/04/2021, à 10:30

kamaris

Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)

nany a écrit :

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, à 20: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, à 20: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, à 19: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, à 21: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 big_smile)

Hors ligne

#25 Le 17/04/2021, à 21:40

Watael

Re : [RESOLU] erreur dans select (je ne trouve pas l'erreur)

on a accès au script complet quelque part ?


Welcome to sHell. · eval is evil.

Hors ligne