#1 Le 16/11/2020, à 21:30
- philoeil
[RESOLU] Redirection d'erreur et read
Bonjour,
Peut-on éviter le problème suivant :
J'avais pensé utiliser :
exec 2>"$CheminJournalErreur"
Pour capturer chaque erreur de mon script dans un fichier JournalErreur
lors de l'essai je suis tombé sur un problème : certaines sorties qui ne sont pas des erreurs vont dans le JournalErreur
exemple Script test :
#!/bin/bash
CheminJournalErreur="./JournalErreur"
CheminJournal="./Journal"
CheminJournalDeveloppeur="./JournalDeveloppeur"
exec 2>"$CheminJournalErreur"
truncate -s 0 "$CheminJournalErreur"
TmpTexte=$(echo "
-------------------- Je lance le SCRIPT------------------------- ")
echo "$TmpTexte">>"$CheminJournal"
echo "$TmpTexte">>"$CheminJournalDeveloppeur"
echo "$TmpTexte"
# ---------------------------------- Gestion nom projet ---------------------------------
while [[ -z "$reponse" ]] # While Repon1
do # While Repon1
read -p "Un projet existe-t-il (ou vient d'être créé) ? ....... (Y pour YES)" reponse
echo "votre reponse : $reponse"
if [[ "$reponse" == "Y" ]] #If repon1
then #If repon1
echo " La reponse était Y "
else #If repon1
echo "la reponse n'était pas Y"
fi #If repon1
done # While Repon1
ici donne :
$ ./TREr1.sh
-------------------- Je lance le SCRIPT-------------------------
Sans poser la question à l'écran
read -p "Un projet existe-t-il (ou vient d'être créé) ? ....... (Y pour YES)" reponse
La question est dans le fichier JournalErreur
$ cat JournalErreur
Un projet existe-t-il (ou vient d'être créé) ? ....... (Y pour YES)p
Pourquoi ?
Comment l'éviter ?
Merci de votre aide
Dernière modification par philoeil (Le 17/11/2020, à 19:09)
Hors ligne
#2 Le 16/11/2020, à 21:39
- kamaris
Re : [RESOLU] Redirection d'erreur et read
printf '%s' 'Un projet existe-t-il (ou vient d'être créé) ? ....... (Y pour YES)'
read reponse
echo "votre reponse : $reponse"
?
Ou bien
2>&1 read -p 'Un projet existe-t-il (ou vient d'être créé) ? ....... (Y pour YES)' reponse
echo "votre reponse : $reponse"
Dernière modification par kamaris (Le 16/11/2020, à 21:56)
Hors ligne
#3 Le 16/11/2020, à 21:42
- pingouinux
Re : [RESOLU] Redirection d'erreur et read
Bonsoir,
C'est parce que read -p envoie le texte sur stderr.
Hors ligne
#4 Le 16/11/2020, à 21:56
- philoeil
Re : [RESOLU] Redirection d'erreur et read
Merci KAmaris mais je n'ai pas compris
Merci Pingouinux
J'avais bien vu que read -p envoyait le texte sur stderr
Je ne comprends pas pourquoi.
Voulez-vous dire que read -p va obligatoirement sur stderr ?
Pouvez-vous expliquer ou me donner de la lecture sur le sujet ?
read -p ne pourrait-il pas etre dirigé vers stdout ?
Hors ligne
#5 Le 16/11/2020, à 22:02
- kamaris
Re : [RESOLU] Redirection d'erreur et read
La deuxième solution que j'ai donnée en #2 le redirige vers stdout, mais on s'est peut-être croisé car j'ai édité mon message après coup.
Hors ligne
#6 Le 16/11/2020, à 22:36
- MicP
Re : [RESOLU] Redirection d'erreur et read
Bonjour
… me donner de la lecture sur le sujet ? …
Voir la doc concernant commande read, qui fait partie des commandes builtins de l'interpréteur de commandes bash
et qui peut être directement affichée par le retour de la ligne de commande suivante :
man --pager='less -p " read \["' bash
les redirections de flux :
man --pager='less -p "^REDIRECTION"' bash
et la page web suivante pour les flux stdin stdout et stderr : https://wiki.bash-hackers.org/howto/red … n_tutorial
Dernière modification par MicP (Le 17/11/2020, à 19:12)
Hors ligne
#7 Le 17/11/2020, à 19:08
- philoeil
Re : [RESOLU] Redirection d'erreur et read
Bonjour,
Merci MicP pour la lecture, je comprends mieux
Merci Pingouinux effectivement l'explication de MicP en parle bien Bash Hackers Wiki
Merci Kamaris pour tes 2 solutions parfaites complètement fonctionnelles
Bravo à tous
Hors ligne
#8 Le 17/11/2020, à 19:21
- MicP
Re : [RESOLU] Redirection d'erreur et read
Et il y a aussi une belle page pleine de liens passionnants
concernant les scripts bash (et autres interpréteurs de commande) : https://wiki.bash-hackers.org/
Dernière modification par MicP (Le 17/11/2020, à 19:26)
Hors ligne