从linux中的groovy执行bash脚本

问题描述:

我的服务器上有一个bash脚本,它从github获取主分支,构建它并将工件部署到tomcat。我决定编写一个github web URL钩子来调用这个sh。由于我的服务器正在运行Java,因此我正在使用groovy。我在/home/madhead/scripts所著测试脚本test.sh从linux中的groovy执行bash脚本

​​

环境变量SCRIPTS/home/madhead/.bashrc设置为/home/madhead/scripts。在我的Groovlet我有

println "GROOVY" 
println '$SCRIPTS/test.sh'.execute().text 
println `whoami'.execute().text` //Prints madhead 
println `env'.execute().text` //Prints all environment variables for madhead, SHELL is /bin/bash and SCRIPTS is /home/madhead/scripts in this output. 

“常规”在HTML中printend,但没有“SHELL”,并没有测试文件,当我打电话的Groovlet创建。所以,脚本不会被调用。我试过

println '/home/madhead/scripts/test.sh'.execute().text 

在groovlet中没有效果。我如何从groovy/java调用bash脚本?另外,println 'echo test'.execute().text会将测试打印到html,但println 'echo $SCRIPTS'.execute().text不会打印任何内容。为什么?

+2

你尝试加入认领的脚本? – 2012-08-14 17:38:26

+0

你很可靠,shell脚本中没有shebang。但是当我添加它没有改变。 – madhead 2012-08-14 21:30:04

+0

UPD。另外,它发生了,我需要在进程上调用waitFor()。当我不做这个shell脚本不是不执行。 – madhead 2012-08-14 21:40:21

也许让你需要的环境变量:

def env = System.getenv() 
println env.SCRIPTS 

在我的机器上这家伙的工作原理:

groovy -e ' def env = System.getenv(); println env.JAVA_HOME ' 
+0

System.getenv()中没有SCRIPTS变量。我已经将shebang添加到shell脚本并通过绝对路径调用它。 – madhead 2012-08-14 21:51:43

+0

现在它的工作原理...?你是否必须导出SCRIPTS变量? – Will 2012-08-15 13:04:31

+0

是的,我明白了这个问题,我写了#!/ bin/sh,同时在bash config中设置了SCRIPTS。现在我用def p =“$ {System.getenv()。SCRIPTS} /test.sh”.execute();调用shell脚本。 p.waitFor(); println p.text – madhead 2012-08-15 18:43:53