2014-02-17 56 views
1

我以前問過同樣的問題,但沒有答案,也發現了類似這個問題herehere但同樣沒有適當的答案的一些其他問題。 任何人都可以請幫我解決這個問題。我試圖從Java打開一個shell並與之交互(編寫命令並讀取shell的輸出)。這些命令將由用戶給出,例如更改目錄,編譯C程序等。命令列表不固定。打開外殼和交互使用Java

我也試過並使用/ bin/bash -c方法以及以下內容。

Process p = new ProcessBuilder("xterm").start(); 

Process p = new ProcessBuilder("/bin/bash").start(); 

謝謝,我希望問題清楚。可行的解決方案的

+0

如果你的Java程序是正在執行的「導演」爲外殼,或者它旨在運行shell,並提供與它進行交互用戶的能力? – user3159253

+0

我想用重定向的某個目錄啓動shell(Java將使用cd命令更改shell的目錄)。一旦開始,我希望用戶可以與之交互。 – sol

+0

如果你想開始一個interractive殼,你真的需要啓動虛擬終端,只是外殼是不夠的。外殼只處理命令,啓動過程和他們聯繫在一起,但它是不是顯示在一個盒子 – Mzzl

回答

2

例子是幾乎像下面

Process process; 

    rt = Runtime.getRuntime(); 

try 
{ 

    process = rt.exec(new String[]{"bash","-c","ls -al /home/"}); 

    log.warn("message to display"); 

    BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream())); 

    String line=null; 

    while((line=input.readLine()) != null) { 

     log.warn(line); 
    } 

    int exitVal = process.waitFor(); 

    log.warn("Exited with error code : "+ exitVal); 

} 
catch (IOException e) 
{ 
    log.warn("IO Execption 1 Happen : " + e.getMessage()); 
} 
catch (Exception e) 
{ 
    log.warn("Execption Happen : " + e.getMessage()); 
} 
+0

這不會做什麼的海報要求,但我仍然認爲它很酷,它的工作。 – Mzzl

+0

我已經嘗試過這種方法,但還是感謝您試用。 – sol