[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