2013-10-24 76 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