Estoy tratando de cambiar el directorio de trabajo de mi script Node.js cuando se ejecuta desde un script bin. Tengo algo como lo siguiente:
#!/usr/bin/env node
process.chdir('/Users')
Cuando ejecuto este archivo con ./bin/nodefile
, sale, pero el directorio de trabajo del contexto de shell actual no ha cambiado. También probé shelljs , pero eso tampoco funciona.
¿Cuál es la mejor manera de hacer esto? Entiendo que está funcionando, pero es un proceso separado.
javascript
node.js
terminal
command-line-interface
cd
Jonovono
fuente
fuente
Respuestas:
La forma correcta de cambiar de directorio es con
process.chdir(directory)
. Aquí tienes un ejemplo de la documentación :Esto también se puede probar en el REPL de Node.js:
fuente
No hay un método integrado para que Node cambie el CWD del shell subyacente que ejecuta el proceso de Node.
Usted puede cambiar el directorio de trabajo actual del proceso de nodo a través del comando
process.chdir()
.Cuando exista el proceso de nodo, se encontrará de nuevo en el CWD en el que inició el proceso.
fuente
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 archivoPATH
. 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
:y luego esta cosa genial es factible:
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.
fuente
Respuesta corta: de ninguna manera (¿fácil?), Pero puede hacer algo que sirva a su propósito.
He hecho una herramienta similar (un pequeño comando que, dada una descripción de un proyecto, establece el entorno, las rutas, los directorios, etc.). Lo que hago es configurar todo y luego generar un shell con:
Después de la ejecución, estará en un shell con el nuevo directorio (y, en mi caso, el entorno). Por supuesto, puede cambiar bash por el shell que prefiera. Las principales diferencias con lo que solicitó originalmente son:
Sin embargo, para mí, las diferencias son deseables.
fuente