Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.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
在java中使用linux grep命令时出错_Java_Linux_Bash_Shell - Fatal编程技术网

在java中使用linux grep命令时出错

在java中使用linux grep命令时出错,java,linux,bash,shell,Java,Linux,Bash,Shell,我试图使用process builder在java中获得grep linux shell命令的输出。但我在这个案子里遇到了麻烦。请帮帮我。 谢谢你的建议 String[] args = new String[7]; args[0] = "/bin/bash"; args[1] = "-c"; args[2] = "grep"; args[3] = "-n"; args[

我试图使用process builder在java中获得grep linux shell命令的输出。但我在这个案子里遇到了麻烦。请帮帮我。 谢谢你的建议

    String[] args = new String[7];
    args[0] = "/bin/bash";
    args[1] = "-c";
    args[2] = "grep";
    args[3] = "-n";
    args[4] = "-e";
    args[5] = "KERNELVERSION";
    args[6] = kernelFilePath.trim();

ProcessBuilder pb;
    Process process = null;
    try {
        pb = new ProcessBuilder(args);
        pb = pb.directory(new File(directory));
        pb.inheritIO();
        pb.redirectOutput(ProcessBuilder.Redirect.INHERIT);
        pb.redirectError(ProcessBuilder.Redirect.INHERIT);
        process = pb.start();
        process.waitFor();
    } catch (IOException | InterruptedException e) {
        System.out.println("executeCmdWithOutput() exception : " + e.toString());
    } finally {
        if (process != null) {
            process.destroy();
        }
    }
==>错误:

用法:grep[选项]。。。模式[文件]

有关更多信息,请尝试“grep--help”

我在bash中尝试了该命令,效果很好:

grep -n -e KERNELVERSION ..../Makefile

您是否尝试将args[2]更改为完整命令


另外,您可以使用pgrep,它不需要您使用管道。

您是否尝试将args[2]更改为完整命令


另外,您可以使用pgrep,它不需要您使用管道。

您不需要显式运行
/bin/bash
来执行
grep
过程。直接调用它,
ProcessBuilder
将运行它:

String[] args = {"grep", "-n", "KERNELVERSION", kernelFilePath.trim()};
此外,您不需要使用
-e
选项,除非您正在搜索多个模式

如果您确实想在
/bin/bash
中运行
grep

String[] args = {"/bin/bash", "-c", "grep -n KERNELVERSION " + kernelFilePath.trim()};

将包含完整命令和要执行的参数的单个参数传递给
bash

执行
grep
过程不需要显式运行
/bin/bash
。直接调用它,
ProcessBuilder
将运行它:

String[] args = {"grep", "-n", "KERNELVERSION", kernelFilePath.trim()};
此外,您不需要使用
-e
选项,除非您正在搜索多个模式

如果您确实想在
/bin/bash
中运行
grep

String[] args = {"/bin/bash", "-c", "grep -n KERNELVERSION " + kernelFilePath.trim()};

将包含完整命令和要执行的参数的单个参数传递给
bash

full命令必须作为单个参数传递给bash:
args[2]=“grep-n-e KERNELVERSION”+kernelFilePath.trim()
Full命令必须作为单个参数传递给bash:
args[2]=“grep-n-e KERNELVERSION”+kernelFilePath.trim()将如何帮助?它是用于为运行进程而不是文件中的数据进行grepping的。这有什么帮助?它用于为运行的进程而不是文件中的数据进行grepping。