0

我使用 Java Runtime.exec() 运行 egrep

String command = "egrep \'(Success|Loading\\.\\.\\.|Loaded : READY|Found a running instance)\' "+ instance.getPath() + "/log";
Runtime.getRuntime().exec(command);

标准输出始终为空,标准错误显示“egrep:不匹配(或(”。但是当我将命令复制到 shell 并运行时,它返回正确的值。

4

2 回答 2

1

解决方案非常简单:(Success|Loading\\.\\.\\.|Loaded不是有效的正则表达式。

使用时不能用引号保护空格Process.exec(String)。始终使用exec()带有数组的版本,或者更好的是使用ProcessBuilder.

这样,您可以将每个参数作为单个 Java 字符串传递,空格和其他特殊字符不会产生任何问题。

于 2012-05-14T09:14:06.023 回答
0

不应转义单引号。您也不会在命令行上转义它们,对吗?

于 2012-05-14T09:08:10.303 回答