2011-09-28 55 views
2

關於主題,下面我如何從Java運行UNIX終端並向其發送命令?


Process proc = null; 
    try { 
     String[] cmdss= {"gnome-terminal"}; 


     proc = Runtime.getRuntime().exec(cmdss, null, wd); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

代碼運行的終端形式的Ubuntu。

運行term term後,如何向終端發出命令?

例如:運行在終端和運行命令,如「LS」等

+0

你應該做任何你想用Java做的,而不是使用shell命令。 – SLaks

+0

嗨,我很想這樣做,但我不認爲這是我的選擇。這是因爲除了運行腳本之外,運行某些腳本之後,用戶可能需要在終端中輸入諸如y/n之類的命令。我不知道如何從java界面做到這一點。 –

+1

你正在做什麼?你應該問一個單獨的問題? – SLaks

回答

2

你可以給gnome-terminal命令行什麼它將執行上的一些選項。

gnome-terminal -e /my/fortran/program 

-x選項可以讓你大致相同的好處,但你可以在命令行拆分成單獨的詞。

-e-x這兩個都可以運行帶有可選參數的程序,同時將程序的標準輸入和輸出連接到終端。所以用戶可以正確地與終端進行交互。

實施例:

gnome-terminal -x bash -c "ls; echo '<enter>'; read" 

這將打開終端並運行 「程序」 bashbash將得到兩個參數-cls; echo ....; read-c選項使bash解析並執行下一個參數。這將調用ls,然後echo ...然後read等待返回鍵。

在Java中,你必須將參數分割成適當像這樣的數組:

String cmd[] = {"gnome-terminal", "-x", "bash", "-c", "ls; echo '<enter>'; read" }; 
+0

哇..謝謝..它的作品完全像我想.. –

+0

你也可以考慮使用預期的程序,以便可以將響應編寫爲交互式提示;這看起來像是你真正想要的。 – Kevin

+0

凱文,那是我的真正意圖。但是,我不知道如何做到這一點,因爲我是基於.Net/Windows的程序員,而不是java/Unix程序員。所以我對「期望」事物完全無能爲力。 –