[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [linux] Comment rediriger le stderr vers un autre xterm ?



En fait, il y a un paquet de technique pour le faire :

Une assez propre est de réassigner de nouveaux descripteurs de fichier à
l'execution du bash.

C'est assez simple.

Le bash ouvre trois descripteurs à pour chaque shell et sub-shell :

fd0 est stdin
fd1 est stdout
fd2 est stderr

Tu peux changer le filedescripteur de façon global via un exec.

genre 'exec 2>/dev/monsuperpipe'  (redirige tous les stderr vers le super
pipe)

En fait tu peux rediriger vers tout descripteur de fichier. pratique non ?
ah Unix un plaisire

Dans ton cas, le principe est assez simple, tu rediriges tes
descripteurs de fichier vers un pipe par exemple.

Et ensuite tu as un simple shell ou un tail/tee qui lit le pipe/fifo dans
un autre xterm.

Pour tester, tu peux faire un petit lsof dans ton shell courant, du genre
:

[adulau@oops adulau]$ /usr/sbin/lsof -O -a -p $$ -d1,0,2
COMMAND  PID   USER   FD   TYPE DEVICE SIZE NODE NAME
bash    7608 adulau    0u   CHR  136,3         5 /dev/pts/3
bash    7608 adulau    1u   CHR  136,3         5 /dev/pts/3
bash    7608 adulau    2u   CHR  136,3         5 /dev/pts/3

[adulau@oops adulau]$ exec 2>/dev/null

[dans un autre xterm]

[adulau@oops adulau]$ /usr/sbin/lsof -O -a -p 7608 -d1,0,2
COMMAND  PID   USER   FD   TYPE DEVICE SIZE   NODE NAME
bash    7608 adulau    0u   CHR  136,3           5 /dev/pts/3
bash    7608 adulau    1u   CHR  136,3           5 /dev/pts/3
bash    7608 adulau    2w   CHR    1,3      180280 /dev/null

Simple ?

Sinon, il y a aussi d'autre approche comme la redirection de tout les fd
vers un fichier (plus simple ?) et le tail de l'autre côté ?

J'espère que cela répond à ta question.

adulau

PS : Il y a aussi 'script' qui enregistre ce qui ce passe sur le terminal.


-- 
Alexandre Dulaunoy		http://www.foo.be/
AD993-RIPE			http://www.ael.be/
"People who fight may lose.  People who do not fight have already lost."
  - Bertolt Brecht


On Fri, 24 May 2002, Alain EMPAIN wrote:

> >>On Friday 24 May 2002 15:33, you wrote:
> >> Bonjour,
> >>
> >> pour surveiller une longue application sans perturber l'écran principal
> >> j'aimerais envoyer les éventuels messages (contexte, erreurs, warnings)
> >> dans un autre xterm, au fur et à mesure de leur apparition dans le stderr
> >> de l'application principale.
>
> >A. Dulaunois écrit (+- ;-)
> >Simple, envoyer le stderr dans un pipe que le xterm reprend
>
> Et bien oui, je joue avec des pipes, tee pour sauver l'ensemble des messages
> dans un fichier, grep pour sélectionner les erreurs et les warnings, repipe
> ... et je ne vois pas comment rediriger cela dans un autre xterm.
>
> A la réflexion,  avec 'tty' dans la nouvelle fenetre, j'obtiens son device
> name ex: /dev/pts/3, donc si l'application de base connait le pts/x cela doit
> marcher ( 'echo coucou > /dev/pts/3' ) mais je me demandais s'il n'y avait
> pas une solution toute simple que j'ignorerais (j'apprends tous les jours,
> depuis l'école maternelle ;-).
>
> Il faudrait l'équivalent de xmessage pour la fonction 'tail -f'
>
>     'cat /etc/termcap | xmessage -file  -  '
>
> marche mais il attend d'avoir l'ensemble du stdin pour l'afficher, et puis il
> se positionne sur le début...
>
>

_______________________________________________
Linux Mailing List
Archives: http://www.unixtech.be/mailman/listinfo/linux