[P] Redireccionar salida de comandos

Francisco Obispo fobispo at nic.ve
Mon Mar 17 08:02:27 CST 2003


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Cierto.. De hecho es mucho mas práctico.. no estaba tomando en cuenta
lo del subproceso,... :-S

Saludos


Ernesto Hernandez-Novich wrote:

|On Mon, 17 Mar 2003, Francisco Obispo wrote:
|
|>ahora para responder tu pregunta utiliza:
|>
|>open(ERRORLOG,">/dev/null");
|>*STDERR=*ERRORLOG;
|>
|>recuerda cerrar el filehandle al final del programa..
|>
|>close(ERRORLOG);
|>
|>
|>de esta forma todo lo que se genere al STDERR va a ser enviado a 
/dev/null..
|
|
|Esto no reconecta el STDERR a /dev/null, sino que altera el espacio de
|nombres para "simular" la reconexión, pero _solamente_ el del script Perl,
|En una reconexión "verdadera" ocurriría la siguiente secuencia de
|llamadas al sistema
|
|close(2)           ; Cierra 2, correspondiente al stderr
|open(/dev/null)    ; Abre /dev/null en el _primer_ descriptor libre, que
|                   ; es 2 en virtud de haber sido cerrado inmediatamente
|           ; antes y en consecuencia, /dev/null se convierte en
|           ; el nuevo stderr. Esto es exactamente lo mismo que
|           ; pasa cuando uno hace 2> /dev/null en el shell.
|
|y sería "heredado" por los procesos hijos. El método que propone
|Francisco no cierra el descriptor 2, sino que abre uno nuevo con el open
|y luego hace una alteración en la tabla de símbolos de Perl, de manera
|que el _símbolo_ STDERR apunte a la misma información que el símbolo
|_ERRORLOG_; el efecto en el programa Perl es que la salida va a parar a
|otra parte diferente al STDERR tradicional, pero por un "alias" en la
|tabla de símbolos y no por una redirección formal como se acostumbra en
|Unix.
|
|Por eso es que ese método no "reconecta" el STDERR de procesos hijo
|invocados vía system/open. Puedes verificarlo con
|
|$ perl
|open E, ">/dev/null";
|*STDERR = *E;
|open F,"| ls estosisale"; # Suponiendo que el archivo 'estosisale' no 
existe
|print STDERR "Esto no sale";
|close E;
|close F;
|^D
|ls: estosisale: No such file or directory
|
|Que es lo que Luis quiere que no pase. Tiene que usar la redirección del
|shell o bien hacer su par fork/exec manualmente.


- --
__________________________________________________________________
Francisco Jose Obispo Semidey  
System Administrator            
ccTLD .VE Technical Contact - http://www.nic.ve
CNTI - REACCIUN - http://www.cnti.ve    
Work: +58 212 709 5257
GPG Fingerprint: 23FE 02B7 2E9A 24DB 51F3  29CB 87CF 3C30 3236 D09D
___________________________________________________________________
MOTD:
hubub, hubub, HUBUB, hubub, hubub, hubub, HUBUB, hubub, hubub, hubub.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.7 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQE+ddVyh888MDI20J0RAsauAJ9IOeuhF0ffuqP7qFqHNkvy59TgCQCfQ7Fm
tF6el7o/kF1KABKLCHBEn5I=
=c3Cq
-----END PGP SIGNATURE-----


------------------------------------------------------------------------
Enviar e-mail a <majordomo at pm.org> colocando en el cuerpo:
"UNSUBSCRIBE caracas-pm-list" para desuscribirse.
"INFO caracas-pm-list" para conocer las reglas de etiqueta.
------------------------------------------------------------------------



More information about the caracas-pm mailing list