在 java 程序中执行 bash 命令
Execute bash command within java program
找了好久没找到解决办法。我正在尝试在 .jar 文件中对 Linux 执行 bash 命令。
为此,我尝试了很多东西,包括这个:
Process p = new ProcessBuilder("java", "-jar", "M1_MIAGE_PDL_VIZ_GROUPE3.jar", "menu").start();
Runtime.getRuntime().exec("/bin/sh -c java -jar M1_MIAGE_PDL_VIZ_GROUPE3.jar menu");
Runtime.getRuntime().exec(new String[]{"/bin/sh -c", "java -jar M1_MIAGE_PDL_VIZ_GROUPE3.jar menu"});
所以,当我点击 .jar 文件时,我希望程序打开一个 bash,并执行命令 (java -jar ...),以执行节目的另一部分。
关于如何操作有什么想法吗?
我认为最简单的方法是创建一个 shell 脚本(.sh 扩展名),然后您可以从 Java 程序中轻松地 运行 该脚本。
关于如何在 Java .
中 运行 shell 脚本,有一个很好的答案
要创建 shell 脚本,您可以使用任何文本编辑器创建一个扩展名为 .sh 的文件,然后像在 bash 终端中一样输入行。
要理解这一点,您首先需要了解如何在 shell 提示符下 运行 该命令。
$ sh -c "java -jar M1_MIAGE_PDL_VIZ_GROUPE3.jar menu"
注意双引号在哪里。第一个参数是 -c
。第二个参数是引号内的内容;即 java -jar M1_MIAGE_PDL_VIZ_GROUPE3.jar menu
现在我们将其翻译成 Java:
Process p = new ProcessBuilder(
"/bin/sh",
"-c",
"java -jar M1_MIAGE_PDL_VIZ_GROUPE3.jar menu").start();
话虽如此,以上实际上并没有实现任何目标。当然,它不会打开一个新的控制台 window 来显示控制台输出等等。与 Windows "CMD.exe" 不同,UNIX / Linux shell 不提供控制台/终端功能。为此,您需要使用 "terminal" 应用程序。
例如,如果您使用的是 GNOME
Process p = new ProcessBuilder(
"gnome-terminal",
"-e",
"java -jar M1_MIAGE_PDL_VIZ_GROUPE3.jar menu").start();
将(可能)做你想做的事。
找了好久没找到解决办法。我正在尝试在 .jar 文件中对 Linux 执行 bash 命令。 为此,我尝试了很多东西,包括这个:
Process p = new ProcessBuilder("java", "-jar", "M1_MIAGE_PDL_VIZ_GROUPE3.jar", "menu").start();
Runtime.getRuntime().exec("/bin/sh -c java -jar M1_MIAGE_PDL_VIZ_GROUPE3.jar menu");
Runtime.getRuntime().exec(new String[]{"/bin/sh -c", "java -jar M1_MIAGE_PDL_VIZ_GROUPE3.jar menu"});
所以,当我点击 .jar 文件时,我希望程序打开一个 bash,并执行命令 (java -jar ...),以执行节目的另一部分。
关于如何操作有什么想法吗?
我认为最简单的方法是创建一个 shell 脚本(.sh 扩展名),然后您可以从 Java 程序中轻松地 运行 该脚本。
关于如何在 Java
要创建 shell 脚本,您可以使用任何文本编辑器创建一个扩展名为 .sh 的文件,然后像在 bash 终端中一样输入行。
要理解这一点,您首先需要了解如何在 shell 提示符下 运行 该命令。
$ sh -c "java -jar M1_MIAGE_PDL_VIZ_GROUPE3.jar menu"
注意双引号在哪里。第一个参数是 -c
。第二个参数是引号内的内容;即 java -jar M1_MIAGE_PDL_VIZ_GROUPE3.jar menu
现在我们将其翻译成 Java:
Process p = new ProcessBuilder(
"/bin/sh",
"-c",
"java -jar M1_MIAGE_PDL_VIZ_GROUPE3.jar menu").start();
话虽如此,以上实际上并没有实现任何目标。当然,它不会打开一个新的控制台 window 来显示控制台输出等等。与 Windows "CMD.exe" 不同,UNIX / Linux shell 不提供控制台/终端功能。为此,您需要使用 "terminal" 应用程序。
例如,如果您使用的是 GNOME
Process p = new ProcessBuilder(
"gnome-terminal",
"-e",
"java -jar M1_MIAGE_PDL_VIZ_GROUPE3.jar menu").start();
将(可能)做你想做的事。