1

我对这种 java 与 Unix 的集成是新手。

我想做的是

    String command="passwd";
    Runtime rt=Runtime.getRuntime();
    try {
        Process pc=rt.exec(command);
        try {
            pc.waitFor();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        BufferedReader buf = new BufferedReader(new InputStreamReader(pc.getInputStream()));

        String line = "";

        while ((line=buf.readLine())!=null) {

        System.out.println(line);

        }
        BufferedReader buf1 = new BufferedReader(new InputStreamReader(pc.getErrorStream()));

        String line1 = "";
        while ((line1=buf1.readLine())!=null) {

            System.out.println("Error--"+line1);

            }
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
        System.out.println("IOException---"+e1.getMessage());
    }

现在,当我试图传递“passwd”命令时,Unix 环境进入挂起模式。

我想知道如何使用 java 代码将旧密码、新密码和确认新密码传递给 shell。

4

2 回答 2

2

您需要使用令人困惑的名为Process.getOutputStream()来传递它。从文档:

获取子流程的输出流。流的输出通过管道传输到此 Process 对象表示的进程的标准输入流中

请注意,您需要同时捕获进程 stdout/err避免阻塞。有关更多详细信息,请参阅此答案

于 2012-10-11T09:17:01.740 回答
1

有一个名为expect的实用程序。如果你安装了你可以为任何事情传递参数。所以构造为字符串由String ConstructedCommand执行;进程 p=Runtime.getRuntime().exec(ConstructedCommand);

此链接将值得您的需要。http://linux.die.net/man/1/expect

于 2012-10-11T10:28:39.170 回答