Команда Phing exec для установки переменной среды - PullRequest
7 голосов
/ 27 апреля 2011

Я пытаюсь установить переменную окружения в скрипте сборки с помощью phing.Обычно это делается из командной строки:

export MY_VAR=value

В Phing я сделал следующее, но оно не работает.

Ответы [ 3 ]

9 голосов
/ 15 июля 2014

Я вижу, что это довольно старый вопрос, но я не думаю, что на него ответили наилучшим образом. Если вы хотите экспортировать переменную оболочки, например, если вы запускаете phpunit из phing и хотите выполнить экспорт перед вызовом phpunit, попробуйте:

<exec command="export MY_VAR=value ; /path/to/phpunit" />

Просто выполните экспорт и вызовите вашу команду внутри того же тега exec. Разделите оператор экспорта и исполняемый файл оболочки точкой с запятой, как показано. Ваш скрипт сможет получить доступ к значению с помощью стандартной функции php:

$myVar = getenv('MY_VAR');
6 голосов
/ 28 апреля 2011

Жирное утверждение: Нет способа установить / экспортировать переменную оболочки (Unix) в PHP, чтобы она была видна внутри области, в которой запущен скрипт php.

php myfile.php (does putenv or shell_exec('export foo=bar');)
echo $foo

Ничего не вернет.Как PHP не может этого сделать, так и phing не может.

Доступ к переменным окружения оболочки при нескольких запусках скрипта (если это то, что вам нужно) также выглядит как однотипное проектное решение, довольно сложное.

Кроме того, я призываю вас придерживаться финга и учить его скудному уроку.Финг помогает в некоторой степени мышлению без гражданства.

4 голосов
/ 27 апреля 2011

Я никогда раньше не слышал о phing, но это выглядит очень многообещающе как инструмент для сборки.Спасибо за публикацию!Я просмотрел документ на phing.info и нашел следующую возможность:

# 0 Я хотел бы уточнить один момент.Вы говорите, что

prompt$ > export MY_VAR=value
prompt$ > phing build.xml

не устанавливает значение MY_VAR, чтобы оно было видно внутри запущенных процессов phing?Я был бы удивлен, но я бы понял, если вы не хотите запускать свой скрипт сборки.

# 1 Я думаю, что в контексте инструмента сборки такая функция, как exec предназначена для запускаавтономная программа, поэтому, хотя exec может запускаться и устанавливать MY_VAR, все это происходит в подпроцессе, который немедленно исчезает, когда exec завершает работу и продолжает обрабатывать следующую задачу в build.xml.

Если выпросто пытаясь убедиться, что ваш phing-скрипт работает с конкретными значениями для env_vars, вы можете попробовать

Command-line arguments:
....
-D<property>=<value>    
  // Set the property to the specified value to be used in the buildfile

Итак, предположительно, вы можете сделать

phing -DMY_VAR=value build.xml

# 2, вы рассматривали возможность использованияфайл свойств?См. http://www.phing.info/docs/guide/stable/chapters/appendixes/AppendixF-FileFormats.html и прокрутите вниз информацию о build.properties

# 3. Также ...

Phing Built-In Properties
Property    Contents
    env.*   Environment variables, extracted from $_SERVER.

вы получите к ним что-то вроде

 ${env.MY_VAR}

# 4 Это выглядит ближе к тому, что вы действительно хотите

<replacetokens>
  <token key="BC_PATH" value="${top.builddir}/"/>
  <token key="BC_PATH_USER" value="${top.builddir}/testsite/user/${lang}/"/>
</replacetokens>

Надеюсь, это поможет.

...