2013-05-10 72 views
2

我想獲得一個擴展命令與runtime.exec一起使用,但大括號被解釋爲文字而不是被擴大。這裏就是我想要做的事:Shell的(bash)括號擴展與Java的runtime.exec

String command = "mkdir -p Foldername{1,2,3}/InnerFolder"; 
Runtime.getRuntime().exec(new String[] { "sh", "-c", command }); 

不幸的是,這給了我在我的當前目錄的單個文件夾命名爲「文件夾名稱{1,2,3}」的「Foldername1」,「Foldername2」,而不是和「Foldername3」。有誰知道一種方法來防止大括號被解釋爲文字?

回答

3

您正在嘗試使用Bash通配符。它們在Bash shell中被解釋。您直接運行mkdir,因此沒有shell來解釋{}。您需要指定外殼的路徑

String command = "mkdir -p Foldername{1,2,3}/InnerFolder"; 
Runtime.getRuntime().exec(new String[] { "/bin/bash", "-c", command }); 

Source

+0

奇怪的是,它指定了「bash」而不僅僅是「sh」,它爲我解決了它。喜歡AIX如何做到與世界其他地方有所不同... 無論如何,謝謝! – 2013-05-10 16:45:40

+0

@David:這不是AIX的事情。 Bourne shell('sh')不支持大括號擴展。 – 2013-05-10 17:27:01

+0

我的意思是在AIX上實際上不同於sh/bash。在我最近一直使用的Linux系統上,sh和bash都是符號鏈接的(不記得它走哪條路),但是在任何情況下都會執行相同的二進制文件。 – 2013-05-10 21:24:32