#1 Le 19/11/2020, à 19:43
- philoeil
[RESOLU] Difficulté sur la suspension de redirection d'erreur
Bonjour,
Je me plante pas mal sur les redirections d'erreur : (J'ai essayé de comprendre, en faisant un script test, mais je n'y parviens pas)
Ce que j'aimerais éviter c'est que
exec 2>"$CheminJournalErreur" dirige dans le JournalErreur le menu de selection de la fonction MenuGeneral()
Ma question :
Dans le script test suivant, comment retrouver l'affichage de la fonction MenuGeneral() puis reactiver la redirection vers le JournalErreur pour la suite du script?
Merci bien
#!/bin/bash
CheminJournalErreur="./JournalErreur"
CheminJournal="./Journal"
CheminJournalDeveloppeur="./JournalDeveloppeur"
exec 2>"$CheminJournalErreur"
truncate -s 0 "$CheminJournalErreur"
echo "lancement du script"
TmpTexte=$(echo "
-------------------- Je lance le SCRIPT------------------------- ")
echo "$TmpTexte">>"$CheminJournal"
echo "$TmpTexte">>"$CheminJournalDeveloppeur"
echo "$TmpTexte"
MenuGeneral()
{
echo "
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Menu general :"
PS3="Choisir l'action : "
select itemAct2 in "- Choix 1 " "- Choix lancer 2 " "- Choix Construction 3" "- Choix (re)Construire 4" "- choix5" "- Fin du script"
do
echo "Le choix fait $REPLY:$itemAct2"
# pour tester la variable de type entier :
if let "$REPLY" 2>/dev/null
then
echo "choix conforme"
return
else
echo "Entrée erronée ! variable non numérique"
fi
done
}
ls "fichier n'existe pas"
ls "JournalErreur"
unset reponse2
# ---------------------------------- Gestion select ---------------------------------A
echo "test que les erreurs sont détectable et bien envoyées dans le fichier $CheminJournalErreur"
ls "fichier2 qui n'existe pas"
ls "JournalErreur"
echo "Appel du menu general"
MenuGeneral
echo "Le Fichier Erreur :"
cat $CheminJournalErreur
Dernière modification par philoeil (Le 20/11/2020, à 21:20)
Hors ligne
#2 Le 19/11/2020, à 20:04
- kamaris
Re : [RESOLU] Difficulté sur la suspension de redirection d'erreur
Ça me rappelle https://forum.ubuntu-fr.org/viewtopic.p … #p22289064
Adapté à ton cas, ça donnerait :
tty=$(tty)
exec 2>"$CheminJournalErreur"
…
exec 2>$tty
MenuGeneral()
exec 2>>"$CheminJournalErreur"
…
NB : ne pas oublier >> à partir de la seconde redirection de la sortie d'erreur dans le fichier, sinon ça écrasera ce qui précède.
Dernière modification par kamaris (Le 19/11/2020, à 20:09)
Hors ligne
#3 Le 19/11/2020, à 20:18
- MicP
Re : [RESOLU] Difficulté sur la suspension de redirection d'erreur
Bonjour
…ne pas oublier >> à partir de la seconde redirection de la sortie d'erreur dans le fichier, sinon ça écrasera ce qui précède. …
Du coup, autant utiliser >> dans la première,
sinon, le contenu du fichier $CheminJournalErreur sera "écrasé" à chaque fois que le script sera lancé.
Dernière modification par MicP (Le 19/11/2020, à 20:21)
Hors ligne
#4 Le 19/11/2020, à 20:25
- kamaris
Re : [RESOLU] Difficulté sur la suspension de redirection d'erreur
Oui on peut, mais ça ça modifie le comportement du script de philoeil.
Alors que >> à partir de la seconde redirection seulement rétablit juste le comportement qu'aurait une redirection ininterrompue.
Hors ligne
#5 Le 19/11/2020, à 23:49
- philoeil
Re : [RESOLU] Difficulté sur la suspension de redirection d'erreur
Bonjour,
Merci MicP
Super Sympa Kamaris ça m'a l'air très bien.
Là je vais dormir je testerai demain
MErci
Hors ligne
#6 Le 20/11/2020, à 21:19
- philoeil
Re : [RESOLU] Difficulté sur la suspension de redirection d'erreur
Bonjour,
Mon retour :
pour dire que c'est parfait
Merci encore
Le code test corrigé pour les apprentis de passage :
#!/bin/bash
CheminJournalErreur="./JournalErreur"
CheminJournal="./Journal"
CheminJournalDeveloppeur="./JournalDeveloppeur"
tty=$(tty)
exec 2>"$CheminJournalErreur"
truncate -s 0 "$CheminJournalErreur"
echo "lancement du script"
TmpTexte=$(echo "
-------------------- Je lance le SCRIPT------------------------- ")
echo "$TmpTexte">>"$CheminJournal"
echo "$TmpTexte">>"$CheminJournalDeveloppeur"
echo "$TmpTexte"
MenuGeneral()
{
echo "
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Menu general :"
PS3="Choisir l'action : "
select itemAct2 in "- Choix 1 " "- Choix lancer 2 " "- Choix Construction 3" "- Choix (re)Construire 4" "- choix5" "- Fin du script"
do
echo "Le choix fait $REPLY:$itemAct2"
# pour tester la variable de type entier :
if let "$REPLY" 2>/dev/null
then
echo "choix conforme"
return
else
echo "Entrée erronée ! variable non numérique"
fi
done
}
ls "fichier n'existe pas"
ls "JournalErreur"
# ---------------------------------- Gestion select ---------------------------------A
echo "test que les erreurs sont détectable et bien envoyées dans le fichier $CheminJournalErreur"
ls "fichier2 qui n'existe pas"
ls "JournalErreur"
echo "Appel du menu general"
exec 2>$tty
MenuGeneral
exec 2>>"$CheminJournalErreur"
echo "Le Fichier Erreur :"
cat $CheminJournalErreur
Hors ligne