在java中使用linux grep命令时出错
我试图使用process builder在java中获得grep linux shell命令的输出。但我在这个案子里遇到了麻烦。请帮帮我。 谢谢你的建议在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[
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。