• Publicidad

Ejecutar un comando de shell/bash en Perl 2

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Ejecutar un comando de shell/bash en Perl 2

Notapor David_Guillen » 2010-02-10 12:58 @582

Hola a todos:

Estoy usando la versión de Perl v5.10.0 en Ubuntu 8

La pregunta que quiero realizar es bastante específica y hace referencia a cómo puedo ejecutar un comando de Shell/Bash desde un programa en Perl y además redirigir sus salidas.

Un ejemplo de lo que me sucede:

· Yo ejecuto este comando desde el terminal "ls &> out.txt" y la salida aparece en un fichero de nombre out.txt.

· Yo ejecuto este mismo comando desde el programa en Perl y me imprime por pantalla y no imprime en el 'log'.


Más info:

Desde el programa de Perl
Si redirijo la salida estándar Ej: ls > out.txt funciona
Si redirijo la salida error Ej: ls 2> out.txt funciona
Si redirijo las dos Ej: ls &> out.txt no funciona

También he probado a llamar a un script de Shell/Bash desde el programa de Perl, pero el funcionamiento es similar.
David_Guillen
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2010-02-10 12:14 @551

Publicidad

Re: ejecutar un comando de shell/bash en Perl 2

Notapor explorer » 2010-02-10 13:43 @613

Bienvenido a los foros de Perl en Español, David_Guillen.

Para ejecutar un comando del entorno, sobre un bash, puedes hacerlo con las funciones system(), exec(), qx() y ``.

Depende de lo que quieras hacer:
· exec(): ejecuta un comando y nunca regresa
· system(): lo mismo que exec(), pero luego continúa con el programa Perl
· qx() y ``: se ejecuta un comando bajo sh, y el resultado (la salida estándar) de la ejecución es lo que devuelve esta función.

En la documentación verás ejemplos de cómo capturar tanto la salida estándar como la salida estándar de error, aunque lo recibirás mezclado.

Si quieres recibir la salida estándar y la de error por separado, hay soluciones como la función tap() del módulo Sysadm::Install, que usa el truco de guardar la salida estándar de error en un fichero temporal.

Y otro tema importante es lo que el propio programa Perl genera. En ese caso, la redirección del shell funciona exactamente igual que con cualquier otro comando del sistema.

Sería interesante ver el código que estás usando.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 28 invitados