用节点更改当前目录

时间:2013-10-24 10:44:41

标签: javascript node.js bash shell

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


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

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

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

2 个答案:

答案 0 :(得分:7)

简而言之:你做不到。工作目录仅限于进程的上下文(可能是子进程,但肯定不是父进程)。因此,Node进程的cwd无法传播回shell进程。

一个常见的技巧是让您的Node应用程序将工作目录打印到stdout,并让您的shell运行您的Node应用程序,如下所示:

cd "$(node app)"

一个简单的测试用例:

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

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

答案 1 :(得分:4)

为清楚起见,您无法更改父进程的密码。但是,您可以更改工作目录并在该文件夹中启动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);
}

此示例取自手册。 Here you can find the manual