2012-12-18 4 views
3

Process.start()를 사용하여 환경 변수를 설정할 수 있습니까? 나는 http://www.dartlang.org/articles/io/에서 프로세스 예제를 적용하려했지만 오류가 발생했습니다.Process.start를 사용하여 환경 변수 설정

Process.start("export my_key='abc123'", []).then((process) { 
    var stdoutStream = new StringInputStream(process.stdout); 
    stdoutStream.onLine =() => print(stdoutStream.readLine()); 
    process.stderr.onData = process.stderr.read; 
    process.onExit = (exitCode) { 
    print('exit code: $exitCode'); 
}; 

오류 :

Unhandled exception: 
FutureUnhandledException: exception while executing Future 
    ProcessException: No such file or directory 
    Command: export my_key='abc123' 
original stack trace: 
    null 
#0  _FutureImpl._complete (bootstrap:844:11) 
#1  _FutureImpl._complete (bootstrap:848:5) 
#2  _FutureImpl._setException (bootstrap:873:14) 
#3  _CompleterImpl.completeException (bootstrap:948:30) 
#4  _ProcessImpl._start.<anonymous closure> (dart:io-patch:198:37) 
#5  _Timer._createTimerHandler._handleTimeout (dart:io:6918:28) 
#6  _Timer._createTimerHandler._handleTimeout (dart:io:6926:7) 
#7  _Timer._createTimerHandler.<anonymous closure> (dart:io:6934:23) 
#8  _ReceivePortImpl._handleMessage (dart:isolate-patch:37:92) 
+1

말하는 :

는 다른 프로세스를 실행하기 전에 환경 변수를 설정하려면, 다음과 같은 당신의 Process.Start를 해당를 전달하는 환경 변수를 설정하는 ProcessOptions 클래스를 사용하십시오 말했다 오류가 무엇인지 알지 못하고 오류가 발생합니다. " 여기에서 화면을 볼 수 없으며 마음을 읽을 수도 없습니다. –

+0

게시글에 오류가 추가되었습니다. 감사. – basheps

답변

5

불행하게도 당신은 할 수 없습니다. 먼저 export은 실제로 bash (또는 여러 다른 쉘)의 쉘 명령이고 시스템의 실제 응용 프로그램이 아니기 때문입니다. 다트는 쉘 내에서 프로세스를 실행하지 않습니다.

옵션은 Process.start에 전달 된 매개 변수로 bash -c 'export my_key=123'을 사용하는 것이지만, 내 보낸 변수는 bash 세션 동안 만 존재하기 때문에 매우 제한적으로 사용됩니다. 즉, 생성 된 프로세스가 종료되면 변수가 더 이상 존재하지 않습니다.

당신이 행동이보고 싶다면

은 명령 프롬프트에서이 같은 시도 :
bash -c 'export TEST="true";echo $TEST' 

다음 변수를 표시, 변수를, 새로운 bash는 세션을 생성 보냅니다. 프롬프트가 나타나면 다음을 실행하십시오.

echo $TEST 

빈 행 (또는 시스템에이 L 존재하는 경우 다른 값)이 표시되어야합니다. "

import 'dart:io'; 

void main() { 
    var po = new ProcessOptions(); 
    var ev = {'TEST': 'True'}; 
    po.environment = ev; 
    Process.start('bash', ['-c','export'], po).then((process) { 
    var stdoutStream = new StringInputStream(process.stdout); 
    stdoutStream.onLine =() => print(stdoutStream.readLine()); 
    process.stderr.onData = process.stderr.read; 
    }); 
} 
+0

설명 및 대안 솔루션을 제공해 주셔서 감사합니다. – basheps