在Windows中使用apache.commons.exec执行带参数的shell脚本

时间:2016-03-23 10:15:56

标签: java apache shell apache-commons-exec

我正在尝试使用apache-commons-exec运行脚本,该脚本是使用java近似运行实现的。这个脚本在生产服务器(Linux)中执行,但我需要在我的localhost中测试它,看看一切正常。

这是启动cygwin的代码,这段代码在cmd.exe中运行,但是当我尝试使用commons.exec启动它时它不起作用:

    OutputStream outputStream = new ByteArrayOutputStream();
    DefaultExecutor exec = new DefaultExecutor();
    exec.setWatchdog(new ExecuteWatchdog(1000));
    PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream);
    exec.setStreamHandler(streamHandler);
    CommandLine cmdLine = CommandLine.parse("C:\\cygwin64\\bin\\bash");
    cmdLine.addArgument("-c");
    cmdLine.addArgument("/cygdrive/c/dev/launch.sh");
    int exit = exec.execute(cmdLine);
    logger.warn("Job exit: " + exit);

它返回1并且没有输出或日志错误:

org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)

有什么遗漏?如何正确捕获输出?

1 个答案:

答案 0 :(得分:0)

有点猜测这可能会有所帮助。

有时exit code = 1代表"成功"。但是,默认情况下,Apache Commons Exec将exit code = 1解释为失败,如果相关脚本退出并使用ExecuteException,则会抛出exit code = 1

您可以告诉DefaultExecutor" exit code = 1 =成功"使用以下代码:

exec.setExitValue(1);

可能不是原因,但值得一试。