从java运行shell脚本

时间:2016-03-01 03:11:22

标签: 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,电子邮件将发送到我的邮件

1 个答案:

答案 0 :(得分:1)

我认为问题是你的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();