我已经创建了.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文件,即使我对已经完成它的人做同样的事情。 对不起,如果这是一个糟糕的问题,谢谢。
答案 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
命令小心。