[英]How to run .sh file, using process builder?
我已經創建了.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文件,即使我對已經完成它的人做同樣的事情。 對不起,如果這是一個糟糕的問題,謝謝。
你確定bash沒有運行嗎? 你檢查了start
方法返回的Process對象嗎? 您可以從此對象獲取輸出值,輸出流等。
檢查你的流和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());
從Java API Runtime: http : //docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html
// Java runtime
Runtime runtime = Runtime.getRuntime();
// Command
String[] command = {"/bin/bash", "/my/file.sh"};
// Process
Process process = runtime.exec(command);
另外,您應該小心使用可能要求root
密碼的sudo
命令。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.