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

Luis Muñoz lem at cantv.net
Fri May 25 08:27:38 PDT 2007


On May 24, 2007, at 9:38 PM, Ricardo C. Fernández de C. wrote:
> Y que hago con los llamados "puntos" me dan un cupón para que? :-P

Para "Whose Line is it Anyway?"

> [...] 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 [...]


> [...] (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() ).

De alguna manera, esta respuesta está cerca de lo correcto, aunque la  
cosa no va exactamente por ahí.

* En *nix los "procesos" tienen un conjunto de propiedades que forman  
parte de su estado. Una de esas propiedades, es la noción de  
"directorio actual"

* system(), en un sistema *nix, comienza por ejecutar una llamada fork 
() - Esta llamada crea una copia del proceso actual, heredando todas  
las propiedades

Para no entrar en detalles de carpintería, es ese proceso nuevo (el  
que salió del fork() - lo llamaré hijo por naturalidad), es el que  
ejecuta el comando cd (de hecho, ejecuta un shell, que ejecuta el  
comando cd). Es el proceso hijo el que cambió su directorio actual  
con cd. Cuando termina, muere. El proceso padre continúa con el mismo  
estado - Nunca cambió de directorio...

Posíblemente la respuesta para el amigo que necesitaba cambiar de  
directorio hubiera sido chdir(), un builtin de Perl que hace lo mismo  
que cd, pero en el proceso actual :-)

perldoc -f chdir

Por cierto, escribir en $PWD no cambia el directorio, porque es el  
shell quien mantiene esta variable; Cada vez que cambias de  
directorio, el shell actualiza su valor. Sería una mejora a la  
ortogonalidad que uno pudiera cambiarse de directorio escribiendo  
allí. Quedará para la siguiente versión de bash :-)

(Fans de Linux abstenerse de decir como echo "/foo" > /proc/$WHATEVER  
ya lo hace... Esta es una lista de Perl :-)
(Fans de Debian abstenerse de contarnos como es más fácil allí que en  
Fedora :-)

Saludos

-lem



More information about the caracas-pm mailing list