如何在Linux中打开命令terminal?

我想使用Java代码在Linux机器上打开terminal(命令提示符)。 我知道如何在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); 

Solutions Collecting From Web of "如何在Linux中打开命令terminal?"

在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" 

看看评论,因为它也指出了使用查找的问题。

在GNOME下,它是gnome-terminal

在KDE下,它是konsole

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

你可能想要使用其中的大多数选项,所以请查看你想要的手册页。

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

应该可以依靠xterm的存在,但是现代的Linux变种不是选择的终端:

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

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

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。

我认为这将是很好,如果你的应用程序将打开用户的默认终端应用程序。

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

在我看来,最喜欢的解决方案是(停止,只要你可以打开的东西):

  • 尝试识别用户的桌面环境,并确定它是默认的终端应用程序。 你可以在这里阅读一些关于它的东西
  • 检查环境变量$ TERM
  • 询问用户的偏好,并将其保存在配置文件中。

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

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

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

编辑:嗯,我可能会missunderstood这个问题。 如果你想要一个交互式终端,你应该使用一个工具包来提供一个组件。

编辑2:也许你的需求可以由VTE服务,这是用于嵌入终端的GTK +组件。

我肯定会提供一个简单的方法来配置路径到所需的终端在一个可以轻松编辑的地方。 例如也许在配置XML文件。

不同的发行版会将它保存在不同的地方,因此最好检查一下您的目标平台的每个发行版文档(并记录如何更改它)。

“/ usr / bin / xterm”应该在大多数机器上,但我不一定会在这个农场下注。

既然你不得不假定你对这个系统几乎一无所知,我会说最低的共同点是:

String command =“/ bin / sh”;

  • 甚至更“保证” –

String command =“sh”;