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コードを使用して、古いパスワード、新しいパスワードをシェルに渡し、新しいパスワードを確認する方法を知りたいです。

4

2 に答える 2

2

Process.getOutputStream()という紛らわしい名前を使用して渡す必要があります。ドキュメントから:

サブプロセスの出力ストリームを取得します。ストリームへの出力は、この Process オブジェクトによって表されるプロセスの標準入力ストリームにパイプされます

ブロックを回避するために、プロセス stdout/errを同時にキャプチャする必要があることに注意してください。詳細については、この回答を参照してください。

于 2012-10-11T09:17:01.740 に答える
1

expectというユーティリティがあります。u がインストールされている場合、u は任意のものに引数を渡すことができます。そのため、文字列として構築し、String ConstructedCommand で実行します。プロセス p=Runtime.getRuntime().exec(ConstructedCommand);

このリンクはあなたの必要性に値します。http://linux.die.net/man/1/expect

于 2012-10-11T10:28:39.170 に答える