Groovy如何组合多个命令?

时间:2014-09-16 10:31:46

标签: shell groovy

我想执行此命令以获取vertxHome。

在shell中,我可以这样做:

vertxHome=$(dirname $(dirname $(readlink -f $(which vertx))))
echo $vertxHome

但是如何在groovy中做到这一点?

我尝试了vertxHome = 'dirname $(dirname $(readlink -f $(which vertx)))'.execute(),但它不起作用。

1 个答案:

答案 0 :(得分:4)

尝试通过shell执行命令而不是直接执行命令,请尝试:

["/bin/sh", "-c", "your_command"].execute()

在你的情况下:

["/bin/sh", "-c", "dirname \$(dirname \$(readlink -f \$(which vertx)))"].execute()

请注意,必须在命令中转义其评论$中的OP建议。

如果您想获得该命令的输出,可以通过groovy documentation中的示例代码获取它:

//A string can be executed in the standard java way:
def proc = ["/bin/sh", "-c", "dirname \$(dirname \$(readlink -f \$(which vertx)))"].execute()             
// Call *execute* on the string
proc.waitFor()                               // Wait for the command to finish

// Obtain status and output
println "return code: ${ proc.exitValue()}"
println "stderr: ${proc.err.text}"
println "stdout: ${proc.in.text}" // *out* from the external program is *in* for groovy

如果您想访问环境变量并且不关心命令执行,请使用:java.lang.System.getenv(),例如在groovy中,这可能是:

def javaHome = java.lang.System.getenv("JAVA_HOME")
print javaHome

您也可以这样做以获得VERTX_HOME

希望这有帮助,