2009-09-25 2 views
3

Я пытаюсь EXEC скрипт, как и в Ant:Ant скрипт Exec оболочки - теряет среды

<exec executable="bash" newenvironment="false" dir="./"> 
    <arg value="script.sh"> 
</exec> 

Но когда он выполняет сценарий, все ссылки на переменные окружения, такие как $ my_variable возвращаются как пустая строка. Как мне обойти это? Согласно http://ant.apache.org/manual/Tasks/exec.html, я считаю, что окружающая среда должна быть распространена. (Я также понимаю, что значения newenvironment по умолчанию равны false.)

Редактировать: Я вижу элемент env, но я не вижу способа передать среду в массе. Есть ли способ сделать это?

+0

где определяется my_variable? – Mark

+0

В качестве переменной окружения ... Вопрос в том, как я могу сделать подпроцесс, увидев среду, то есть когда Runtime.exec вызывается под обложками, он не имеет среды, переданной ему. Передача каждого элемента не представляется возможным, поскольку я пытаюсь написать что-то простое и расширяемое. – PHeath

ответ

4

Вы экспортировали переменную? Суб-процессы не будут видеть переменные, если вы не экспортировать его:

$ cat a.xml 
<project> 
    <exec executable="bash" newenvironment="false" dir="."> 
    <arg value="script.sh"/> 
    </exec> 
</project> 
$ cat script.sh 
#!/bin/sh 
env 
$ MY_VARIABLE=defined 
$ ant -f a.xml | grep MY_VARIABLE 
$ export MY_VARIABLE 
$ ant -f a.xml | grep MY_VARIABLE 
    [exec] MY_VARIABLE=defined 
0

Эмм, который выполняет новую Баш оболочку (с любой конфигурацией и новые условия определены для активного пользователя), а затем Баш оболочка принимает аргументы и выполняет.

Может попробовать следующее выполнить в среде текущей оболочки

<exec executable="script.sh" newenvironment="false" dir="./"> 
</exec> 
Смежные вопросы