• Publicidad

Ejecución de comandos del shell desde un script

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

Ejecución de comandos del shell desde un script

Notapor dom87 » 2011-04-25 12:52 @578

Saludos a todos,

Necesito realizar una copia de base de datos gestionada con MySQL utilizando el comando 'mysqldump' del shell desde un script Perl. Ya he intentado con el uso de la función system("linea_comandos"), y también con las comillas invertidas pero no veo resultados.

Esta es mi línea en el script Perl:
my $bd = system("mysqldump agnbd -u root -p$pass > /usr/share/agn/bd/bd.sql");

Desde el shell todo marcha Ok, pero al incluirlo en mi script Perl, no pasa nada.

¿Alguna sugerencia?

Gracias de antemano.
Última edición por dom87 el 2011-04-28 10:59 @499, editado 1 vez en total
Avatar de Usuario
dom87
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2011-04-25 10:18 @471
Ubicación: Cuba, La Habana

Publicidad

Re: Ejecución de comandos del shell desde un script

Notapor explorer » 2011-04-25 13:02 @585

Bienvenido a los foros de Perl en español, dom87.

La diferencia entre system() y las comillas invertidas (que son lo mismo que qx()) es que system() devuelve el estado del resultado de la ejecución (un valor de verdad, normalmente), mientras que las comillas invertidas (o el operador qx()), devuelve la salida estándar devuelta por el comando.

Depende de lo que quieras conseguir, deberás usar uno u otro.

Ahora bien, viendo la línea que estás ejecutando, veo una cosa rara: el carácter '.' entre '-p' y el valor de la contraseña.

Según la documentación de mysqldump, hay dos formas de indicar la contraseña en la línea de comandos:

--password[=password]

-p[password]

Es decir: o pones la palabra completa 'password', seguida del carácter '=' y seguida de la contraseña, o usas la opción '-p' seguida inmediatamente por la contraseña.
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

Re: Ejecución de comandos del shell desde un script

Notapor dom87 » 2011-04-28 10:04 @461

Sí, explorer, lo del carácter '.' fue un error mio, pero sigo sin tener lo que quiero. Pruebo con el password seguido de la opción -p, pero nada. Por cierto la salida usando system() es 512, ¿qué significa?

Saludos y agradecido
Avatar de Usuario
dom87
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2011-04-25 10:18 @471
Ubicación: Cuba, La Habana

Re: Ejecución de comandos del shell desde un script

Notapor explorer » 2011-04-28 10:33 @481

dom87 escribiste:Por cierto la salida usando system() es 512, ¿qué significa?

system() devuelve en dos bytes el resultado de la ejecución. En el byte bajo está la señal que obligó a terminar el programa, mientras que en el byte alto está el valor que el programa devuelve como resultado de la ejecución.

512 es 0x0200, o sea, que el programa ha devuelto un '2'.

Según la documentación de MySQL, el resultado de la ejecución del cliente de mysql puede ser:
'00' indica éxito
'01' indica un aviso
'02' indica “no encontrado”


Así que el '2' indicaría que "algo" no se ha encontrado: la base de datos, el nombre de usuario o la contraseña.

He repasado algún código en que hacía lo mismo, y te pongo el que a mí me funciona:
system("/usr/bin/mysqldump -u root --password=postrulagosolideo $APP_DB |zip -q $PATH_BACKUP_DB -");

Observa que pongo el nombre de la base de datos al final. Además, invoco la ruta completa a mysqldump. Y la salida del comando es entubada al compresor zip (para que ocupe menos en disco, claro).
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

Re: Ejecución de comandos del shell desde un script

Notapor dom87 » 2011-04-28 10:58 @498

Bueno, al fin,

Gracias al log de errores de mi sistema supe que el directorio donde estaba intentando guardar el archivo no tenía los permisos de escritura (lo cual no se notifica al ejecutar el script). Gracias por el interés, explorer, ya veo que nunca está de más recurrir a servicios de foros como éste, que por cierto, lo considero bastante completo,

saludos
Avatar de Usuario
dom87
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2011-04-25 10:18 @471
Ubicación: Cuba, La Habana


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 32 invitados

cron