Java 使用Commons Exec执行上下文相关的执行

Java 使用Commons Exec执行上下文相关的执行,java,apache,command-line,exec,apache-commons-exec,Java,Apache,Command Line,Exec,Apache Commons Exec,我试图做的只是运行一个批处理文件,为后续命令的成功执行做一些必要的准备工作(设置环境变量等)。为了证明这一点,我制作了一个使用Commons Exec的示例 公共类测试器{ 公共静态void main(字符串[]args)引发异常{ 测试仪=新测试仪(); MyResultHandler=tester.new MyResultHandler(); CommandLine CommandLine=CommandLine.parse(“bash”); PipedOutputStream ps=新的P

我试图做的只是运行一个批处理文件,为后续命令的成功执行做一些必要的准备工作(设置环境变量等)。为了证明这一点,我制作了一个使用Commons Exec的示例

公共类测试器{
公共静态void main(字符串[]args)引发异常{
测试仪=新测试仪();
MyResultHandler=tester.new MyResultHandler();
CommandLine CommandLine=CommandLine.parse(“bash”);
PipedOutputStream ps=新的PipedOutputStream();
PipedInputStream is=新的PipedInputStream(ps);
BufferedWriter os=新的BufferedWriter(新的OutputStreamWriter(ps));
Executor Executor=新的DefaultExecutor();
PumpStreamHandler ioh=新的PumpStreamHandler(System.out、System.err、is);
执行人setStreamHandler(ioh);
ioh.start();
executor.execute(命令行、处理程序);
编写(“导出我的变量=测试”);
os.flush();
写(“echo$MY_VAR”);
os.flush();
os.close();
}
私有类MyResultHandler扩展了DefaultExecuteSultHandler{
@凌驾
公共void onProcessComplete(最终int-exitValue){
super.onProcessComplete(exitValue);
System.out.println(“\n成功”);
}
@凌驾
public void onProcessFailed(最终执行异常e){
super.onProcessFailed(e);
e、 printStackTrace();
}
}
}

但它打印的是空字符串,而不是单词“test”。有什么线索吗?

根据另一个论坛的反馈回答我自己的问题。诀窍是在每个命令末尾添加一个新行字符,如下所示:

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