0

我想nsupdate从 java 调用 bash 脚本,以实现一种 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.1\r");
        w.println("update delete sub.domain.dev. A\r");
        w.println("update add sub.domain.dev. 2 A 12.23.45.56\r");
        w.println("send\r");
        w.println("quit\r");

        process.waitFor(10, TimeUnit.SECONDS);
        
        process.destroy();
        

    }

我尝试了很多方法,但似乎没有任何效果。不幸的是,我不能使用文件作为参数传递,即使到目前为止这种方式效果最好。

4

2 回答 2

1

我认为您还需要重定向流程输入:

builder.redirectInput(ProcessBuilder.Redirect.PIPE);
于 2020-07-19T19:41:46.903 回答
0

我意识到我需要在每个命令之后刷新输出流

于 2020-07-19T19:45:47.883 回答