与管道蚂蚁运行命令(Ant run command with pipes)

2019-06-26 22:01发布

我一定要执行的命令: java -jar test.jar page.xml | mysql -u user -p base java -jar test.jar page.xml | mysql -u user -p base在蚂蚁。 所以,我试图完成这个任务:

<java jar="test.jar" fork="true">
  <arg line="page.xml | mysql -u user -p base"/>
</java>

但是,我有一间带管例外 - “|” :

 java.lang.IllegalArgumentException: Input already set; can't set to |

所以,这就是问题所在:)

Answer 1:

管道(|)只能在shell脚本中使用。 你把它当作参数传递给Java进程。

所以,你需要执行一个shell脚本。 你可以通过执行(比如说)做这个bash -c并通过上述的壳声明(尽管在线 -你可以写一个单独的脚本文件,但在这里,似乎有点开销)

  <exec executable="bash">
    <arg value="-c"/>
    <arg value="java -jar test.jar page.xml | mysql -u user -p base"/>
  </exec>


Answer 2:

我不知道这是否是以往任何时候都解决了,但我有我通过以下解决了类似的问题:

<exec executable="bash">
    <arg value="-c"/>
    <arg line='"java -jar test.jar page.xml | mysql -u user -p base"'/>
</exec>

只要想到我也有同感。



Answer 3:

另一种解决方案是包裹java -jar test.jar page.xml | mysql -u user -p base java -jar test.jar page.xml | mysql -u user -p base到一个单独的脚本和用简单的称之为<exec>任务。



Answer 4:

当您从蚂蚁,从程序的输入和退出Java程序由蚂蚁运行时被捕获的 - 你不能尝试和其他地方使用管道重定向他们。

如果你想这样做,你可能有更好的运气exec任务,虽然可能从有同样的问题。



Answer 5:

在那里,你实际上是运行Java命令。

您需要使用Exec的任务http://ant.apache.org/manual/Tasks/exec.html ,但不知道是否有你也可以运行管道命令或没有。 试试看。



Answer 6:

在解释为什么Amilie的答案是正确的解决方案:

相比于脑阿格纽的解决方案Amilie的正确解决方案之间的区别是它们之间的细微差别。 布赖恩有第二ARG为“值”,而Amilie使用“线”。

这也是为什么Amilie的是正确的,每Apache Ant的文档 :

  • “值|单个命令行参数;可以包含空格字符。”

  • “行|的命令行参数用空格隔开的列表。”

 <exec executable="bash"> <arg value="-c"/> <arg line='"java -jar test.jar page.xml | mysql -u user -p base"'/> </exec> 



文章来源: Ant run command with pipes
标签: java ant