J'essaie de changer le répertoire de travail de mon script Node.js lorsqu'il est exécuté à partir d'un script bin. J'ai quelque chose comme ce qui suit:
#!/usr/bin/env node
process.chdir('/Users')
Lorsque j'exécute ensuite ce fichier avec ./bin/nodefile
, il se ferme, mais le répertoire de travail du contexte actuel du shell n'a pas changé. J'ai également essayé shelljs , mais cela ne fonctionne pas non plus.
Quelle est la meilleure façon de procéder? Je comprends que cela fonctionne, mais c'est juste dans un processus distinct.
Réponses:
La bonne façon de changer de répertoire est en fait avec
process.chdir(directory)
. Voici un exemple tiré de la documentation :Ceci est également testable dans le REPL Node.js:
la source
Il n'y a pas de méthode intégrée permettant à Node de modifier le CWD du shell sous - jacent exécutant le processus Node.
Vous pouvez modifier le répertoire de travail actuel du processus Node via la commande
process.chdir()
.Lorsque le processus Node existe, vous vous retrouverez dans le CWD dans lequel vous avez commencé le processus.
la source
Ce que vous essayez de faire n'est pas possible. La raison en est que dans un système POSIX (Linux, OSX, etc.), un processus enfant ne peut pas modifier l'environnement d'un processus parent. Cela inclut la modification du répertoire de travail et des variables d'environnement du processus parent.
Lorsque vous êtes sur la ligne de commande et vous allez exécuter votre script nœud, votre processus actuel (
bash
,zsh
, peu importe) engendre un nouveau processus qui a son propre environnement, en général une copie de votre environnement actuel (il est possible de changer cela via des appels système ; mais cela dépasse la portée de cette réponse), permettant à ce processus de faire tout ce qu'il doit faire dans un isolement complet. Lorsque le sous-processus se termine, le contrôle est rendu au processus de votre shell, où l'environnement n'a pas été affecté.Il y a beaucoup de raisons à cela, mais d'une part, imaginez que vous avez exécuté un script en arrière-plan (via
./foo.js &
) et qu'il a commencé à changer votre répertoire de travail ou à remplacer votrePATH
. Ce serait un cauchemar.Si vous devez effectuer certaines actions qui nécessitent de changer le répertoire de travail de votre shell, vous devrez écrire une fonction dans votre shell. Par exemple, si vous exécutez Bash, vous pouvez mettre ceci dans votre
~/.bash_profile
:et puis cette chose cool est faisable:
Si vous avez besoin de faire des choses plus complexes en plus, vous pouvez toujours appeler votre script nodejs depuis cette fonction.
C'est la seule façon d'accomplir ce que vous essayez de faire.
la source
Réponse courte: pas de moyen (facile?), Mais vous pouvez faire quelque chose qui sert votre objectif.
J'ai fait un outil similaire (une petite commande qui, étant donné une description d'un projet, définit l'environnement, les chemins, les répertoires, etc.). Ce que je fais, c'est tout configurer, puis créer un shell avec:
Après l'exécution, vous serez sur un shell avec le nouveau répertoire (et, dans mon cas, l'environnement). Bien sûr, vous pouvez changer bash pour le shell que vous préférez. Les principales différences avec ce que vous aviez initialement demandé sont:
Cependant, pour moi, ces différences sont souhaitables.
la source