這是給人的ls
只是輸出:從Java程序運行系統命令有問題:
String[] cmd={"bash","-c","ls","-l"}:
ProcessBuilder pb=new ProcessBuilder(cmd);
儘管這是給長的正確列表輸出:
String[] cmd={"bash","-c","ls -l"};
這是給人的ls
只是輸出:從Java程序運行系統命令有問題:
String[] cmd={"bash","-c","ls","-l"}:
ProcessBuilder pb=new ProcessBuilder(cmd);
儘管這是給長的正確列表輸出:
String[] cmd={"bash","-c","ls -l"};
在第一代碼片段,-l
選項被作爲參數傳遞給bash,而不是ls。 Bash將-l
選項解釋爲指定它應該表現爲「登錄」shell。
-c
之後的參數應該包含您想要執行的整個bash腳本(包含空格),所以第二個代碼片段是正確的。
哦,好吧。謝謝。但是如果我想使用cat命令動態顯示文件呢?一個示例場景是當我想在循環中傳遞文件名以進行顯示時。 – HelloWorld 2012-01-27 16:26:28
如果你想用多個參數調用'cat',那麼你可以使用一個StringBuilder和'for'循環來將命令行建立成單個字符串(文件名之間有空格)。它可以附加到字符串「cat」上,並用於'-c'後面的命令行參數。 – 2012-01-27 16:34:30
非常感謝您的幫助。 – HelloWorld 2012-01-27 16:42:33
前者傳遞兩個選項標誌,以bash
:-c
用爭論ls
,和-l
根據手冊頁引起bash
充當登錄shell。
第二個通過一個選項標誌-c
,其中參數ls -l
作爲單個字符串。
哦,好的。謝謝。但是如果我想使用cat命令動態顯示文件呢?一個示例場景是當我想在循環中傳遞文件名以進行顯示時 – HelloWorld 2012-01-27 16:28:40
String[] cmd={"bash","-c","ls -l"}:
ProcessBuilder pb=new ProcessBuilder(cmd);
的arguements都打壞,所以如果你想要的bash到interpert您通過「慶典」,「命令」,「-c」,... 那麼下一個項目需要在您的整個命令,又名「ls -l」。
然後Bash將解析「命令」,並將-l作爲參數發送給「ls」。目前它是「bash」的參數,這就是爲什麼你沒有得到你想要的結果。
而你的問題是? – Tudor 2012-01-27 16:16:58
在Windows XP上運行。如果這很重要。 謝謝 – HelloWorld 2012-01-27 16:17:22
我想知道爲什麼它沒有給出我提到的第一種方式的輸出。輸出應該是一個長列表。 – HelloWorld 2012-01-27 16:18:46