Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Ejecutar un script c-shell desde perl

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Vie Ago 22, 2008 5:45 am
miguialberto
Perlero Nuevo
Perlero Nuevo
Registrado: 28 Jul 2008
Mensajes: 28
Ejecutar un script c-shell desde perl Responder citando

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:

Perl:
my $result = system ("/bin/csh -f /script_cshell_code.csh");


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!!
Mensaje Vie Ago 22, 2008 6:48 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
Responder citando

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

Pero a ver si el siguiente ejemplo te puede ayudar:

kk.csh:
csh:
#!/usr/bin/csh
exit 14


Puedo ejecutarlo directamente:
bash:
explorer@joaquin:~/Documents/Desarrollo> ./kk.csh
explorer@joaquin:~/Documents/Desarrollo> echo $?
14


O a través del csh:
bash:
explorer@joaquin:~/Documents/Desarrollo> csh kk.csh; echo $?
14


Y ahora, desde Perl:
bash:
explorer@joaquin:~/Documents/Desarrollo> perl -le '$x = system "csh kk.csh"; print $x >> 8'
14
Mensaje Vie Ago 22, 2008 8:32 am
miguialberto
Perlero Nuevo
Perlero Nuevo
Registrado: 28 Jul 2008
Mensajes: 28
Responder citando

¡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!
Mensaje Vie Ago 22, 2008 8:39 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
Responder citando

$? es válida en entornos sh, pero es %? en entornos csh. Quizá sea eso.
Mensaje Vie Ago 22, 2008 8:53 am
miguialberto
Perlero Nuevo
Perlero Nuevo
Registrado: 28 Jul 2008
Mensajes: 28
Responder citando

Ya había probado con las dos pero nada. Poniendo "%?" me devuelve "echo: No match"....
Mensaje Vie Ago 22, 2008 9:34 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
Responder citando

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: '$?'.

csh:
explorer@portatil:~> csh
/home/explorer> ls /kk ; echo $?
ls: no se puede acceder a /kk: No existe el fichero o el directorio
2
/home/explorer> ls / ; echo $?
bin  boot  dev  etc  home  lib  lost+found  media  mnt  opt  proc  root  sbin  srv  sys  tmp  usr  var  windows
0
Mensaje Vie Ago 22, 2008 9:51 am
miguialberto
Perlero Nuevo
Perlero Nuevo
Registrado: 28 Jul 2008
Mensajes: 28
Responder citando

¡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!
Mensaje Vie Ago 22, 2008 10:34 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
Responder citando

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.
Mensaje Vie Ago 22, 2008 2:05 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 478
Ubicación: Frente al monitor
Responder citando

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

También se puede hacer eso desde Perl:

Perl:
system("/bin/csh -f /script_cshell_code.csh") == 0
    or die "Error al ejecutar: $?\n";


Mira:
bash:
perldoc -f system

Hay ejemplos muy útiles.
Mensaje Lun Ago 25, 2008 1:35 am
miguialberto
Perlero Nuevo
Perlero Nuevo
Registrado: 28 Jul 2008
Mensajes: 28
Responder citando

¡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!
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group