【问题标题】:Execute bash command within java program在java程序中执行bash命令
【发布时间】:2017-05-03 01:02:41
【问题描述】:

自从我寻找以来已经有一段时间了,但我没有找到解决方案。我正在尝试在 .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 ...),以执行程序的另一部分。

关于如何做的任何想法?

【问题讨论】:

    标签: java linux bash process command


    【解决方案1】:

    我认为最简单的方法是创建一个 shell 脚本(.sh 扩展名),然后您可以轻松地在 Java 程序中运行它。 关于如何在 Java here 中运行 shell 脚本的上一个问题有一个很好的答案。

    要创建 shell 脚本,您可以使用任何文本编辑器并创建扩展名为 .sh 的文件,然后像在 bash 终端中一样输入行。

    【讨论】:

      【解决方案2】:

      要理解这一点,您首先需要了解如何在 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();
      

      话虽如此,以上实际上并没有实现任何目标。当然,它不会打开一个新的控制台窗口来显示控制台输出等。与 Windows“CMD.exe”不同,UNIX/Linux shell 不提供控制台/终端功能。为此,您需要使用“终端”应用程序。

      例如,如果您使用的是 GNOME

      Process p = new ProcessBuilder(
         "gnome-terminal", 
         "-e", 
         "java -jar M1_MIAGE_PDL_VIZ_GROUPE3.jar menu").start();
      

      会(可能)做你想做的事。

      【讨论】:

      • 感谢您的回答。但我还是有问题。我看到 gnome-terminal 打开,但之后直接关闭。我尝试在调用进程后插入一个 waitFor() 方法,但没有成功。
      • 尝试在“java ...”命令字符串的末尾添加“; sleep 60”。或者,查看(许多)替代终端仿真器之一是否具有不立即退出的选项。
      • 问题是当我打开一个终端时,它会在 /home/user 目录中打开。我将在 java -jar 命令之后插入绝对路径,程序就可以正常工作了。谢谢你的帮助 ! :)
      猜你喜欢
      • 1970-01-01
      • 2011-01-16
      • 2015-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多