我想执行此命令以获取vertxHome。
在shell中,我可以这样做:
vertxHome=$(dirname $(dirname $(readlink -f $(which vertx))))
echo $vertxHome
但是如何在groovy中做到这一点?
我尝试了vertxHome = 'dirname $(dirname $(readlink -f $(which vertx)))'.execute()
,但它不起作用。
答案 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
。
希望这有帮助,