Contenu | Rechercher | Menus

Annonce

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