在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中做到吗?
答案 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中的位置。