2013-10-24 59 views
6

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

 


 

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

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

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

回答

7

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

一种常见的伎俩是让你的节点应用打印工作目录到stdout,和你的shell中运行你的节点的应用程序是这样的:

cd "$(node app)" 

一个简单的测试用例:

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

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

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

+0

谢谢,但这并不能解决问题。它只会改变SCRIPT工作目录,而我需要更改调用该脚本的shell的目录。请参阅添加的说明。 –

+5

这是不可能的。小孩不能改变他父亲的环境 – hek2mgl