我想从java调用bash脚本nsupdate
,以便实现一种DDNS。问题是,无论我做什么,nsupdate
都不会接受我试图编写的输入。
这是我目前尝试的方法:
public static void main(String[] args) throws IOException, InterruptedException {
ProcessBuilder builder = new ProcessBuilder("nsupdate", "-i");
builder.redirectOutput(ProcessBuilder.Redirect.PIPE);
Process process = builder.start();
BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
BufferedReader error = new BufferedReader(new InputStreamReader(process.getErrorStream()));
PrintWriter w = new PrintWriter(process.getOutputStream());
w.println("server 127.0.0.1r");
w.println("update delete sub.domain.dev. Ar");
w.println("update add sub.domain.dev. 2 A 12.23.45.56r");
w.println("sendr");
w.println("quitr");
process.waitFor(10, TimeUnit.SECONDS);
process.destroy();
}
我试了很多方法,但似乎都不起作用。不幸的是,我不能使用文件作为参数传递,尽管这种方式迄今为止效果最好。
我认为您还需要重定向流程输入:
builder.redirectInput(ProcessBuilder.Redirect.PIPE);
我意识到我需要在每个命令之后刷新输出流