Was Sie versuchen, ist nicht möglich. Der Grund dafür ist, dass in einem POSIX-System (Linux, OSX usw.) ein untergeordneter Prozess die Umgebung eines übergeordneten Prozesses nicht ändern kann. Dies umfasst das Ändern des Arbeitsverzeichnisses und der Umgebungsvariablen des übergeordneten Prozesses.
Wenn Sie sich in der Befehlszeile befinden und Ihr Knotenskript ausführen, erzeugt Ihr aktueller Prozess ( bash
, zsh
was auch immer) einen neuen Prozess mit einer eigenen Umgebung, normalerweise eine Kopie Ihrer aktuellen Umgebung (dies kann über Systemaufrufe geändert werden ; aber das würde den Rahmen dieser Antwort sprengen), so dass dieser Prozess alles, was er tun muss, vollständig isoliert ausführen kann. Wenn der Unterprozess beendet wird, wird die Kontrolle an den Prozess Ihrer Shell zurückgegeben, in dem die Umgebung nicht betroffen ist.
Es gibt viele Gründe dafür, aber stellen Sie sich zum einen vor, Sie hätten ein Skript im Hintergrund (via ./foo.js &
) ausgeführt und während der Ausführung Ihr Arbeitsverzeichnis geändert oder Ihr überschrieben PATH
. Das wäre ein Albtraum.
Wenn Sie einige Aktionen ausführen müssen, die das Ändern Ihres Arbeitsverzeichnisses Ihrer Shell erfordern, müssen Sie eine Funktion in Ihre Shell schreiben. Wenn Sie beispielsweise Bash ausführen, können Sie Folgendes in Folgendes einfügen ~/.bash_profile
:
do_cool_thing() {
cd "/Users"
echo "Hey, I'm in $PWD"
}
und dann ist diese coole Sache machbar:
$ pwd
/Users/spike
$ do_cool_thing
Hey, I'm in /Users
$ pwd
/Users
Wenn Sie zusätzlich komplexere Aufgaben ausführen müssen, können Sie von dieser Funktion aus jederzeit Ihr NodeJS-Skript aufrufen.
Nur so können Sie das erreichen, was Sie versuchen.