2013-07-01 5 views
0

У меня есть следующий Groovy скрипт:Почему Groovy execute() висит?

#!/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 

Что происходит и что должно быть сделано так, что execute() не зависает, когда env является Array?

+0

Вы можете запустить 'Трассирование -f СВОИМИ first-script', чтобы увидеть, что происходит, когда процесс зависает. –

+1

Что произойдет, если вы запустите 'env -i./Setter-for-catan.scala'? –

+0

@EmilSit, который также вызывает зависание скрипта. Что нужно сделать, чтобы указать, что он должен наследовать окружающую среду? –

ответ

1

JAVA_HOME не наследуется скриптом Scala, поэтому его необходимо определить.

Один из способов сделать это было бы в сценарии 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'] 
Смежные вопросы