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 06/03/2022, à 16:35

philoeil

redirection provoque une erreur d'affichage une solution ?

Bonjour,

Dans un script j'avais un affichage que je ne comprenais pas
j'ai isolé les lignes pertinentes qui reproduisent le phénomène ci-dessous
Je ne comprends pas comment éviter cet affichage

Le script exemple produisant l'erreur :

#!/bin/bash
attend()
{
   
 exec 2>"$TermTTY"   # Suspend la redirection d'erreur
  exec 1>"$TermTTY" # 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..11}  
   do     
         if [ $i -eq 11 ]
         then
            echo -en "\r----------------------   \r"
         else
            echo -ne " ." 
            sleep 0.3
         fi
   done
done

}

progress()
{
# printf "Attente1 une touche + ENTREE ."  # NE s'aficherait pas en mode non verbeux

 exec 2>"$TermTTY"   # Suspend la redirection d'erreur
 exec 1>"$TermTTY" # re affiche les commande suivante sur stdout et interrompt l'envoi de stdout au  journal developpeur (Commun mode Verbeux ou pas)
attend & PROGR_PID=$!

  echo -e ".... ENTREE pour continuer"
        2>&1 read repon
  unset repon
echo "le processus $PROG_PID va etre tué"

 exec 5>&1  # Lie le descripteur de fichier #5 avec stdout.
 exec 2>"$TermTTY"   # Suspend la redirection d'erreur
kill $PROGR_PID
}
TailleMo=0
REP="./ActionDoublons.txt" # Un fichier texte test à afficher 
CheminJournalDeveloppeur="./JournalDeveloppeur"
CheminJournal="./Journal"
CheminActionDbl="."
CheminJournalErreur="./JournalErreur"

truncate -s 0 "$CheminJournalErreur"
truncate -s 0 "$CheminJournal"
truncate -s 0 "$CheminJournalDeveloppeur"
# ================================ Premiere redirections des erreurs =============================================================
TermTTY=$(tty)
      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
echo -e "\ntest 1 de progress"
progress
exec 2>"$TermTTY"   # Suspend la redirection d'erreur
exec 1>"$TermTTY" # re affiche les commande suivante sur stdout et interrompt l'envoi de stdout au  journal developpeur (Commun mode Verbeux ou pas)

Le resultat avec l'affichage que je voulais éviter :

./TPRogr_For_RedirErr3.sh : ligne 58 :  5869 Complété              attend
$ ./TPRogr_For_RedirErr3.sh 

test 1 de progress
.... ENTREE pour continuer
 . . . .
le processus  va etre tué
./TPRogr_For_RedirErr3.sh : ligne 58 :  5869 Complété              attend

Le même code en commentant

    #  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

donne le résultat correct

$ ./TPRogr_For_RedirErr3.sh 

test 1 de progress
.... ENTREE pour continuer
 . . . .
le processus  va etre tué

Que faudrait-il faire pour ne pas commenter les lignes et ne pas avoir se message ?

Merci

Hors ligne

#2 Le 08/03/2022, à 20:01

Watael

Re : redirection provoque une erreur d'affichage une solution ?

j'ai testé le script (tel que donné au #1), et chez moi il ne reproduit pas d'erreurs. :neutral:

PS : j'ai fait cette réponse il y a 2 jours, mais il y a eu un coup de propre sur la discussion. smile


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 08/03/2022, à 20:47

Tawal

Re : redirection provoque une erreur d'affichage une solution ?

Hello,

Je pense que ce retour (qui n'est pas une erreur à mon sens) vient du fait que le contrôle des tâches est actif.
Pour le désactiver :

set +m

Edit:
J'illustre :

$ echo $-
himBHs
$ 
$ sleep 10 &
[2] 1577197
$ kill $!
[2]+  Complété              sleep 10
$ 
$ set +m
$ 
$ sleep 10 &
[2] 1577945
$ kill $!
$

Dernière modification par Tawal (Le 08/03/2022, à 20:53)


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#4 Le 08/03/2022, à 20:53

Watael

Re : redirection provoque une erreur d'affichage une solution ?

comme, par défaut, pour tout script.

j'ai copié le script tel quel, et il s'est déroulé sans erreurs.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 08/03/2022, à 21:06

Tawal

Re : redirection provoque une erreur d'affichage une solution ?

Ah oui, idem, pas d'erreurs (avec ou sans le contrôle des tâches).

Je ne sais pas alors sad


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne