猿问

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

在 中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 进行测试。


当年话下
浏览 88回答 1
1回答

三国纷争

找到了。Apache Ant 文档假定您在代码中的某处调用了以下内容:<property environment="env"/>没有这个,PATH将被设置为文字 string ${env.PATH},从而破坏该PATH值。$PATH这可以通过回显shell 脚本中的值来观察。他们的文档在示例中有这个,但在上面的示例中遗漏了它,导致了这个问题。<project name="Sample" default="init" basedir=".">&nbsp; <description>Testing PATH with exec</description>&nbsp; <target name="init">&nbsp; <property environment="env"/><!-- THIS WAS MISSING -->&nbsp; &nbsp; <exec executable="./test.sh">&nbsp; &nbsp; &nbsp; <env key="PATH" value="${env.PATH}:/foo"/>&nbsp; &nbsp; </exec>&nbsp; </target></project>
随时随地看视频慕课网APP

相关分类

Java
我要回答