2013-10-24 3 views
6

node.js에 명령 행 유틸리티를 작성하려고합니다. 기능 중 하나로서 호출 된 쉘의 현재 작업 디렉토리를 변경해야합니다. node.js 버전 cd과 같은 것입니다. 이것을 달성 할 수 있습니까? 그렇다면 어떻게? 노드가있는 현재 디렉토리를 변경하십시오.

 


 

본인은 스크립트를 실행하여 터미널 창에 현재 디렉토리를 변경할 수 있도록하고 싶습니다 명확합니다.

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

문제는 그하지 SHELL 디렉토리에 대한 SCRIPT 디렉토리 process.chdir() 작품. 어떻게 든 현재 쉘을 bash 호출을 통해 노드 스크립트에 전달하고 스크립트 내에서 쉘의 경로를 변경할 수 있어야합니다. 서브 쉘을 작성해도 문제가 해결되지는 않습니다.

답변

7

간단히 : 그렇게 할 수 없습니다. 작업 디렉토리는 프로세스 컨텍스트 (및 하위 프로세스이지만 부모 프로세스는 아님)로 제한됩니다. 따라서 Node 프로세스의 cwd는 쉘 프로세스로 전파 될 수 없습니다.

cd "$(node app)" 

간단한 테스트 케이스 :

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

일반적인 트릭은 노드 응용 프로그램은 표준 출력으로 작업 디렉토리를 인쇄, 그리고 쉘이처럼 노드 응용 프로그램을 실행하는 것입니다 그리고 쉘 에일 리 어스/함수를 만들면 비교적 힘들지 않습니다.

4

분명히하기 위해 상위 프로세스의 pwd를 변경할 수 없습니다. 그러나 작업 디렉토리를 변경하고 해당 폴더에서 쉘을 시작할 수도 있습니다.


당신은 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 작업 디렉토리 만 변경합니다. 추가 된 설명을 참조하십시오. –

+5

이것은 불가능합니다. 아이는 아버지의 환경을 바꿀 수 없다. – hek2mgl

관련 문제