【发布时间】:2017-10-17 09:15:54
【问题描述】:
我有一个看似微不足道的问题:我想从一个 java 进程启动一个终端并给终端一两个命令。 我有一个简单的示例代码,可以在带有 CMD 的 Windows 上完美运行。但是我无法在 Linux 或 Mac OS 机器上实现相同的行为。 我知道该命令需要更改,但不幸的是我无法将参数字符串传递给 Mac 上的终端。
这里是windows的工作代码:
import java.lang.ProcessBuilder.Redirect;
public class ExecTest {
public static void main(String[] args){
String cmd = "cmd /c start cmd.exe /K \"echo hello && echo bye\"";
try {
Process p = Runtime.getRuntime().exec(cmd);
p.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
}
}
在 lubuntu 上,我已经能够使用以下命令创建终端:
lxterminal -l -e 'echo hello && echo bye && read'
但这仅在由终端调用而不是由 java 进程调用时才有效。
。
TLDR:此命令在 Linux 和 Mac 上的等效项是什么:
cmd /c start cmd.exe /K \"echo hello && echo bye\"
【问题讨论】:
-
你真的想要一个“终端”吗?或者你只是想执行一些 shell 命令?
-
我可以在我的 Ubuntu 机器上使用命令 'gnome-terminal' 和相同的 java 代码打开一个终端。你能试试这个吗?
-
@bmargulies 是的。提供一些上下文:我制作了一个代码编辑器,可以编译一些代码。我还创建了自己的终端来显示 exec 进程的结果。但在某些极端情况下,我无法完全显示 In 和 Outputstreams。因此,作为备份,我希望允许用户在本机终端中执行代码。所以是的,我想生成一个新的本地终端并执行一些代码。
-
@VipulGoyal 我不确定你的建议是什么。我知道我可以通过 java 进程打开一个终端,只需调用终端的名称,但主要问题是我无法向该终端提供任何命令。