2

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

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

cloudscanOutputFilename 是包含我要使用的文件名的字符串。这在 Windows 上运行良好,命令被构建,被重定向的两个参数被添加并且文件被很好地创建。但是,在 Unix 上,它将 > 和文件名字符串视为可执行文件的附加参数,而不是重定向。

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

我尝试使用该方法的 addArgument(string, boolean) 版本作为 true 和 false ,但都没有帮助。这真的让我发疯了。

4

2 回答 2

1

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

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

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

于 2012-04-26T23:47:44.353 回答
0

逃生>,例如

cloudscan_cmdl.addArgument("\>");
于 2012-04-26T23:43:11.723 回答