Groovy如何组合多个命令?

Fen*_* Yu 2 shell groovy

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

在shell中,我可以这样:

vertxHome=$(dirname $(dirname $(readlink -f $(which vertx))))
echo $vertxHome
Run Code Online (Sandbox Code Playgroud)

但是如何做到这一点呢?

我试过了vertxHome = 'dirname $(dirname $(readlink -f $(which vertx)))'.execute(),但是没有用。

alb*_*iff 5

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

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

在您的情况下:

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

请注意,作为OP意见,他的注释$必须在命令中转义。

如果要获取命令的输出,则可以通过groovy文档中的以下示例代码获取该命令的输出:

//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
Run Code Online (Sandbox Code Playgroud)

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

def javaHome = java.lang.System.getenv("JAVA_HOME")
print javaHome
Run Code Online (Sandbox Code Playgroud)

您可以做同样的事情VERTX_HOME

希望这可以帮助,