[caracas-pm] caracas-pm Digest, Vol 36, Issue 5

Alexis Arnal aarnal at gmail.com
Thu May 24 18:25:29 PDT 2007


Saludos, gracias por las observaciones.

Aunque parece una tontería estuve parte de la mañana y la tarde
peleando con ese pequeño detalle, que como explicaron José, Ernesto,
Luis, .... y como al final de la tarde pude darme cuenta el comando cd
no funciona con system, ya había revisado la función chdir pero me
parecía un poco ilógico que no funcionara cd, ya que había probado
otros comandos como por ejemplo el tar, ls, pwd, y funcionaron bien

Haciendo el debugging me dí cuenta de la observación de Luis donde
afirma que el directorio desde el cual se hace un cd o un chdir no se
modifica, al final cuando termina el script queda en la misma ruta
desde donde se ejecutó el script

En fin, para salir del paso lo hice en bash, en lo que tenga chance lo
hago en completo en Perl


> Saludos, estoy haciendo un programita para ejecutar unas tareas en Perl
>
> a continuacion muestro el extracto del script que me da problemas
>
> system("tar xvzf foo.tgz");
> system('cd foo/CA');
>
> y este es el error:
> Can't exec "cd": No existe el fichero o el directorio at certifoo.pl
> line 27, <S TDIN> line 1.
>
> Aparentemente no se puede ejecutar un cambio de directorio con la
> funci?n system, prob? con las rutas relativas, absolutas, comillas
> dobles, simples, con la tilde para sustituir a system y nada
>
> Alexis Arnal escribi?:
> > system('cd foo/CA');
>
> chdir "cd foo/CA";
>
> cd es un shell built-in. No funcionar? si no est?s dentro de un
> int?rprete de sh.
>
> Jose
>
> As? es, porque 'cd' no es un comando sino una propiedad de cada proceso.
> En el shell, 'cd' es un "builtin" que cambia de directorio. Debes usar
> la funci?n chdir() de Perl. Y en todo caso, probablemente es m?s
> eficiente que hagas todo con Perl.
> --
> Ernesto Hern?ndez-Novich - Linux 2.6.18 i686 - Unix: Live free or die!
> Geek by nature, Linux by choice, Debian of course.
> If you can't aptitude it, it isn't useful or doesn't exist.
> GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3
>
>
> Aparte de lo que ya te comentan previamente siempre es mejor ejecutar
> system() con los argumentos como lista, para as? asegurar que el primer
> elemento de la lista es tratado como comando y los dem?s, manejados
> propiamente como argumentos.
>
> @arr = qw(tar xzvf foo.tar.gz);
> system(@args);
>
> perldoc -f system
>
> --
> David Moreno Garza <damog at ciencias.unam.mx> | http://www.damog.net/
>
> David Moreno Garza wrote:
> > @arr = qw(tar xzvf foo.tar.gz);
> > system(@args);
>
> Quise decir:
>
>  system(@arr);
>
> ...desde luego :-)
>
> --
> David Moreno Garza <damog at ciencias.unam.mx> | http://www.damog.net/
>  Con la fuerza que me da mill?n y medio de Gansitos.
>
>
>
> 1.- Estas seguro que existe el directorio foo/CA. Deberias revisar si el
> tar fue satisfactorio, ya que _  si  _ el directorio es creado por la
> ejecucion del tar y este falla, entonces el directorio no es creado.
>
> 2.- Que vas a hacer luego del cd. Dependiendo de lo que quieras hacer es
> posible que no necesites ese cambio de directorio.
>
>
> Adem?s, cuando hagas "system(qq{cd /foo})" el cambio de directorio no
> es persistente (ie, el proceso que ejecut? la llamada *nunca* cambi?
> de directorio). Puntos adicionales para quien explique por qu? :-)
> M?s puntos adicionales para el que explique este one-liner y su salida:
>
> $ perl -e 'system("cd ..; pwd"); system("pwd")'
> /Users
> /Users/lem
>
>
> Saludos.
>
> -lem
>
>
>
>
> ------------------------------
>
> Message: 8
> Date: Thu, 24 May 2007 16:46:32 -0400
> From: "Nelo R. Tovar" <tovar.nelo at gmail.com>
> Subject: Re: [caracas-pm] Problemas con ejecuci?n de bash dentro de
>         scripts perl
> To: Perl Mongers Caracas - Venezuela <caracas-pm at pm.org>
> Message-ID: <4655F9A8.70808 at gmail.com>
> Content-Type: text/plain; charset=ISO-8859-1
>
> Saludos.
>
> 1.- Estas seguro que existe el directorio foo/CA. Deberias revisar si el
> tar fue satisfactorio, ya que _  si  _ el directorio es creado por la
> ejecucion del tar y este falla, entonces el directorio no es creado.
>
> 2.- Que vas a hacer luego del cd. Dependiendo de lo que quieras hacer es
> posible que no necesites ese cambio de directorio.
>
> Alexis Arnal wrote:
> > Saludos, estoy haciendo un programita para ejecutar unas tareas en Perl
> >
> > a continuacion muestro el extracto del script que me da problemas
> >
> > system("tar xvzf foo.tgz");
> > system('cd foo/CA');
> >
> > y este es el error:
> > Can't exec "cd": No existe el fichero o el directorio at certifoo.pl
> > line 27, <S TDIN> line 1.
> >
> > Aparentemente no se puede ejecutar un cambio de directorio con la
> > funci?n system, prob? con las rutas relativas, absolutas, comillas
> > dobles, simples, con la tilde para sustituir a system y nada
> >
>
>
>
> ------------------------------
>
> Message: 9
> Date: Thu, 24 May 2007 19:14:37 -0400
> From: Jose Luis Rivas Contreras <ghostbar38 at gmail.com>
> Subject: Re: [caracas-pm] Problemas con ejecuci?n de bash dentro de
>         scripts perl
> To: Perl Mongers Caracas - Venezuela <caracas-pm at pm.org>
> Message-ID: <46561C5D.5040802 at gmail.com>
> Content-Type: text/plain; charset=UTF-8
>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Luis Mu?oz escribi?:
> [...]
> > M?s puntos adicionales para el que explique este one-liner y su salida:
> >
> > $ perl -e 'system("cd ..; pwd"); system("pwd")'
> > /Users
> > /Users/lem
>
> Es obvio al ejecutarlo desde `/Users/lem' ... ;-)
>
> Jose Luis.
> - --
>
> Jose Luis Rivas Contreras wrote:
> > > $ perl -e 'system("cd ..; pwd"); system("pwd")'
> > > /Users
> > > /Users/lem
> >
> > Es obvio al ejecutarlo desde `/Users/lem' ... ;-)
>
> Creo que lo que quer?a es que se explicara precisamente esa obviedad :-)
>
> --
> David Moreno Garza <damog at ciencias.unam.mx> | http://www.damog.net/
>  <URL:http://www.georgedillon.com/web/html_email_is_evil.shtml>
-- 
#--------------------
#!/usr/bin/perl -w
# Ing. Alexis Arnal
# GNU/Linux user: 411537
# Debian - Kernel 2.6.7-1-386
# CNE. Caracas - Venezuela
#---------------------
use strict;
print "No basta con alcanzar la sabiduría, es necesario saber utilizarla\n";
print "Marco Tulio Cicerón. 106 AC-43 AC. Escritor, orador y político romano\n";
print "http://www.proverbia.net";
#---------------------


More information about the caracas-pm mailing list