java - 从 java 运行 shell 脚本

标签 java shell servlets

我有包含此脚本的 sendmail 文件 echo "sample message"|/usr/bin/swaks --to email@gmail.com 我想使用以下代码从 java 运行它:

ProcessBuilder pb = new ProcessBuilder("sendmail");
Process p = pb.start()

但电子邮件未发送。出了什么问题,我该如何解决这个问题?

编辑:运行./sendmail正在运行,并且电子邮件已发送到我的邮箱

最佳答案

我认为问题在于您的 java 应用程序在脚本完成之前就结束了。

试试这个:

    ProcessBuilder pb = new ProcessBuilder("./sendmail.sh");
    Process p = pb.start();
    BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String readline;
    int i = 0;
    while ((readline = reader.readLine()) != null) {
        System.out.println(++i + " " + readline);
    }

上面的代码应该打印出你的命令打印的内容,这可以帮助你调试。它还具有阻塞直到脚本完成的副作用。

如果这有效并且您不关心输出,您可以这样做:

  ProcessBuilder pb = new ProcessBuilder("./test.sh");
  Process p = pb.start();
  p.waitFor();

关于java - 从 java 运行 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35713956/

相关文章:

java - 从java代码执行shell脚本并检查执行是否通过

java - 如何将此Java代码转换为Lambda和Stream实现?

java - 使用 arrayList java 保存获取值

java - 什么是NullPointerException,我该如何解决?

linux - 为什么在 Linux shell 脚本中使用 % 不起作用?

linux - Bash:将多个并发命令的标准输出拆分为列

java - 网页长时间打开抛出空指针异常

java - 如何在当前 servlet 上下文之外获取 WebApplicationContext?

java - 使用检测文件运行 Jetty (cobertura)

java - 如何以表格格式显示ArrayList?