在Phing构建文件中查找程序

时间:2012-04-12 21:54:18

标签: 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的备用路径,但如果脚本可以通过以下方式自动确定可执行文件的位置,我更愿意这样做。 hashwhich

这可以在Phing中做到吗?

3 个答案:

答案 0 :(得分:1)

前几天我遇到了Use `env` on Sean Coates's blog,这是一个非常类似的问题;在他的情况下,他发现PHP脚本在不同系统上通过CLI运行时失败,因为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 ..." />

答案 1 :(得分:0)

对我来说闻起来像是task

答案 2 :(得分:0)

我遇到了同样的问题,最终创建了一个自定义条件,就像available条件一样。它使用where / where(在Windows上)来搜索PATH中的位置。

可以在这里找到: https://gist.github.com/dig412/5057536