2010-05-30 6 views
1

현재 최상위 쉘에서 scriptblocks/scripts를 실행해야하며 수정되지 않은 전역 범위를 남기고 싶습니다.명령/스크립트가 글로벌 환경을 변경하지 못하게하는 방법

는 지금까지, 나는 단지 다음과 같은 가능성을 생각 할 수있었습니다 :

powershell -file <script> 
powershell -noprofile -command <scriptblock> 

문제는 그들이 매우 느린 것을입니다.

예를 들어, 내가 할 수 있도록하고 싶습니다 :

mkdir newdir 
cd newdir 
$env:NEW_VAR = 100 
ni -item f 'newfile.txt' 

... 내 쉘의 작업 디렉토리가 변경되지 것입니다 및 $env:NEW_VAR 글로벌 범위에서 설정되지 않을 수 있도록.

더 많은 대안이 있습니까?

답변

1

지구 환경 같은 것은 없습니다. 새로운 프로세스를 생성 할 때, OS는 새로운 프로세스를위한 환경 사본을 생성합니다.

스크립트를 별도의 프로세스로 실행하면 모든 것이 그대로 유지됩니다.

+2

을 나는 "범위"가 아닌 "환경"을 의미 생각합니다. – guillermooo

2

다른 대안에 대해 모르겠다. 환경 변수는 @Peter가 응답 할 때 프로세스마다 유지됩니다.

거기에 새 디렉토리와 파일을 만들면 전역 환경이 변경됩니다. 그래서 대본은 완전히 결백하지는 않습니다.

귀하의 경우 제안대로 새 프로세스가 실행됩니다. 너무 게으른 경우
, 스크립트에 배치하고 마지막/시도로 묶지 :

--- script.ps1 
push-location 
try { 
    mkdir newdir 
    cd newdir 
    $env:NEW_VAR = 100 
    ni -item f 'newfile.txt' 
} finally { 
    pop-location 
    # delete dir/file? 
    remove-item env:NEW_VAR 
} 
관련 문제