2013-03-12 60 views
1

我需要從JSP執行linux命令。 它工作正常。 但我需要通過JSP在Linux的特定目錄中啓動一些sh文件。說/home/username/something/start.sh從JSP更改linux的PWD

try{ 
String command= "cd /home/username/something"; 

Runtime.getRuntime().exec(command); 
Runtime.getRuntime().exec("./start.sh") 


out.println("Child"); 
} 
catch(Exception e) 
{ out.println("Error"); 
} 

它說文件或目錄未找到。

我試過Runtime.getRuntime().exec("pwd"),它顯示的內容類似「[email protected]」! :O

我需要更改pwd並通過jsp執行一些命令。我怎樣才能做到這一點?? 任何幫助,將不勝感激。

+0

那'java.lang.UNIXProcess @ fc9d2b'字符串你得到的是'Process'的'的toString()'實例'exec()'正在返回。爲了查看命令的輸出,你應該[捕獲'Process'的標準輸出](http://stackoverflow.com/q/882772/851811)。 – 2013-03-12 12:47:50

+0

你可以告訴如何捕獲'Process'的標準輸出? – BinaryMee 2013-03-12 12:49:21

+0

使用['Process.getOutputStream()'](http://docs.oracle.com/javase/6/docs/api/java/lang/Process.html#getOutputStream())。 – 2013-03-12 12:49:58

回答

7

你不應該(實際上,它似乎你不能)設置這樣的工作目錄。 Runtime.exec()給出的每個Process對象都有自己的工作目錄。

如在How to use 「cd」 command using java runtime?中回答的,您應該使用Runtime.exec()的三個參數版本,其中您提供了一個將作爲工作目錄的File。從它的javadoc

執行單獨的進程中指定的命令和參數指定環境和工作目錄

甚至更​​好,使用ProcessBuilderProcessBuilder.directory()不是沿着:

ProcessBuilder pb = new ProcessBuilder("start.sh"); 
pb.directory(new File("/home/username/something")); 
Process p = pb.start();