如何在Linux中打开命令终端?

时间:2009-02-28 11:56:58

标签: java linux terminal

我想使用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);

8 个答案:

答案 0 :(得分:8)

在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的问题。

答案 1 :(得分:3)

在Linux上没有单一的标准“终端”命令 - 可用的命令取决于存在哪个GUI(即KDE或Gnome等)。

xterm

当然,“xterm”可能不在那条特定的路径中......

答案 2 :(得分:3)

在Gnome下,它是gnome-terminal

在KDE下,它是konsole

或者您可以使用更通用的终端程序xterm

您可能希望使用大多数选项,因此请查找您想要的手册页。

答案 3 :(得分:3)

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和字符串数组。

答案 4 :(得分:1)

实际上并没有“终端”。你真正想要的是shell。大多数Linux使用BaSH作为shell,但为了保证安全,你应该将自己限制在/ bin / sh

编辑:嗯,我可能错过了解这个问题。如果您想要一个交互式终端,您应该考虑使用提供该组件的工具包。

Edit2:也许你的需求可以由VTE提供,VTE是用于嵌入终端的GTK +组件。

答案 5 :(得分:1)

我认为如果您的应用程序将打开用户的默认终端应用程序将会很好。

不幸的是,似乎没有通用的方法来确定它。

在我看来,最优选的解决方案是(只要你能打开一些东西就停止):

  • 尝试重新认识用户的桌面环境并确定它的默认终端应用程序。您可以阅读有关它的内容here
  • 检查环境变量$ TERM
  • 询问用户的偏好并将其保存在配置文件中。

找出用户的桌面环境,它的默认终端可能太复杂了,所以我会使用最后两个选项。 您可以使用以下代码从$ TERM运行应用程序:

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

答案 6 :(得分:0)

我肯定会提供一种在易于编辑的地方配置所需终端路径的简便方法。例如,可能在配置XML文件中。

不同的发行版会将其保存在不同的位置,因此最好检查您要定位的平台的每个发行版文档(并记录如何更改它)。

“/ usr / bin / xterm”应该出现在大多数机器上,但我不一定会把它放在农场上。

答案 7 :(得分:0)

因为你必须假设你对你运行它的系统几乎一无所知,我会说最低的共同点是:

String command =“/ bin / sh”;

  • 甚至更“保证” -

String command =“sh”;