• Publicidad

Ejecutar un script c-shell desde perl

¿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 script c-shell desde perl

Notapor miguialberto » 2008-08-22 06:45 @322

Hola,

Necesito ayuda con un problemilla que tengo con un script c-shell. Mi script en Perl, que está corriendo bajo Linux, tiene que ejecutar un script en c-shell. Para ello hago una llamada con "system" y lo ejecuta correctamente. Mi problema es que necesito el valor de retorno de ese script. Si pongo algo como:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $result = system ("/bin/csh -f /script_cshell_code.csh");
 
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


El valor que se me queda en $result es el que devuelve la shell, no el del script en sí.

¿Alguna ayuda? ¿Puede ser que haya alguna variable global en la shell donde se almacenen estos resultados temporales?

¡¡Gracias!!
miguialberto
Perlero nuevo
Perlero nuevo
 
Mensajes: 44
Registrado: 2008-07-28 06:13 @301

Publicidad

Notapor explorer » 2008-08-22 07:48 @366

Los resultados quedan almacenados en %? (o $? en bash).

Pero a ver si el siguiente ejemplo te puede ayudar:

kk.csh:
Sintáxis: [ Descargar ] [ Ocultar ]
  1. #!/usr/bin/csh 
  2. exit 14 


Puedo ejecutarlo directamente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
explorer@joaquin:~/Documents/Desarrollo> ./kk.csh
explorer@joaquin:~/Documents/Desarrollo> echo $?
14
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


O a través del csh:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
explorer@joaquin:~/Documents/Desarrollo> csh kk.csh; echo $?
14
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y ahora, desde Perl:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
explorer@joaquin:~/Documents/Desarrollo> perl -le '$x = system "csh kk.csh"; print $x >> 8'
14
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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

Notapor miguialberto » 2008-08-22 09:32 @439

¡Gracias por la rápida contestación!

La verdad es que lo estoy intentando pero me da todo el rato un error del tipo "Variable syntax" cada vez que intento un "echo $?". ¿Sabes a qué se puede deber?

¡Gracias de nuevo!
miguialberto
Perlero nuevo
Perlero nuevo
 
Mensajes: 44
Registrado: 2008-07-28 06:13 @301

Notapor explorer » 2008-08-22 09:39 @444

$? es válida en entornos sh, pero es %? en entornos csh. Quizá sea eso.
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

Notapor miguialberto » 2008-08-22 09:53 @453

Ya había probado con las dos pero nada. Poniendo "%?" me devuelve "echo: No match"....
miguialberto
Perlero nuevo
Perlero nuevo
 
Mensajes: 44
Registrado: 2008-07-28 06:13 @301

Notapor explorer » 2008-08-22 10:34 @482

Acabo de darme cuenta de que he metido la pata... revisando la página de manual de csh(1), '%?' se refiere a una variable especial para colocar en el 'prompt'.

La correcta variable de entorno sigue siendo la misma que en sh: '$?'.

Sintáxis: [ Descargar ] [ Ocultar ]
  1. explorer@portatil:~> csh 
  2. /home/explorer> ls /kk ; echo $? 
  3. ls: no se puede acceder a /kk: No existe el fichero o el directorio 
  4. /home/explorer> ls / ; echo $? 
  5. bin boot dev etc home lib lost+found media mnt opt proc root sbin srv sys tmp usr var windows 
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

Notapor miguialberto » 2008-08-22 10:51 @494

¡Gracias de nuevo! Pero no sé qué le pasa al servidor pero me sigue dando el error de "Variable syntax"... antes he dicho que corría bajo Linux por simplificar, pero la verdad es que es un servidor Solaris que no sé si tendrá Unix o Linux instalado, pero vamos, me imagino que eso no debería afectar a la csh...

He intentado también redireccionar la salida a un fichero (csh file > file2) pero el fichero2 también está vacío. He leído que con csh no se puede hacer redirecciones ni operaciones con ficheros que se suelen hacer normalmente en Bash, pero por probar...

Si encuentro solución lo comento.

¡Ciao y gracias!
miguialberto
Perlero nuevo
Perlero nuevo
 
Mensajes: 44
Registrado: 2008-07-28 06:13 @301

Notapor explorer » 2008-08-22 11:34 @524

Huy, huy, huy... qué lío...

Una cosa es Solaris y otra cosa es Linux. Y los dos son variantes Unix.

Y en cuanto a redireccionar ficheros, sí que se puede hacer. Solo tienes que consultar su página de manual.
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

Notapor creating021 » 2008-08-22 15:05 @670

¿No sería mejor usar IPC::Open3?

También se puede hacer eso desde Perl:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
system("/bin/csh -f /script_cshell_code.csh") == 0
    or die "Error al ejecutar: $?\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Mira:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
perldoc -f system
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Hay ejemplos muy útiles.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor miguialberto » 2008-08-25 02:35 @149

¡Muchas gracias a los dos!

Como dice creating21 hay formas de rodear un poco el problema para ver el valor que devuelve la función. No obstante, lo más cómodo era saber cómo se llama la variable donde se almacena el último valor devuelto por la ultima función ejecutada. Al final y de chiripa he encontrado la variable:

$status

Recordar que esta variable solo (que yo sepa) tiene sentido en la máquina que estoy corriendo el programa, que es una Solaris.

¡Ciao!
miguialberto
Perlero nuevo
Perlero nuevo
 
Mensajes: 44
Registrado: 2008-07-28 06:13 @301


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron