Поиск программы в файле сборки Phing

В файле сборки Phing я хотел бы вызвать внешнюю программу (в данном случае lessc), но программа может находиться в другом месте в зависимости от того, в какой системе запускается скрипт.

Это то, что я делаю в настоящее время. Это работает, но это пахнет для меня:

<property name="lessc" value="/usr/bin/lessc" override="true" />

<if>
  <not>
    <available file="${lessc}" />
  </not>
  <then>
    <fail msg="Could not find LESS compiler at ${lessc}." />
  </then>
</if>

<exec command="${lessc} ..." />

Я использую property, чтобы пользователь мог указать альтернативный путь к lessc для своей системы, но я бы предпочел, чтобы сценарий мог автоматически определять местоположение исполняемого файла, например, через hash или which.

Возможно ли это сделать в Phing?


person Community    schedule 12.04.2012    source источник
comment
Я видел пользовательскую задачу LESS для Phing на Github, если это поможет   -  person JasonDavis    schedule 13.05.2012


Ответы (3)


На днях я наткнулся на Use `env` в блоге Шона Коутса, в котором рассматривается очень похожая проблема; в его случае он обнаружил, что скрипты PHP не работают при запуске через интерфейс командной строки в разных системах, потому что PHP установлен в разных местах.

Его решение состояло в том, чтобы заменить заголовок #!/path/to/php на #!/usr/bin/env php. Поскольку env (вероятно) всегда находится в /usr/bin/env, единственная необходимая конфигурация — убедиться, что двоичный файл PHP находится в $PATH для любого пользователя, выполняющего сценарий CLI. Никаких изменений кода сервера не требуется!

Что ж, это заставило меня задуматься.

Я изменил свой файл сборки, чтобы он выглядел так, и теперь все работает прекрасно:

<property name="env" value="/usr/bin/env" override="true" />

<if>
  <not>
    <available file="${env}" />
  </not>
  <then>
    <fail msg="Unable to locate env executable at ${env}." />
  </then>
</if>

<exec command="${env} lessc ..." />
person Community    schedule 25.05.2012

Мне кажется, это заказная задача.

person raphaelstolt    schedule 13.04.2012
comment
Пользовательская задача для поиска исполняемого файла или пользовательская задача для его вызова? Я бы предпочел не портировать компилятор less на PHP, если вы об этом! (: - person ; 13.05.2012
comment
Пользовательская задача для поиска (и, возможно, автоматической установки) исполняемого файла. - person raphaelstolt; 14.05.2012

У меня была такая же проблема, и в итоге я создал собственное условие, чтобы оно работало как условие available. Он использует which/where (в Windows) для поиска местоположений в PATH.

Он доступен здесь: https://gist.github.com/dig412/5057536.

person dig412    schedule 28.02.2013