[caracas-pm] Problemas con ejecución de bash dentro de scripts perl

"Ricardo C. Fernández de C." l-koshrf at fercusoft.com
Thu May 24 18:38:17 PDT 2007


Luis Muñoz wrote:
> On May 24, 2007, at 4:04 PM, Ernesto Hernandez-Novich wrote:
>
>   
>> 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.
>>     
>
> 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
>   
Y que hago con los llamados "puntos" me dan un cupón para que? :-P

Explicado en términos de BD (estoy armando unas láminas de un curso 
hehehe) el cambio no es persistente por que la ejecución es "atómica" 
solo se llamó, se ejecutó y luego volvio a su punto de inicio (y si 
falla hace un "rollback" y vuelve también a su punto de partida :-D ). 
Es lo mismo cuando sales de una consola  y vuelves a entrar (por login), 
empiezas siempre desde el punto de partida (y supongo que para system() 
su punto de partida cada vez que lo invocas debe de ser la variable de 
entorno del sistema $HOME, seguramente se podría cambiar pero no tengo 
el tiempo ahora de revisar el man :-) ).


En el primer system("cd ..; pwd") te da como resultado /Users por que la 
ejecución de system es completa y termina justo en el momento de que 
termina la función misma (cuando hay algún return de algo), la segunda 
llamada muestra el home por que como dije anteriormente ese siempre será 
el punto de partida de system() (aunque revisando ahora el punto de 
partida es el $PWD del entorno al momento de invocarse lo triste del 
caso es que no puedes hacer un export PWD=/dir parece no afectarlo... 
tendría que leer mas a fondo system().... cuando terminé con PL/SQL... y 
cuando le encuentre alguna útilidad a system() ).

Se pueden usar los puntos para pizza? 8)


More information about the caracas-pm mailing list