Groovy字符串执行与列表执行

时间:2017-02-09 01:27:21

标签: groovy

我希望这两个行为与stdout不为空的行为相同:

assert !"bash -c \"ls *.txt\"".execute().text.empty // assertion failure here
assert !['bash', '-c', 'ls *.txt'].execute().text.empty

但他们没有。什么是语义差异?对于第一行,我怀疑Groovy正在发送["-c", "\"ls", "*.txt\""]作为bash的参数,但我不确定。任何人都可以确认吗?

1 个答案:

答案 0 :(得分:4)

你的假设是正确的。请参阅thatt命令的返回码/ stderr:

a, a:visited {
    text-decoration: none;
}

如果你关注来源 https://github.com/apache/groovy/blob/GROOVY_2_4_8/src/main/org/codehaus/groovy/runtime/ProcessGroovyMethods.java#L532-L534 进入JDK的

a.no-underline, a.no-underline:visited { text-decoration: none; }

https://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#exec(java.lang.String,%20java.lang.String[],%20java.io.File)

你会发现,<a class="no-underline" href="#">This isn't underlined</a> <a href="#">But this is!</a>用于分割该字符串/命令,从而使shell groovy:000> p = "bash -c \"ls *.txt\"".execute() ===> java.lang.UNIXProcess@54eb2b70 groovy:000> p.waitFor() // exitValue() ===> 1 groovy:000> p.errorStream.readLines() ===> [*.txt": -c: line 0: unexpected EOF while looking for matching `"', *.txt": -c: line 1: syntax error: unexpected end of file] 引用无用。所有引用只需要shell本身而不是java.lang.Runtime:exec(String command, String[] envp, File dir)