如何使用进程构建器运行.sh文件?

时间:2016-07-01 05:45:43

标签: java linux ubuntu processbuilder

我已经创建了.sh文件,内部是:

sudo iptables --flush
sudo iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP

当我在终端上运行它时,它正常工作,但是当我使用processbuilder时,它没有做任何事情。没有错误,但没有发生任何事情,这是我的java上的代码:

Process pb = new ProcessBuilder("/bin/bash","/my/file.sh").start();

我已经在寻找答案,但我仍然无法运行.sh文件,即使我对已经完成它的人做同样的事情。 对不起,如果这是一个糟糕的问题,谢谢。

3 个答案:

答案 0 :(得分:0)

你确定bash没有运行吗?您是否检查了start方法返回的Process对象?您可以从此对象获取输出值,输出流等。

答案 1 :(得分:0)

检查你的stream和exitvalue是否有错误... sudo可能是这里的问题。

不一定是最好的代码,但它可以完成工作。执行一个进程,获取process.streams并将它们打印到System.out。可能会发现问题实际上是最重要的。

    ProcessBuilder pb = new ProcessBuilder(args);
    pb.redirectErrorStream(true);

    final Process proc = pb.start();    

    final StringBuilder builder = new StringBuilder("Process output");

    final Thread logThread = new Thread() {
        @Override
        public void run() {
            InputStream is = proc.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));

                try {
                    String line;

                    do {
                        line = reader.readLine();
                        builder.append("");
                        builder.append(line == null ? "" : line);
                        builder.append("<br/>");    
                    } while(line != null);

                } catch (IOException e) {
                    builder.append("Exception!  ").append(e.getMessage());
                } finally {
                    try {
                        reader.close();
                    } catch (IOException e) {
                        builder.append("Exception! ").append(e.getMessage());
                    }
                }
            }
        };

    logThread.start();
    int retVal = proc.waitFor();
    System.out.println(builder.toString());

答案 2 :(得分:0)

来自Java API Runtime:http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html

{benefits1,benefits7,benefits10,benefits11,benefits15}

另外,您应该对可能要求// Java runtime Runtime runtime = Runtime.getRuntime(); // Command String[] command = {"/bin/bash", "/my/file.sh"}; // Process Process process = runtime.exec(command); 密码的sudo命令小心。