在不破坏东西的情况下将项目添加到蚂蚁的路径

Add items to ant's PATH without breaking stuff

ant 中,如何添加到 PATH 而不破坏 /usr/bin 中的内容?我直接从 Apache ant 文档开始工作以应用到 PATH https://ant.apache.org/manual/Tasks/exec.html(示例部分)。

文档参考searchpath,描述如下:

searchpath: When this attribute is true, then system path environment variables will be searched when resolving the location of the executable. since Ant 1.6.3

...但是 searchpath 似乎也没有解决这个特定问题。

举下面的例子build.xml:

<project name="Sample" default="init" basedir=".">
  <description>Testing PATH with exec</description>
  <target name="init">
    <exec executable="./test.sh">
      <env key="PATH" value="${env.PATH}:/foo"/>
    </exec>
  </target>
</project>

以及以下 shell 脚本 test.sh:

#!/bin/bash
echo "Hello!"  # This works
uname          # If PATH is edited, shows "uname: command not found"

输出:

init:
     [exec] Hello!
     [exec] ./test.sh: line 3: uname: command not found
     [exec] Result: 127

... 但是,如果我注释掉 <env key="PATH" value="${env.PATH}:/foo"/>,它就可以正常工作。如何在不破坏内容的情况下添加到 PATH

我正在 MacOS 10.14.5 上使用 AdoptOpenJDK 11.0.3 和 Apache Ant 1.10.6 进行测试 "Mojave"。

找到了。Apache Ant 文档假设您在代码中的某处调用了以下内容:

<property environment="env"/>

如果没有这个,PATH 将被设置为文字字符串 ${env.PATH},从而破坏 PATH 值。这可以通过在 shell 脚本中回显 $PATH 的值来观察。

他们的文档在示例中有这个,但在上面的示例中遗漏了导致问题。

<project name="Sample" default="init" basedir=".">
  <description>Testing PATH with exec</description>
  <target name="init">
  <property environment="env"/><!-- THIS WAS MISSING -->
    <exec executable="./test.sh">
      <env key="PATH" value="${env.PATH}:/foo"/>
    </exec>
  </target>
</project>