【问题标题】:Executing shell-script with parameters using apache.commons.exec in Windows在 Windows 中使用 apache.commons.exec 执行带参数的 shell 脚本
【发布时间】:2016-03-23 10:15:56
【问题描述】:

我正在尝试使用 apache-commons-exec 运行一个脚本,该脚本是使用 java 近似来实现的。此脚本在生产服务器 (Linux) 中执行,但我需要在我的本地主机中对其进行测试以查看一切正常。

这是我启动 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)

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

【问题讨论】:

  • ... 在 Linux 环境中测试它。你的 bash 脚本可以有一个 she-bang #!/bin/bash 和粘性 uid 位 chmod s+u。 (windows cygwin 环境以 bash --login -i 启动)
  • 不可能,谢谢。

标签: java apache shell apache-commons-exec


【解决方案1】:

有点猜测,但可能会有所帮助。

有时exit code = 1 代表“成功”。但是,Apache Commons Exec 默认将 exit code = 1 解释为失败,如果有问题的脚本以 exit code = 1 退出,则会抛出 ExecuteException

您可以使用以下代码告诉您的DefaultExecutorexit code = 1 = 成功”:

exec.setExitValue(1);

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

【讨论】:

  • 我检查了所有内容,我认为问题如下:当出口为 1 时,没有输出流(在我的日志中看不到 echo 或 stderr),而当出口是0
猜你喜欢
  • 1970-01-01
  • 2011-10-09
  • 1970-01-01
  • 1970-01-01
  • 2014-01-25
  • 1970-01-01
  • 2013-10-19
  • 2011-08-31
  • 2013-10-21
相关资源
最近更新 更多