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 回答