java - 在不破坏东西的情况下将项目添加到 ant 的 PATH
问题描述
在ant
,我怎样才能在PATH
不破坏东西的情况下添加/usr/bin
?我直接从 Apache ant 文档中工作,以将其应用到PATH
https://ant.apache.org/manual/Tasks/exec.html(示例部分)。
文档引用searchpath
的描述如下:
searchpath
: 当该属性为true
时,解析可执行文件的位置时会搜索系统路径环境变量。自蚂蚁 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 进行测试。
解决方案
找到了.. Apache Ant 文档假定您在代码中的某处调用了以下内容:
<property environment="env"/>
没有这个,PATH
将设置为文字 string ${env.PATH}
,从而破坏该PATH
值。这可以通过$PATH
在 shell 脚本中回显 的值来观察。
他们的文档在示例中有此内容,但在上面的示例中遗漏了导致问题的内容。
<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>
推荐阅读
- javascript - Vuex:根据已获取的数据使用 axios 获取数据
- javascript - RxJS 5,Angular:如何每 x 秒执行一次请求,直到消息匹配某个字符串?
- python - 熊猫:从其他列的值填充新列
- sql - 谷歌表格查询 - 为没有记录数据的日期填充零
- javascript - 如何在 JavaScript 中将字符串分成三部分
- r - 编写一个函数来检查一个字符串是否符合十六进制表示法
- marklogic - Marklogic - 将属性值查询限制为特定集合
- amazon-dynamodb - 使用 DynamoDB 将数字添加到列表项
- sql-server - SQL Server:在 select where column1 like str1 or column2 like str2中使用的索引列
- sql - 上个月至今