java - 如何从 Java 运行 Mac OS 终端命令(使用运行时?)

标签 java macos bash runtime runtime.exec

我一直在寻找使用 Java 运行时运行外部程序的方法。这很好用,例如:

String[] cmd = {"mkdir", "test"};
Runtime.getRuntime().exec(cmd);

如您所愿创建一个新目录。现在,在 Mac 的 bash 窗口中,我可以这样写:

love testgame

在名为 testgame 的文件夹中运行“Love”游戏引擎。现在,之所以可行,是因为我将“love”作为别名来调用 love 可执行文件。我有一种感觉,这就是以下内容起作用的原因:

String[] cmd = {"love", "/Users/mtc06/testgame"};
Runtime.getRuntime().exec(cmd);

这也不是(对于那些想知道的人):

String[] cmd = {"/bin/bash", "love", "/Users/mtc06/testgame"};
Runtime.getRuntime().exec(cmd);

毫无疑问,这要么是我的一些 Java 愚蠢行为,要么是与别名工作方式的冲突。我把它交给你们可敬的智者,SO!

更新:这也不起作用:

String[] cmd = {"/bin/sh", "/Applications/love", "/Users/michaelcook/Desktop/Playout"};
Runtime.getRuntime().exec(cmd);

我收到的错误是 127,来自运行时生成的进程。无论我在哪里研究它,我都会将其视为“找不到命令”。

最佳答案

我怀疑您遇到的问题是用于查找可执行文件的路径。这还取决于您使用的是 OSX 应用程序还是 unix cmd

如果是 unix cmd(或使用 OSX 应用程序的 Unix 部分,例如/Applications/AppName.app/Contents/MacOS/AppName),则有两种方法可以解决此问题

  1. 将可执行文件的完整路径放入 Java 代码中,例如
    String[] cmd = {"/full/absolute/path/to/love", "/Users/mtc06/testgame"};

  2. 更改路径以包含可执行文件。这取决于启动 java 的方法。

    a)如果 java 是从命令行运行的,那么将可执行文件的目录添加到 PATH 环境变量中。
    b) 如果 java 程序是从 Finder 运行的,则必须在 ~/MacOSX/environment.plist 中更改路径,例如添加/Users/mark/bin

   <?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
   <plist version="1.0">
   <dict>
      <key>PATH</key>
      <string>/Users/mark/bin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11R6/bin:/usr/libexec/binutils:</string>
   </dict>
   </plist>

如果该应用是 OSX 应用,您需要使用 open 启动它,因此命令行是

open -a love.app "/Users/mtc06/testgame"  

所以 Java 命令是(未测试)

String[] cmd = {"/usr/bin/open", "-a" , "love.app",  "/Users/mtc06/testgame"};

关于java - 如何从 Java 运行 Mac OS 终端命令(使用运行时?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4726001/

相关文章:

bash - 如何使用 xmllint 和 xpath 输出多行

java - 为什么我不能插入堆栈? Java 6 泛型

java - 在单个 micronaut 项目中运行多个微服务的配置

c++ - CMAKE 为 dylib 创建 OSX 包?

java - 一次打开多个相同的 Mac 应用程序

bash - SED 查找 0.0% 的行//忽略 100.0% 的行

windows - gmake 使用 sh.exe 会导致构建错误

java - 无法将列表转换为 Java 泛型中的列表错误

java - 如何使用 Java 分隔符模式?

xcode - 如何确定 OS X dylib 是否与 -flat_namespace 链接