【问题标题】:Add items to ant's PATH without breaking stuff在不破坏东西的情况下将项目添加到 ant 的 PATH
【发布时间】:2019-11-27 15:33:28
【问题描述】:

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

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

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

【问题讨论】:

    标签: java linux macos unix ant


    【解决方案1】:

    找到它.. 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>
    

    【讨论】:

      猜你喜欢
      • 2022-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-03
      • 2022-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多