在JAVA中运行Linux命令的转义序列无效

时间:2014-07-15 20:40:55

标签: java linux

我需要使用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";

1 个答案:

答案 0 :(得分:0)

试试这个:

exec(String [] cmdarray) 在单独的进程中执行指定的命令和参数。

process.exec("new String[]{"grep", "'auth\.'", "/var/lib/iscsi/nodes/10.1.1.36/*/default"});