【问题标题】:How do i run a UNIX terminal from Java and send commands to it?如何从 Java 运行 UNIX 终端并向其发送命令?
【发布时间】:2011-11-27 01:29:44
【问题描述】:

关于题目,代码如下


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


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

从 Ubuntu 终端运行。

运行终端后如何向终端发出命令?

例如:运行终端并运行“ls”等命令。

【问题讨论】:

  • 你应该在 Java 中做任何你想做的事情,而不是使用 shell 命令。
  • 嗨,我很想这样做,但我认为这不是我的选择。这是因为除了运行脚本之外,用户在运行某些脚本后可能还需要在终端中输入 y/n 等命令。我不知道如何从 java 接口做到这一点。
  • 你实际上想做什么?你应该问一个单独的问题吗?
  • 一个例子:从 java 运行一个 fortran 程序。如果我完全从 java exec 运行 fortran 程序,我运行它没有问题。但是,fortran 程序可能会提示用户进行额外输入。在这种情况下,我认为java无法捕获终端“等待输入”状态并提示使用从java接口输入数据。

标签: java shell unix terminal


【解决方案1】:

你可以在命令行上给gnome-terminal一些选项它应该执行什么。

gnome-terminal -e /my/fortran/program

-x 选项为您提供大致相同的好处,但您可以将命令行拆分为单独的单词。

-e 和-x 都使用可选参数运行程序,同时将程序的标准输入和输出连接到终端。这样用户就可以和终端正常交互了。

例子:

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

这将打开终端并运行“程序”bash。 bash 将获得 两个 参数:-c 和 ls; echo ....; read。 -c 选项使 bash 解析并执行下一个参数。这将调用ls,然后是echo ...,然后是等待返回键的read。

在 Java 中,您必须将参数适当地拆分为这样的数组:

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

【讨论】:

  • 你也可以考虑使用像expect这样的程序,这样你就可以编写交互式提示的响应;这似乎就是你所追求的。
  • 凯文,这是我的真正意图。但是,我不知道该怎么做,因为我是基于 .Net/Windows 的程序员,但不是 java/Unix 程序员。所以我对“期望”的事情完全一无所知。
  • 我至少理解部分描述。 “[I] 的工作方式与我想要的完全一样”让我有点吃惊,因为我没有认识到在我认为 Melvin 指定的用户与 Fortran 交互的大部分模型中所描述的内容。在任何情况下,都可以通过终端或作为 Java 的直接子进程来管理与 Fortran 编码进程的交互;我强烈赞成后者。梅尔文,您身边有大量的 Expect 帮助。 expectj.sourceforge.net、stackoverflow.com/questions/tagged/expect 和 wiki.tcl.tk/expect 可能会让您感兴趣。
猜你喜欢
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多