用节点改变当前目录

我正在尝试在node.js中编写一个命令行实用程序。 作为其中的一个function,它应该改变它被调用的shell的当前工作目录。 类似于cd node.js版本。 有没有可能做到这一点? 如果是这样,怎么样?


为了澄清,我希望能够通过运行脚本来改变terminal窗口中的当前目录。

 /some/path> ... /some/path> nodecd /other/path /other/path> ... 

问题是process.chdir()适用于SCRIPT目录,而不适用于SHELL目录。 我需要能够以某种方式将当前shell通过bash调用传递给节点脚本,并在脚本中更改该shell的path – 创build子shell不会解决问题。

总之:你不能。 工作目录仅限于进程的上下文(也可能是subprocess,但肯定不是父进程)。 所以你的Node进程的cwd不能传播回你的shell进程。

一个常见的技巧是让你的Node应用程序打印工作目录到stdout,让你的shell运行你的Node应用程序,像这样:

 cd "$(node app)" 

一个简单的testing用例:

 // app.js console.log('/tmp'); 

如果你为它创build一个shell别名/函数,它应该是相对无痛的。

要说清楚,你不能改变父进程的pwd。 但是,您可能会更改工作目录并在该文件夹中启动一个shell。


你需要使用process.chdir()

 console.log('Starting directory: ' + process.cwd()); try { process.chdir('/tmp'); console.log('New directory: ' + process.cwd()); } catch (err) { console.log('chdir: ' + err); } 

这个例子取自手册。 在这里你可以find手册 。