用节点更改当前目录

Hub*_* OG 7 javascript bash shell node.js

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

 


 

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

/some/path> ...
/some/path> nodecd /other/path
/other/path> ...
Run Code Online (Sandbox Code Playgroud)

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

hek*_*mgl 8

明确地说,您不能更改父进程的密码。但是,您可以更改工作目录并在该文件夹中启动 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);
}
Run Code Online (Sandbox Code Playgroud)

此示例取自手册。在这里您可以找到手册

  • 这是不可能的。孩子无法改变父亲的环境 (6认同)

rob*_*lep 8

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

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

cd "$(node app)"
Run Code Online (Sandbox Code Playgroud)

一个简单的测试用例:

// app.js
console.log('/tmp');
Run Code Online (Sandbox Code Playgroud)

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