我试图在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(字符串,布尔)版本作为true和false都没有帮助。这让我很生气。
答案 0 :(得分:1)
你误解了the class的目的。如上所述,它是“指定要执行的进程”。它可以帮助您将参数列表传递给程序。它不是告诉shell要做什么。 >
是shell实现的重定向运算符。它在Windows上运行的事实是一个意外。
另请注意,这是Apache Commons Exec的一部分,而不是Apache Commons CLI。
为了避免自己进行重定向,最好的选择可能是为每个平台制作一个简单的批处理文件或shell脚本并调用它。
答案 1 :(得分:0)
逃脱>
,例如
cloudscan_cmdl.addArgument("\>");