Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux命令未在Java应用程序中运行_Java_Linux_Unix - Fatal编程技术网

linux命令未在Java应用程序中运行

linux命令未在Java应用程序中运行,java,linux,unix,Java,Linux,Unix,可能重复: 嗨,我想通过我的Java应用程序运行一些linux命令。当我运行下面的命令时,它既不会抛出异常,也不会给出输出。但是当我从linux命令提示符运行时,该命令执行正确。另外,当我通过java应用程序发出“ls-al”命令时,它工作正常。那么如何让它工作呢 下面是命令 String cmd = "dir | grep gpc | grep -v 25"; 下面是我的java程序 public class Test { public static void main(Stri

可能重复:

嗨,我想通过我的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();
        }

    }

}

在它前面加上
sh-c
可以解决您的问题。管道是一种外壳特性。

我得到了答案。需要以以下方式给出

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

Process p = Runtime.getRuntime().exec(cmd);