2013-07-01 45 views
0

我有以下Groovy腳本:爲什麼Groovy會執行()掛起?

#!/opt/groovy-1.8.6/bin/groovy 

final env = null // [] 

final command = ["./setter-for-catan.scala"] 
final process = command.execute(env, null) 

println (['echo', '********************** 0'].execute(env, null).text) 
final stdout = process.inputStream 
BufferedReader reader = new BufferedReader(new InputStreamReader(stdout)) 
while ((line = reader.readLine()) != null) { 
    System.out.println ("Stdout: " + line); 
} 

和以下的Scala腳本:

#!/bin/bash 

export SCALA_HOME=/opt/scala-2.10.1 

echo '********************* 1' "$0" "[email protected]" 
${SCALA_HOME}/bin/scala -version 2>&1 
exec ${SCALA_HOME}/bin/scala "$0" "[email protected]" 2>&1 
!# 

println("******************* 2") 

調用Groovy腳本輸出:

********************** 0 

Stdout: ********************* 1 ./setter-for-catan.scala 
Stdout: Scala code runner version 2.10.1 -- Copyright 2002-2013, LAMP/EPFL 
Stdout: ******************* 2 

如果env被定義爲[],所述Groovy腳本掛起以下輸出:

********************** 0 

Stdout: ********************* 1 ./setter-for-catan.scala 
Stdout: Scala code runner version 2.10.1 -- Copyright 2002-2013, LAMP/EPFL 

發生了什麼事情以及需要做什麼以便​​不會掛起envArray

+0

你可以運行'strace的-f你的 - 第一腳本「來查看進程掛起時發生了什麼。 –

+1

如果運行'env -i。/ setter-for-catan.scala',會發生什麼情況? –

+0

@EmilSit,也會導致腳本掛起。需要做些什麼來指定它應該繼承環境? –

回答

1

JAVA_HOME沒有被Scala腳本繼承,所以需要定義它。

一種方式做這將是在斯卡拉腳本:

#!/bin/bash 

export JAVA_HOME=/Library/Java/Home 
export SCALA_HOME=/opt/scala-2.10.1 

echo '********************* 1' "$0" "[email protected]" 
${SCALA_HOME}/bin/scala -version 2>&1 
exec ${SCALA_HOME}/bin/scala "$0" "[email protected]" 2>&1 
!# 

另一種方法是做到這一點的Groovy腳本:

final env = ['JAVA_HOME=/Library/Java/Home']