2012-09-04 80 views
11

我想通過使用ProcessBuilder類的Java應用程序按順序執行2個或多個命令。我嘗試了其他回覆/論壇中的建議,但沒有運氣。Java ProcessBuilder在Linux中按順序開始執行多個命令

以下是我已經試過的東西:

ProcessBuilder processBuilder = new ProcessBuilder("ls", ";", "pwd"); 

給了我以下錯誤:

錯誤:LS:;:沒有這樣的文件或目錄 錯誤:LS:密碼:沒有這樣的文件或目錄

ProcessBuilder processBuilder = new ProcessBuilder("ls", "&&", "pwd"); 

給了我類似的錯誤:

爾RORS:LS:& &:沒有這樣的文件或目錄 錯誤:LS:密碼:沒有這樣的文件或目錄

List<String> command = new ArrayList<String>(); 
    command.add("ls"); 
    command.add(";"); 
    command.add("pwd"); 
    ProcessBuilder processBuilder = new ProcessBuilder(command); 

給了我以下錯誤:

錯誤:LS:;:沒有這樣的文件或目錄 錯誤:ls:pwd:沒有這樣的文件或目錄

我的操作系統是Linux/Mac-OSX。

回答

19

您的方法等同於使用指定的參數調用ls。在bash的符號,你正在運行的是:

ls ';' pwd 
ls '&&' pwd 

如果你想lspwd來運行作爲單獨的命令,你可以用擊(或其他shell語言)將它們包裝成一個單一的命令:

bash -c 'ls ; pwd' 

,你可以調用這個方法:

ProcessBuilder processBuilder = new ProcessBuilder("bash", "-c", "ls ; pwd"); 
+0

非常感謝,它按預期工作 –

+0

@NarinderKumar:不客氣! – ruakh

+0

@ruakh你能告訴我如何使用基於Windows的PsExec.exe來做這個包裝嗎?例如,導航到「C」驅動器並創建一個名爲「abc」ex:new ProcessBuilder(「psexec」,「-c」,「cd c:\; mkdir abc」);的目錄。非常感謝。 – Channa