2009-10-21 58 views
0

今天我不得不向Apache Ant文件添加一个任务。命令行应该是像没有双引号的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" 

这是不坏,特别是如果你的文件/路径中有空格,但破坏管道到日志文件尤其好,但是程序认为有两个添加al文件参数“2>”和“路径\日志文件”)。

我工作围绕这通过调用批处理脚本,而不是只希望文件作为参数,但我想知道:是否有可能做到这一点没有这样的解决方法吗?

回答

2

当你运行 “myprogram --param1 --param2路径\ somefile 2>路径\日志文件”,该参数在 “2>” 程序结束。文件重定向是你的shell的一个操作,它不在ant中使用。如果你看一下文档为ant exec task,你会看到它通过输出属性支持重定向。

+0

谢谢,这似乎是通用的方式来做到这一点(我也看到有一个错误属性,如果你想区分stdout和stderr)。 – schnaader 2009-10-21 18:35:40

2

你试过<arg line="..." />

+0

我认为这应该工作。 – Geo 2009-10-21 18:30:10

+0

谢谢,这个作品!我注意到了“line”变体,但Apache Ant手册没有很好地解释它和“value”之间的区别,所以我认为它只是一种别名。 – schnaader 2009-10-21 18:33:20

+1

从Ant文档:强烈建议尽可能避免使用行版本。 Ant会尝试以类似于(Unix)shell的方式拆分命令行,但可能会创建与您在某些情况下所期望的内容完全不同的内容。 http://ant.apache.org/manual/using.html#arg – Yishai 2009-10-21 18:35:08

1

蚂蚁EXEC任务有一个输出参数,你可以无需在命令行管道,用参数附加合并,以确定是否在输出文件应该被覆盖或附加到指定的日志文件。

1

我有一个平等的问题为话题首发一样。在一个Java执行命令行中,我需要将源文件作为单独的参数添加,而不是将它们作为一个引号。 我用<arg value="..." />标签,但使用<arg line="..." />作为nullptr建议解决我的问题。