簡體   English   中英

如何在Linux中打開命令終端?

[英]How to open a command terminal in Linux?

我想使用Java代碼在Linux機器上打開終端(命令提示符)。 我知道如何在Windows中打開命令提示符。我在windows中使用了以下代碼

String command= "cmd c/start cmd.exe"
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(command);

我在Linux中需要相同的東西。

謝謝你的回答。 我也想運行一個sh腳本。

以下代碼是否有效。

String command= "usr/bin/xterm myshell.sh";
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(command);

在Linux中,有許多終端模擬器允許您與各種shell進行交互。 每個shell基本上都是一個了解Linux命令的命令解釋器(我猜想GNU和Unix命令更正確......)。 終端仿真器為shell提供了一個接口(窗口)以及一些其他使用命令提示符的工具。 要打開終端窗口,您只需修改命令字符串,如下所示: -

import java.io.*;

class TerminalLauncher
{
    public static void main(String args[]) throws IOException
    {
        String command= "/usr/bin/xterm"; 
        Runtime rt = Runtime.getRuntime();  
        Process pr = rt.exec(command);
    }
}

我做的基本假設是你要打開xterm ,它幾乎可以在任何系統上使用(當然安裝了X)。 您可能想要打開另一個終端模擬器,如rxvt,eterm,aterm,gnome-terminal或konsole。 也可以修改命令字符串以使用不同的shell,如zsh 我建議您在您選擇的終端不存在時捕獲異常並通過要求用戶安裝它來處理它。 更好的解決方案是接受用戶首選shell的命令行參數,或者使用用戶可以更改的配置文件,以使腳本打開他/她選擇的shell。

注意
1.正如其他人已經指出的那樣,xterm(或您選擇的任何其他終端)可能不在指定的路徑中(/ usr / bin / ...),甚至可能沒有安裝,所以您可能不得不使用一些花哨的命令字符串(例如:在啟動之前通過grep查找通過grep獲取xterm的路徑),這不是一個好主意。 我認為最好的方法是讓用戶配置整個事情。

2.我對這個答案(由ypnos)發表了評論,建議我避免使用絕對路徑,而是依賴於PATH環境變量中的命令。 我不得不說我同意。 在這種情況下,命令字符串應為 -

String command = "xterm"

請查看注釋,因為它還指出了使用find的問題。

xterm很可能在大多數基於Linux的操作系統上都可用,如果存在,將在路徑變量中找到。

因此,您需要執行以下操作:

try {
    Runtime r = Runtime.getRuntime();
    String myScript = .....
    String[] cmdArray = {"xterm", "-e", myScript + " ; le_exec"};
    r.exec(cmdArray).waitFor();
} catch (InterruptedException ex){
    ex.printStackTrace();
} catch (IOException ex) {
    ex.printStackTrace();
}

-e選項可用於調用腳本或其他程序,例如:javac。 在這種情況下,您可以進行如下任務:myScript =“javac”。

如果您不希望窗口在執行后立即關閉,則需要" ; le_exec"部分,否則丟棄它。 分號用於分隔命令,le_exec只是一個等待用戶按Enter鍵的簡單腳本。

但是,如果您的腳本需要參數,那么您需要替換字符串myScript和字符串數組。

在Linux上沒有單一的標准“終端”命令 - 可用的命令取決於存在哪個GUI(即KDE或Gnome等)。

應該能夠依賴於xterm ,但是在現代Linux變體上並不是首選的終端:

String command= "/usr/bin/xterm";
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(command);

當然,“xterm”可能不屬於那個特定的路徑......

在Gnome下,它是gnome-terminal

在KDE下,它是konsole

或者你可以使用更通用的終端程序xterm

您可能希望在大多數情況下使用選項,因此請查找您想要的手冊頁。

實際上並沒有“終端”。 你真正想要的是shell。 大多數Linux使用BaSH作為shell,但為了保證安全,你應該將自己限制在/ bin / sh

編輯:嗯,我可能很想念這個問題。 如果您想要一個交互式終端,您應該考慮使用提供組件的工具包。

編輯2:也許您的需求可以由VTE提供,VTE是用於嵌入終端的GTK +組件。

我認為如果您的應用程序將打開用戶的默認終端應用程序將會很好。

不幸的是,似乎沒有通用的方法來確定它。

在我看來,最優選的解決方案是(每當你打開一些東西時停止):

  • 嘗試重新認識用戶的桌面環境並確定它的默認終端應用程序。 你可以在這里閱讀一些相關內容。
  • 檢查環境變量$ TERM
  • 詢問用戶的偏好並將其保存在配置文件中。

找出用戶的桌面環境,它的默認終端可能太復雜了,所以我會使用最后兩個選項。 您可以使用以下代碼從$ TERM運行應用程序:

String command = System.getenv().get("TERM");
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(command);

我肯定會提供一種簡單的方法來在一個易於編輯的地方配置所需終端的路徑。 例如,可能在配置XML文件中。

不同的發行版會將其保存在不同的位置,因此最好檢查您要定位的平台的每個發行版文檔(並記錄如何更改它)。

“/ usr / bin / xterm”應該出現在大多數機器上,但我不一定會把它放在農場上。

因為你必須假設你對你運行它的系統幾乎一無所知,我會說最低的共同點是:

String command =“/ bin / sh”;

  • 甚至更“保證” -

String command =“sh”;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM