2012-08-14 196 views
0

我的服務器上有一個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

回答

2

也許讓你需要的環境變量:

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