Unix上的Java Apache Commons CLI;>被视为可执行文件的参数,而不是重定向

Unix上的Java Apache Commons CLI;>被视为可执行文件的参数,而不是重定向,java,unix,apache-commons,apache-commons-cli,Java,Unix,Apache Commons,Apache Commons Cli,我正在尝试在Windows和Unix上自动化一些命令行测试。我使用Java1.6和ApacheCommonsCLI1.1来实现这一点。我在Java代码中所做的是使用Apache Commons CLI addArgument方法构建我想要运行的命令。在生成要运行的命令行之后,我希望通过管道将命令的输出传输到一个文件,因此我在命令末尾添加了以下内容 cloudscan_cmdl.addArgument(">"); cloudscan_cmdl.addArgument(cloudscanOut

我正在尝试在Windows和Unix上自动化一些命令行测试。我使用Java1.6和ApacheCommonsCLI1.1来实现这一点。我在Java代码中所做的是使用Apache Commons CLI addArgument方法构建我想要运行的命令。在生成要运行的命令行之后,我希望通过管道将命令的输出传输到一个文件,因此我在命令末尾添加了以下内容

cloudscan_cmdl.addArgument(">");
cloudscan_cmdl.addArgument(cloudscanOutputFilename);
其中cloudscanOutputFilename是包含我要使用的文件名的字符串。这在Windows上运行良好,命令已生成,重定向的两个参数已添加,文件已创建良好。但是,在Unix上,它将>和文件名字符串视为可执行文件的附加参数,而不是重定向

我该怎么做才能让Unix像在命令行中那样直接键入命令一样读取该命令?我已经将该命令输出为字符串,并在Unix中复制和粘贴了该命令,它按预期工作,但是当从Java程序运行时,重定向没有得到正确处理

我尝试过使用addArgumentstring,该方法的布尔版本为true和false,两者都没有帮助。这真是快把我逼疯了


你误解了这个计划的目的。如上所述,它用于指定要执行的进程。它帮助您将参数列表传递给程序。它不是为了告诉shell该做什么。>是由shell实现的重定向操作符。它在Windows上工作的事实是一个意外

另外,请注意,这是的一部分,而不是

为了避免自己进行重定向,最好的选择可能是为每个平台创建一个简单的批处理文件或shell脚本并调用它

cloudscan_cmdl.addArgument("\>");