Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
redirection de messages d'erreur vers /dev/null

Bonjour à tous

J'ai un souci pour rediriger des messages d'erreur d'une application lancée depuis xterm.

le topo :

J'ai rédigé un script-shell pour m'afficher les pages du manuel dans evince.
Tout se passe très bien, hormis l'affichage de messages d'erreur dans xterm lorsque je ferme evince. Rien que de très normal, et evince n'est pas en cause, toutes les applications lancées depuis xterm, et fermées depuis le WM, affichent un messages d'erreur lorsqu'on les ferme, non?

Or, pour faire plus propre, je souhaite que ces messages ne soient pas affichés, en les redirigeant vers /dev/null...

J'ai (bien?) relu l'ABS de Mendell Cooper, sans résultat...

Pour ne rien omettre, je mets le script en question :
#!/bin/bash

## converti les man pages en pages .pdf et les affiche dans evince (par défaut)

Dir_man="/home/nbah/mes_Documents/pdf2man"
Fic_ps=""$Dir_man"/"$1".ps"
Fic_pdf=""$Dir_man"/"$1".pdf"

shopt -s expand_aliases 
alias pdfReader="/usr/bin/evince"

if [ -f $Fic_pdf ]; then
        pdfReader $Fic_pdf
else
        if [ ! -z $1 ]; then
        man -t $1 > $Fic_ps #*
                if [ $? -eq 0 ]; then
                        ps2pdf $Fic_ps $Fic_pdf && rm $Fic_ps #*
                        pdfReader $Fic_pdf &2>/dev/null # (?)
                else
                        echo -e '\033[1m'" Cette page de man n'existe pas. Es-tu sûr de chercher \""'\033[0m'"$1"'\033[1m'"\" ?"'\033[0m'
                fi
        else
        echo "Il faut entrer le nom d'une commande documentée dans les pages de man !"
        fi
fi
[^]*trouvé dans les Trucs & Astuces sur Léa-Linux : [Convertir_les_pages_man_en_pdf][/^]

C'est tout bête! mais j'ai dû manquer quelque chose parce que ça marche pas!!!

Et puis, tiens, je vous mets aussi les messages d'erreur :
Citation
xterm
(evince:4583): Gtk-CRITICAL **: gtk_tree_model_foreach: assertion `GTK_IS_TREE_MODEL (model)' failed

(evince:4583): Gtk-CRITICAL **: gtk_list_store_clear: assertion `GTK_IS_LIST_STORE (list_store)' failed
J'ai essayé en ajoutant '--gtk-no-debug=all' à l'appel de evince, sans succès.
[^]Je ne sais pas, alors j'essaie un peu tout[/^]

Est-qu'on peut faire en sorte que ce type de message n'apparaisse pas ?

par avance merci pour votre aide

Poste le Monday 14 April 2008 18:38:50
Répondre     Citer    
Re: redirection de messages d'erreur vers /dev/null
Envoyé par: shellout

redirection de seulement stderr:

command 2> /dev/null

redirection de stdout et stderr:

command >/dev/null 2>&1

mets des " " autour de tes variables "$Fic_pdf" ou "$1" sinon tu auras des problemes
avec les noms de fichier contenant des espaces.

Poste le Monday 14 April 2008 18:56:56
Répondre     Citer    
Re: redirection de messages d'erreur vers /dev/null

Bonsoir shellout

Je viens d'essayer, mais ça ne fonctionne pas non plus...
J'ai essayé, je crois, toutes les possibilités décrites dans l'ABS (sans succès), et je te fais grâce des pages internet que j'ai parcourues qui confirment tes dires, mais rien n'y fait!

Je ne connais pas (pas encore) de nom de page de man qui contienne des espaces, mais merci du conseil. Ça me servira peut-être dans un autre script.

Poste le Monday 14 April 2008 19:19:36
Répondre     Citer    
Solution @ redirection de messages d'erreur vers /dev/null

J'ai apparemment trouvé une (sinon la) manière d'éluder le "problème" :
pdfReader "$Fic_pdf" &
qui est la bonne façon de lancer une application graphique depuis xterm, et qui permet de récupérer le prompt avant de fermer l'application! smiling smiley#

Poste le Monday 14 April 2008 21:20:15
Répondre     Citer    
Re: redirection de messages d'erreur vers /dev/null

:-F Solution

et Solution a fait:
Citation

Argh, tu m'as tuée, j'suis morte!

Ça a marché... jusqu'à ce que je rééssaie à l'instant. ?-(

Et j'ai retrouvé les messages d'erreur qui ne me manquaient pas ^^

grrr

Pour l'instant, je récupère le prompt jusqu'à ce que je ferme l'application. À ce moment, les messages s'affichent, et le prompt ne réapparait qu'après un <-'(Enter)

Poste le Monday 14 April 2008 23:23:25
Répondre     Citer    
Re: redirection de messages d'erreur vers /dev/null
Envoyé par: shellout

honnetement j'ai un peu de mal a croire que :

pdfReader "$Fic_pdf" > /dev/null 2>&1

ne marche pas, reessaye.

ca voudrait dire que "pdfreader (tu devrais utiliser une variable plutot qu'un alias) ecrit directement
dans le terminal et je n'y crois pas.

met ca derriere les 2 endroits ou tu appelles pdfreader, dans le bon ordre.


pour ce qui est des espaces, j'ai simplement vu que tu testes $1, et que donc tu ne sais pas à priori ce que qu'elle peut contenir. Par example ton if: if [ ! -z $1 ]; te donneras une erreur. (tu peux ecrire tout simplement if [ "$1" ]; plutot que ! -z)

J'ai aussi dit ca car tu places tes quotes aux mauvais endroits, exemple:

Fic_pdf=""$Dir_man"/"$1".pdf"

tu mets des "" autout de .pdf qui n'en a pas besoin, mais tu evites soigneusement d'en mettre autour des variables. Comme les variables sont remplacés à l'interieur des quotes:

Fic_pdf="$Dir_man/$1.pdf"

est plus simple et plus sur

Poste le Tuesday 15 April 2008 10:03:46
Répondre     Citer    
Re: redirection de messages d'erreur vers /dev/null

Bonjour shellout


Tu ne le crois pas, et tu as raison. A force de triturer ce script, j'avais dû laisser un & devant >/dev/null 2>&1, alors qu'il faut le mettre après. Ainsi, je récupère le prompt avant la fermeture de evince, et plus de messages qui font peur!

Citation
shellout
tu devrais utiliser une variable plutot qu'un alias
J'avais commencé par mettre : pdfReader=$(/usr/bin/evince), et ça ne marchait pas : ça lançait evince, mais ce dernier n'ouvrait pas le fichier .pdf

Citation
shellout
tu ne sais pas à priori ce que qu'elle peut contenir
a priori*, si : un nom de commande !? (je ne suis pas sûr de te suivre...)

if [ "$1" ]; : corrigé!

Fic_pdf="$Dir_man/$1.pdf" : corrigé!

Je te remercie d'avoir noté le soin que je porte à la rédaction de mes scripts yawning smiley)


Tout fonctionne, à présent, comme je le souhaitais! Je n'y touche plus.

Je tiendrai compte de tes conseils pour mes prochains scripts.

Encore merci, et bonne journée

[v]*Il n'a pas d'accent, parceque c'est une expression en latin.[/v]

Poste le Tuesday 15 April 2008 11:46:39
Répondre     Citer    
Re: redirection de messages d'erreur vers /dev/null
Envoyé par: shellout

Citation

a priori*, si : un nom de commande !?

Oui dans le cas normal, mais comme ce nom viens de l'exterieur, tu ne peux pas le garantir.
Donc ca va marcher jusqu'à ce quelqu'un mette "man man", ce n'est pas grave dans ton cas tu auras
juste un message d'erreur de la part de bash.
C'est juste une remarque d'ordre générale sur l'utilisation des "" qui est le truc qui pose peut être le plus de problème.

$( ) c'est la meme chose en mieux que ` ` et c'est remplacer par ce que la commmand affiche

var=$(echo foo) # la variable contient foo

si tu veux mettre la commande dans la variable:
pdfreader=evince
puis:
$pdfreader monfichier

(ici tu sais qu'il n'y aura pas d'espace dans pdfreader donc tu peux te passer des " ", mais les mettre
ne pose pas de probleme: "$pdfreader" fichier)

Poste le Tuesday 15 April 2008 11:58:29
Répondre     Citer    
Re: redirection de messages d'erreur vers /dev/null

bin, non. 'man2pdf man man' ne génère pas d'erreur, même en retirant les redirections.
$1 assure que seul le premier argument sera pris en compte. Un second argument, séparé du premier par un espace, est simplement ignoré.

En fait, je pourrais faire ouvrir autant d'instance d'evince qu'il y a d'arguments à la suite de l'appel du script avec :
for i in "$@"; do
pdfReader $i.pdf
done

non?

Poste le Tuesday 15 April 2008 12:40:20
Répondre     Citer    
Re: redirection de messages d'erreur vers /dev/null
Envoyé par: shellout

man2pdf man man #non

mais:

man2pdf "man man" #oui

Poste le Tuesday 15 April 2008 12:44:32
Répondre     Citer    
Re: redirection de messages d'erreur vers /dev/null

non plus. pas sur mon poste.

Poste le Tuesday 15 April 2008 13:08:23
Répondre     Citer    
Re: redirection de messages d'erreur vers /dev/null
Envoyé par: shellout

$ set -- "man man"; if [ $1 ];then echo foo;fi 
bash: [: man: unary operator expected

set -- "man man"; if [ "$1" ];then echo foo;fi
foo

Poste le Tuesday 15 April 2008 13:35:41
Répondre     Citer    
Re: redirection de messages d'erreur vers /dev/null

euh, désolé. J'ai validé un peu vite.
Je ne sais plus si ton dernier messages parle du script normal, ou de mon post de 12:40 (c'était une hypothèse avec des " " posés à bon escient).
Donc, pour être précis,
avec le script normal
Citation

man2pdf man man
et
Citation

man2pdf "man man"
, ont le même effet :ces commandes affichent le ficher man.pdf;
sinon, je n'ai pas testé l'hypothèse $@. Je ne suis, d'ailleurs, pas certain d'en avoir l'utilité, puisque le prompt est libéré... l'utilisateur pourra éventuellement en cours de lecture ouvrir une autre page, mais plusieurs à la fois ...?

Poste le Tuesday 15 April 2008 13:53:23
Répondre     Citer    
Re: redirection de messages d'erreur vers /dev/null

J'ai l'impression de jouer avec un coup de retard maintenant ^^
Citation
shellout
$ set -- "man man"; if [ $1 ];then echo foo;fi
bash: [: man: unary operator expected

set -- "man man"; if [ "$1" ];then echo foo;fi
foo
comme ça, oui. Mais pas avec le script. ?

Poste le Tuesday 15 April 2008 14:06:58
Répondre     Citer    
Re: redirection de messages d'erreur vers /dev/null

Voilà quelques précisions qui n'ont aucun rapport avec le sujet du thread.
Citation
|/|BaH
Je ne connais pas (pas encore) de nom de page de man qui contienne des espaces

Oui, mais voilà, qu'advient-il quand on cherche une page dans une section précise des pages de man?
Par exemple : si je fais 'man2pdf terminfo', man(2pdf) ouvre la page terminfo de la section 3. Mais, il y a aussi une page terminfo dans la section 5, à laquelle man2pdf n'accède que si on embrasse 5 terminfo avec des ". Ce qui, moi, ne me traumatise pas, mais, peut gêner un utilisateur non averti.

Donc, il n'y a pas de commande avec des espaces, mais l'accès à certaines pages de man nécessite (si on ne veut pas utiliser de ") d'utiliser deux arguments, le premier étant facultatif, mais qui doit être un chiffre ( 0 < n <= 9), etc. Bref, y a plein d'autres petites choses à préciser...

Poste le Saturday 19 April 2008 10:51:47
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
redirection de messages d'erreur vers /dev/null
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons