1

重複の可能性:
Java でパイプ記号を使用する方法

こんにちは、Java アプリケーションを介して Linux コマンドを実行したいと考えていました。以下のコマンドを実行しても、例外はスローされず、出力も得られません。ただし、Linux コマンド プロンプトから実行した場合、その特定のコマンドは正しく実行されました。また、Java アプリケーションを介して「ls -al」コマンドを実行すると、正しく動作しました。では、どうやってそれを機能させるのですか?

以下がコマンドです。

String cmd = "dir | grep gpc | grep -v 25";

以下は私のJavaプログラムです

public class Test {

    public static void main(String[] args) {





        //String cmd = "ls -al";





        String cmd ="dir | grep gpc | grep -v 25" ;

        String property = System.getProperty("user.dir");
        System.out.println("current directory:::: "+property);
        String cmd =property+File.separator+"test1.sh" ;*/

        //String cmd ="ls -al" ;
        //String cmd = args[0];

        String cmd = dir | grep gpc | grep -v 25;
        System.out.println("executing command is:: "+cmd);
        //String cmd ="dir | grep gpc | grep -v 25" ;
        Runtime run = Runtime.getRuntime();
        Process pr = null;
        try {
            pr = run.exec(cmd);
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            pr.waitFor();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        BufferedReader buf = new BufferedReader(new InputStreamReader(
                pr.getInputStream()));
        String line = "";
        try {
            while ((line = buf.readLine()) != null) {

                System.out.println(line);

            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}
4

2 に答える 2

2

を先頭に追加するとsh -c、問題が解決するはずです。パイプはシェル フィーチャーです。

于 2012-09-26T11:22:43.657 に答える
0

私は答えを得ました。次のように与える必要があります。

String[] cmd = {
"/bin/sh",
"-c",
"dir | grep gpc | grep -v 25"
};

Process p = Runtime.getRuntime().exec(cmd);
于 2012-09-26T11:39:18.073 に答える