Bonjour,
Merci Watael
Je n'étais pas famillier avec les processus et je viens de comprendre que ce n'étais pas une erreur mais l'affichage du PID
Merci Kamaris
Le nombre de ligne qui a changé entre ma copie du message et le script est du à ma correction lors de la relecture du message
J'ai bêtement enlevé des lignes de commentaire qui me semblaient inutiles mais qui vous ont posé problème pour la compréhension de ma question
Je ne le ferai plus 😉
et je m'étais planté sur des renvois de redirection qui affichaient dans le JournalErreur les messages PID
Pour la peine le script test modifié
#!/bin/bash
# paramètres importés
CheminJournalDeveloppeur="./JournalDeveloppeur"
CheminJournal="./Journal"
CheminActionDbl="."
CheminJournalErreur="./JournalErreur"
tty=$(tty)
truncate -s 0 "$CheminJournalErreur"
truncate -s 0 "$CheminJournal"
truncate -s 0 "$CheminJournalDeveloppeur"
attend()
{
printf ", une touche pour interrompre.
"
exec 2>$tty # Suspend la redirection d'erreur
#exec 1>&5 5>&- # Restaure stdout et ferme le descripteur de fichier #
exec 1>$tty # re affiche les commande suivante sur stdout et interrompt l'envoi de stdout au journal developpeur (Commun mode Verbeux ou pas)
while : ;do
for i in {0..15} # for do 10
do # for do 10
if [ $i -eq 15 ]
then
echo -en "\r-------------------------------\r"
else
echo -ne " ."
sleep 0.1
fi
done # for do 10
done
if [ ! "$Verbeux" == "True" ] #<<<<<<<<<<<<<<<<<<<<<< OUVRE la redirection selon mode verbeux ou non
then
exec 5>&1 # Lie le descripteur de fichier #5 avec stdout.
exec 1> >(tee -a "$CheminJournalDeveloppeur" >&1) # envoie stdout dans le #1 et dans le CheminJournalDeveloppeur
exec 2> >(tee -a "$CheminJournalErreur" >&2) # Rétabli la redirection d'erreur et l'affiche 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
else
exec 2> >(tee -a "$CheminJournalErreur" >&2) # Rétabli la redirection d'erreur et l'affiche 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
}
progress()
{
printf "Attente une touche + ENTREE ."
attend & PROGR_PID=$!
exec 2>$tty # Suspend la redirection d'erreur
# exec 1>&5 5>&- # Restaure stdout et ferme le descripteur de fichier #
exec 1>$tty # re affiche les commande suivante sur stdout et interrompt l'envoi de stdout au journal developpeur (Commun mode Verbeux ou pas)
while [[ -z ${repon} ]] # While do done repon
do # While do done repon
read -t 1 repon
done # While do done repo
if [ ! "$Verbeux" == "True" ] #<<<<<<<<<<<<<<<<<<<<<< OUVRE la redirection selon mode verbeux ou non
then
exec 5>&1 # Lie le descripteur de fichier #5 avec stdout.
exec 1> >(tee -a "$CheminJournalDeveloppeur" >&1) # envoie stdout dans le #1 et dans le CheminJournalDeveloppeur
exec 2> >(tee -a "$CheminJournalErreur" >&2) # Rétabli la redirection d'erreur et l'affiche 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
else
exec 2> >(tee -a "$CheminJournalErreur" >&2) # Rétabli la redirection d'erreur et l'affiche 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
unset repon
kill $PROGR_PID
}
IndirectProgress()
{
exec 2>$tty # Suspend la redirection d'erreur
progress
}
# ----------------------- Choix du mode d'affichage verbeux=conception ou non=usage
echo "Quel mode d'affichage des messages en cours d'execution est choisi ?"
PS3="Choisir le mode d'affichage : "
select itemAff in "- Mode developpeur : Affiche tous les messages, et les paramètres " "- Mode utilisateur simple (correspond à tout ce qui est mémorisé dans le journal) : Affiche les messages essentiels MESSAGE DEBUT DE TEST et n'affiche pas le message FIN DE TEST"
do
echo -e "\fLe choix fait $REPLY:$itemAff"
if let "$REPLY" 2>/dev/null
then
echo "choix conforme"
else
echo "Entrée erronée ! variable non numérique"
fi
if [ "$REPLY" -eq 1 ]
then
# "- Afficher tous les messages"
Verbeux="True"
else
Verbeux="False"
fi
break
done
# ============================================================================================
exec 2> >(tee -a "$CheminJournalErreur" >&2) # envoi les erreurs dans CheminJournalErreur et les affiches sur stdout
# ============================================================================================
if [ "$Verbeux" == "True" ] # IF Verbeux
then # IF Verbeux Mode Verbeux TRUE
exec 1> >(tee -a "$CheminJournalDeveloppeur" >&1) # envoie stdout dans le #1 et dans le CheminJournalDeveloppeur
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
echo " mode developpeur=verbeux VRAI choisi"
echo -e "\nToutes sorties des commandes seront affichées et envoyées\t dans le fichier JournalDeveloppeur\t \f"
echo "Les erreurs sont envoyées dans "'$CheminJournalErreur'
else # Mode verbeux FALSE
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
echo -e "Les erreurs sont envoyées dans stdout et "'$CheminJournalErreur'"et dans le JournalDeveloppeur\n\f"
exec 5>&1 # Lie le descripteur de fichier #5 avec stdout.
exec >>"$CheminJournalDeveloppeur" # envoie stdout dans le #5 et dans le CheminJournalDeveloppeur ATTENTION >> plus rien ne s'affiche sur stdout
fi # IF Verbeux
# ===============================FIn Test redirection Paramètres=====================================================
exec 2>$tty # Suspend la redirection d'erreur
exec 1>$tty
# exec 1>&5 5>&- # Restaure stdout et ferme le descripteur de fichier #
exec 1> >(tee -a "$CheminJournalDeveloppeur" >&1) # envoie stdout dans le #1 et dans le CheminJournalDeveloppeur
while [[ -z "$FichierProjet" ]] # While FicProj
do # While FicProj
2>&1 read -p "--- quel fichier traiter, donner son nom (peut-être Projet$CRD ?)" FichierProjet
CheminProjet="./$FichierProjet"
touch "$CheminProjet"
echo "votre reponse : $FichierProjet"
echo "le chemin du projet : $CheminProjet" | tee -a "$CheminJournal"
if [ -f $CheminProjet ] # if test CheminProjetExiste
then
echo "Le fichier projet existe"
else
echo "Le fichier projet n'existe pas reessayer..."
unset FichierProjet
fi
done # While FicProj
#echo -e "\n====================\nFIN Test affichage WHILE\n========================\n" >>"$CheminJournalDeveloppeur"
if [ ! "$Verbeux" == "True" ] #<<<<<<<<<<<<<<<<<<<<<< OUVRE la redirection selon mode verbeux ou non
then
exec 5>&1 # Lie le descripteur de fichier #5 avec stdout.
exec >>"$CheminJournalDeveloppeur" # envoie stdout dans le #5 et dans le CheminJournalDeveloppeur
exec 2> >(tee -a "$CheminJournalErreur" >&2) # Rétabli la redirection d'erreur et l'affiche 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
else
exec 2> >(tee -a "$CheminJournalErreur" >&2) # Rétabli la redirection d'erreur et l'affiche 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
# ====================================================================================
# Test redirection Erreur FicBidon4
echo "test une erreur volontaire ficBidon4
n'existe pas devrait apparaitre sur stdout et dans le journalErreur et dans journalDeveloppeur "
ls ficbidon4
# ==============================Test redirection Paramètres======================================================
# Test redirection paramètres et messages
echo " Le premier Lancement direct de Progress sans passage par ExportParametres n'affiche pas cette ligne ni de message PID "
progress
echo "Lancement de progress dans fonction IndirectProgress Provoque l'affichage message PID si lancé en second "
IndirectProgress
echo " Second Lancement direct de Progress sans passage par ExportParametres affiche le message "
progress
echo "SECOND Lancement de progress dans fonction IndirectProgress affiche le message "
IndirectProgress
Le script affiché sur stdout
./TRedirProgr6.sh
Quel mode d'affichage des messages en cours d'execution est choisi ?
1) - Mode developpeur : Affiche tous les messages, et les paramètres
2) - Mode utilisateur simple (correspond à tout ce qui est mémorisé dans le journal) : Affiche les messages essentiels MESSAGE DEBUT DE TEST et n'affiche pas le message FIN DE TEST
Choisir le mode d'affichage : 2
Le choix fait 2:- Mode utilisateur simple (correspond à tout ce qui est mémorisé dans le journal) : Affiche les messages essentiels MESSAGE DEBUT DE TEST et n'affiche pas le message FIN DE TEST
choix conforme
Les erreurs sont envoyées dans stdout et $CheminJournalErreuret dans le JournalDeveloppeur
--- quel fichier traiter, donner son nom (peut-être Projet ?)Projet
votre reponse : Projet
le chemin du projet : ./Projet
Le fichier projet existe
ls: impossible d'accéder à 'ficbidon4': Aucun fichier ou dossier de ce type
. .---------------------------
.Lancement de progress dans fonction IndirectProgress Provoque l'affichage message PID si lancé en second
Attente une touche + ENTREE ., une touche pour interrompre.
. . . .d . .
./TRedirProgr6.sh : ligne 72 : 26216 Complété attend
Second Lancement direct de Progress sans passage par ExportParametres affiche le message
Attente une touche + ENTREE ., une touche pour interrompre.
. . . . .d .
./TRedirProgr6.sh : ligne 72 : 26245 Complété attend
.SECOND Lancement de progress dans fonction IndirectProgress affiche le message
Attente une touche + ENTREE ., une touche pour interrompre.
. . . .d .
./TRedirProgr6.sh : ligne 72 : 26261 Complété attend
La sortie du JournalErreur conforme à mes attentes :
ls: impossible d'accéder à 'ficbidon4': Aucun fichier ou dossier de ce type