2012-04-26 43 views
1

我正試圖在Windows和Unix上自動執行一些命令行測試。我使用Java 1.6和Apache Commons CLI 1.1來執行此操作。我在Java代碼中做的是使用Apache Commons CLI的addArgument方法構建我想要運行的命令。我建,我要運行的命令行後,我想管的命令到一個文件的輸出,所以我說下面的命令Unix上的Java Apache Commons CLI; >正被視爲可執行文件的參數而不是重定向

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

凡cloudscanOutputFilename是包含字符串的結尾我想使用的文件名。這在Windows上工作正常,命令已建立,重定向的兩個參數被添加並且文件創建正常。但是,在Unix上,它將>和文件名字符串視爲可執行文件的附加參數,而不是重定向。

如何讓Unix讀取這個命令,就好像它是直接在命令行上鍵入一樣?我已經將該命令作爲字符串輸出,並將其複製並粘貼到Unix中,並且按預期工作,但是從Java程序運行時,重定向未被正確處理。

我試過使用方法的addArgument(字符串,布爾)版本作爲true和false,都沒有幫助。這真是讓我瘋狂。

回答

1

您誤解了the class的用途。如上所述,這是爲了「指定要執行的進程」。它可以幫助您將參數列表傳遞給程序。它並不是告訴shell要做什麼。 >是由shell實現的重定向操作符。它在Windows上工作的事實是一個意外。

此外,請注意,這是Apache Commons Exec的一部分,而不是Apache Commons CLI

爲了避免自己進行重定向,最好的選擇可能是爲每個平臺創建一個簡單的批處理文件或shell腳本並調用它。

0

Escape >,例如,

cloudscan_cmdl.addArgument("\>"); 
相關問題