【问题标题】:Apache Ant command line arguments without double quotes - is it possible?没有双引号的 Apache Ant 命令行参数 - 有可能吗?
【发布时间】:2009-10-21 18:25:51
【问题描述】:

今天我不得不向 Apache Ant 文件添加一个任务。命令行应该类似于

myprogram --param1 --param2 path\somefile 2> path\logfile

问题在于,如果我为此使用了类似以下的内容

<exec executable="$(myprogram)"
  <arg value="--param1">
  <arg value="--param2">
  <arg path="$(somefile)">
  <arg value="2>">
  <arg path="$(logfile)">
</exec>

所有参数都被引用,所以命令看起来像这样:

myprogram "--param1" "--param2" "path\somefile" "2>" "path\logfile"

如果你的文件/路径中有空格,这还不错,特别好,但会破坏到日志文件的管道(相反,程序认为有两个额外的文件参数“2>”和“path\logfile”) .

我通过调用一个批处理脚本来解决这个问题,而不是将文件作为参数,但我想知道:如果没有这样的解决方法,是否可以做到这一点?

【问题讨论】:

    标签: apache command-line ant arguments double-quotes


    【解决方案1】:

    当您运行“myprogram --param1 --param2 path\somefile 2> path\logfile”时,程序的参数以“2>”结束。文件重定向是你的 shell 的一个操作,它没有在 ant 中使用。如果您查看 ant exec task 的文档,您会发现它支持通过 output 属性进行重定向。

    【讨论】:

    • 谢谢,这似乎是一种通用的方法(如果你想区分标准输出和标准错误,我也看到了一个错误属性)。
    【解决方案2】:

    你试过&lt;arg line="..." /&gt;吗?

    【讨论】:

    • 谢谢,这行得通!我注意到“line”变体,但 Apache Ant 手册并没有很好地解释它和“value”之间的区别,所以我认为它只是一种别名。
    • 来自 Ant 文档:强烈建议尽可能避免使用 line 版本。 Ant 将尝试以类似于 (Unix) shell 的方式拆分命令行,但在某些情况下可能会创建与您期望的非常不同的东西。 ant.apache.org/manual/using.html#arg
    【解决方案3】:

    ant exec 任务有一个输出参数,您可以在其中指定日志文件而不需要命令行管道,并结合参数 append 来确定是否应该覆盖或附加输出文件。

    【讨论】:

      【解决方案4】:

      我遇到了与主题发起人相同的问题。在 java 执行命令行上,我需要将源文件添加为单独的参数,而不是作为一个带有引号的参数。 我使用了&lt;arg value="..." /&gt; 标签,但使用&lt;arg line="..." /&gt; 作为nullptr 建议解决了我的问题。

      【讨论】:

        猜你喜欢
        • 2021-01-06
        • 1970-01-01
        • 1970-01-01
        • 2011-09-03
        • 2011-10-06
        • 2018-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多