我想执行此命令以获取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(),但是没有用。
尝试通过外壳执行命令,而不是直接执行命令,请尝试:
["/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。
希望这可以帮助,