在ant
中,如何添加到PATH
而不破坏/usr/bin
中的内容?我直接从Apache ant文档中进行工作,以应用于PATH
https://ant.apache.org/manual/Tasks/exec.html(示例部分)。
文档引用了searchpath
,其描述如下:
searchpath
:当此属性为true
时,在解析可执行文件的位置时将搜索系统路径环境变量。自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“ Mojave”上使用AdoptOpenJDK 11.0.3和Apache Ant 1.10.6进行测试。
答案 0 :(得分:0)
找到了它。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>