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



我正在尝试在Windows和Unix上自动执行一些命令行测试。我正在使用Java 1.6和Apache Commons CLI 1.1来做到这一点。我在Java代码中所做的是构建我想使用Apache Commons CLI addArgument方法运行的命令。构建要运行的命令行后,我想将命令的输出通过管道传输到文件,因此我在命令末尾添加了以下内容

cloudscan_cmdl.addArgument(">");
cloudscan_cmdl.addArgument(cloudscanOutputFilename);

其中 cloudscanOutput文件名是包含我要使用的文件名的字符串。这在 Windows 上工作正常,命令已构建,添加了重定向的两个参数,并且文件创建良好。但是,在Unix上,它将>和文件名字符串视为可执行文件的附加参数,而不是重定向。

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

我尝试使用该方法的 addArgument(字符串,布尔)版本为真和假,但都无济于事。这真的让我发疯了。

你误解了类的目的。 如前所述,它用于"指定要执行的进程"。 它可以帮助您将参数列表传递给程序。 它不是为了告诉外壳该怎么做。 >是由命令行管理程序实现的重定向运算符。 它在Windows上运行的事实是一个意外。

另外,请注意,这是Apache Commons Exec的一部分,而不是Apache Commons CLI。

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

转义>,例如

cloudscan_cmdl.addArgument(">");

相关内容

最新更新