我需要使用BufferedReader在Java中执行此Linux命令:
grep 'auth\.' /var/lib/iscsi/nodes/10.1.1.36/*/default
我试图执行的是:
String inputThis = "";
String executeThis = "grep" + " " + "'auth\\.'" + " "
+ "/var/lib/iscsi/nodes/10.1.1.36" + "/*/default";
Process process = ServerHelper.callProcessWithInput(executeThis, inputThis);
BufferedReader stdOutput = new BufferedReader(
new InputStreamReader(process.getInputStream()));
try {
logger.debug("stdOutput for editing:");
String s = null;
while ((s = stdOutput.readLine()) != null) {
logger.info("####################" + s);
}
} catch (IOException e) {
logger.fatal(e);
}
没有错误警告:Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
但它的工作原理不正确。我在Linux终端中运行该命令,它工作正常并返回所需的结果,没有错误消息。但是当我执行上面的代码时,结果为null。如果您检查错误消息,则说明:
####################grep: /var/lib/iscsi/nodes/10.1.1.36/*/default: No such file or directory
知道如何修改字符串吗?
更新: 弄清楚了!我们不能使用" *"在字符串中,java无法检测到它。只是
executeThis = "ls" + " " + "/var/lib/iscsi/nodes/"+ 10.1.1.36;
找到*是什么,
executeThis = "cat" + " " + "/var/lib/iscsi/nodes/" + 10.1.1.36 + "/" + myString + "/default";
答案 0 :(得分:0)
试试这个:
exec(String [] cmdarray) 在单独的进程中执行指定的命令和参数。
process.exec("new String[]{"grep", "'auth\.'", "/var/lib/iscsi/nodes/10.1.1.36/*/default"});