0

在 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} ..." />

我正在使用 aproperty以便用户可以为她的系统指定备用路径,但如果脚本可以通过例如或lessc自动确定可执行文件的位置,我会更喜欢它。hashwhich

这可以在Phing中做到吗?

4

3 回答 3

1

前几天我在 Sean Coates 的博客上看到了Use `env`,它处理了一个非常相似的问题;在他的案例中,他发现 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 ..." />
于 2012-05-25T18:56:32.217 回答
0

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

它在这里可用: https ://gist.github.com/dig412/5057536

于 2013-02-28T15:30:13.313 回答
0

对我来说,这就像一个自定义任务。

于 2012-04-13T06:58:36.813 回答