2014-04-01 5 views
1

필자가하려는 것은 후속 명령을 성공적으로 실행하기 위해 필요한 준비 작업 (환경 변수 및 내용 설정)을 수행하는 배치 파일을 실행하는 것입니다. 이를 증명하기 위해 내가 함께 가공 Exec을상황에 맞는 실행을 위해 Commons Exec 사용하기

public class Tester { 

    public static void main(String[] args) throws Exception { 
     Tester tester = new Tester(); 
     MyResultHandler handler = tester.new MyResultHandler(); 
     CommandLine commandLine = CommandLine.parse("bash"); 
     PipedOutputStream ps = new PipedOutputStream(); 
     PipedInputStream is = new PipedInputStream(ps); 
     BufferedWriter os = new BufferedWriter(new OutputStreamWriter(ps)); 
     Executor executor = new DefaultExecutor(); 
     PumpStreamHandler ioh = new PumpStreamHandler(System.out, System.err, is); 
     executor.setStreamHandler(ioh); 
     ioh.start(); 
     executor.execute(commandLine, handler); 
     os.write("export MY_VAR=test"); 
     os.flush(); 
     os.write("echo $MY_VAR"); 
     os.flush(); 
     os.close(); 
    } 

    private class MyResultHandler extends DefaultExecuteResultHandler { 

     @Override 
     public void onProcessComplete(final int exitValue) { 
      super.onProcessComplete(exitValue); 
      System.out.println("\nsuccess"); 
     } 

     @Override 
     public void onProcessFailed(final ExecuteException e) { 
      super.onProcessFailed(e); 
      e.printStackTrace(); 
     } 
    } 
} 

를 사용하는 샘플을 넣어하지만 그 대신에 단어 "테스트"의 빈 문자열을 인쇄합니다. 모든 단서?

답변

0

다른 포럼의 피드백을 기반으로 내 질문에 답변합니다. 트릭은 다음과 같이 각 명령의 끝에 새로운 행 문자를 추가하는 것입니다.

os.write("export MY_VAR=test\n"); 
os.flush(); 
os.write("echo $MY_VAR\n");