Lo que intentas hacer no es posible. La razón de esto es que en un sistema POSIX (Linux, OSX, etc.), un proceso hijo no puede modificar el entorno de un proceso padre. Esto incluye modificar el directorio de trabajo del proceso padre y las variables de entorno.
Cuando usted está en la línea de comandos y que vaya a ejecutar la secuencia de comandos de nodo, el proceso actual ( bash
, zsh
, lo que sea) genera un nuevo proceso que tiene su propio entorno, por lo general una copia de su entorno actual (es posible cambiar esto a través de llamadas al sistema ; pero eso está más allá del alcance de esta respuesta), lo que permite que ese proceso haga lo que necesite hacer en completo aislamiento. Cuando el subproceso sale, el control se devuelve al proceso de su shell, donde el entorno no se ha visto afectado.
Hay muchas razones para esto, pero por una, imagine que ejecutó un script en segundo plano (vía ./foo.js &
) y, mientras se ejecutaba, comenzó a cambiar su directorio de trabajo o anular su archivo PATH
. Eso sería una pesadilla.
Si necesita realizar algunas acciones que requieren cambiar el directorio de trabajo de su shell, necesitará escribir una función en su shell. Por ejemplo, si está ejecutando Bash, puede poner esto en su ~/.bash_profile
:
do_cool_thing() {
cd "/Users"
echo "Hey, I'm in $PWD"
}
y luego esta cosa genial es factible:
$ pwd
/Users/spike
$ do_cool_thing
Hey, I'm in /Users
$ pwd
/Users
Si necesita hacer cosas más complejas además, siempre puede llamar a su script nodejs desde esa función.
Esta es la única forma en que puede lograr lo que está tratando de hacer.