Java exec linux命令

Łuk*_*zka 0 linux process exec

可能重复:
如何使管道与Runtime.exec()一起使用?

您好我使用exec命令编写了简单的java函数.此函数检查系统(linux)中是否存在该字体.首先我写了简单的bash命令:identify -list font | grep -i 'Font: Times-Bold' -w它的工作完美,所以我创建了简单的程序:

public abstract class SystemReader{

    public static final void checkFontExist(String name){
            String command = "identify -list font | grep -i -w \'Font: "  + name + "\'";
            Process p  =Runtime.getRuntime().exec(command);

            String lines = "";
            String resoults ="";
            BufferedReader bufferedReader = new BufferedReader(new      InputStreamReader(p.getInputStream()));
            while((line  buferedReader.readLine())!=null){
                    resoult += line + "\n";
            }

            System.out.println("RESPONSE: " + resoult);
            bufferreader.close();
    }
Run Code Online (Sandbox Code Playgroud)

}

它的工作但不是我的意思.此函数返回我系统中存在的所有字体.它似乎命令grep不是exec?

我尝试使用另一个版本的命令exec()我创建:

String command = {"identify -list font", "grep -i -w \'Font: " + fontName + "\'"}
Run Code Online (Sandbox Code Playgroud)

但我有错误:

Exception in thread "main" java.io.IOException: Cannot run program "identify -list font ": java.io.IOException: error=2, No such file or directory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
    at java.lang.Runtime.exec(Runtime.java:593)
    at java.lang.Runtime.exec(Runtime.java:466)
Run Code Online (Sandbox Code Playgroud)

你能告诉我什么是错的吗?非常感谢

Ran*_*unt 6

String[] cmd = {
    "/bin/sh",
    "-c",
    "identify -list font | grep -i -w \'Font: "  + name + "\'"
};

Process p = Runtime.getRuntime().exec(cmd);
Run Code Online (Sandbox Code Playgroud)

将通过shell传递命令.这是你需要的,因为| (管道)命令由shell而不是操作系统提供.