Changer de répertoire de travail dans mon shell courant contexte lors de l'exécution de Nœud de script
Je suis en train de changer le répertoire de travail de mon Node.js script 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')
Quand je puis exécutez ce fichier avec ./bin/nodefile
, il se ferme, mais le répertoire de travail du shell courant du contexte n'a pas changé. J'ai aussi essayé de shelljs, mais cela ne fonctionne pas non plus.
Quelle est la meilleure façon de le faire? Je comprends que c'est un travail, mais c'est juste dans un processus séparé.
- quelles preuves avez-vous que le mdc n'a pas changé? Rappelez-vous que les chemins utilisés dans require() et le mdc sont deux choses différentes.
- Est-il un moyen de le faire dans Windows?
Vous devez vous connecter pour publier un commentaire.
La bonne façon de changer de répertoires est fait avec
process.chdir(directory)
. Voici un exemple de la la documentation:C'est aussi vérifiable dans le Node.js REPL:
Il n'existe pas de méthode intégrée pour le Nœud de changer le MDC de la sous-jacent shell de course le Noeud du processus.
Vous peut changer le répertoire de travail actuel de la Nœud processus par le biais de la commande
processus.chdir()
.Lorsque le Nœud processus existe, vous trouverez vous-même de retour dans le CWD vous avez commencé le processus.
Ce que vous essayez de faire n'est pas possible. La raison pour cela est que, dans un système POSIX (Linux, OSX, etc), un enfant ne peut pas modifier l'environnement d'un processus parent. Cela comprend la modification du processus parent du répertoire de travail et les variables d'environnement.
Lorsque vous êtes sur la ligne de commande, vous allez exécuter votre Nœud de script, votre processus actuel (
bash
,zsh
, peu importe) génère un nouveau processus qui a sa propre environnement, généralement une copie de votre environnement actuel (il est possible de changer cela via des appels système; mais c'est au-delà de la portée de cette réponse), permettant de ce processus pour faire ce qu'il doit faire dans un isolement complet. Lorsque le sous-processus des sorties, de contrôle est remis à votre interpréteur de commande de processus, où l'environnement n'a pas été touchée.Il y a beaucoup de raisons pour cela, mais pour l'un, imaginez que vous avez exécuté un script en tâche de fond (via
./foo.js &
) et comme il a couru, il a commencé à changer votre répertoire de travail ou remplacement de votrePATH
. Que serait un cauchemar.Si vous devez effectuer certaines actions qui nécessitent la modification de votre répertoire de travail de votre coquille, vous aurez besoin d'écrire une fonction dans votre shell. Par exemple, si vous utilisez Bash, vous pouvez mettre ceci dans votre
~/.bash_profile
:et puis ce qui est cool, c'est faisable:
Si vous avez besoin de faire des choses plus complexes en outre, vous pouvez toujours faire appel à votre nodejs script de cette fonction.
C'est la seule façon que vous pouvez accomplir ce que vous essayez de faire.
Réponse courte: non (facile?) chemin, mais vous pouvez faire quelque chose qui sert votre but.
J'ai fait un outil similaire (une petite commande qui, étant donné une description d'un projet, définit l'environnement, des chemins, des répertoires, etc.). Ce que je fais est tout pour le tout et lancer un shell avec:
Après l'exécution, vous serez sur un shell avec le nouveau répertoire (et, dans mon cas, de l'environnement). Bien sûr, vous pouvez modifier bash quel que soit le shell que vous préférez. Les principales différences avec ce que vous avez initialement demandés sont:
Cependant, pour moi, que les différences sont souhaitables.