当前位置: 首页 > 面试题库 >

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

华善
2023-03-14
问题内容

我一直在寻找使用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方面的愚蠢之处,要么是别名工作方式的冲突。我把它交给您尊贵的智者!

更新:这也不起作用:

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

我收到的错误是Runtime生成的进程中的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)如果从Finder运行Java程序,则必须在〜/ 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"};


 类似资料:
  • 请先参考这个问题, 无法读取opensslv. h:没有这样的文件或目录 基于此,我需要使用AppleScript运行以下三行终端命令, 我尝试了两种方法,我创建了带有.命令和. sh扩展名的文本文件,并添加了上述三行。然后尝试从AppleScript运行它, 但我犯了这个错误, 这可能行得通, 但它在第三行的终端上请求密码,并等待用户响应。AppleScript中显示的密码对话框(当以管理员权限

  • 问题内容: 到目前为止,我主要使用eclipse。现在,我正在尝试从终端运行Java,但程序包存在问题。 这是我的文件: 我使用编译此代码,然后运行,它给我: 当我删除一切正常。我想念什么? 给出: 问题答案: 您需要在一个目录级别上运行java命令,并以完全合格的软件包名称提供它,例如: 请参阅Java Launcher如何查找用户类 以了解其工作方式。

  • 当我在终端中点击curl代码时,我得到了200,所以我假设我编写testStytch的方式到目前为止还可以。但是,一旦我试图集成到java文件中,我就会收到错误的请求响应。我现在有点不知所措。https://github.com/libetl/curl这就是我所说的转换curl代码。 这是我得到的错误。https响应代理{HTTP/1.1 400错误请求[日期:星期四,2021 23:21:424

  • 问题内容: 关于主题,下面的代码 从Ubuntu运行终端。 运行终端后如何在终端中发出命令? 例如:运行终端并运行命令,例如“ ls”等。 问题答案: 您可以在命令行中提供一些选项,以指定执行的内容。 该选项为您提供大致相同的好处,但您可以将命令行拆分为单独的单词。 二者并同时连接program`s标准输入和输出到端子与可选参数运行该程序。因此,用户可以与终端进行正确的交互。 例: 这将打开终端并

  • 我刚开始咕噜咕噜的。我正在尝试在我的Mac OSX Lion上配置Grunt。 我按照这里的说明,然后创建了一个包含下面文件的项目文件夹。当我尝试通过在终端中键入“grunt”来运行时,我会得到。我还修改了paths,希望添加路径可以使任务运行器工作,但它仍然不能工作。有人能帮忙吗?

  • 有人能发布详细的分步说明如何安装Saxon(10 HE)以及如何从MacOS(10.13.6)中的命令行运行转换吗? 我已经在我的计算机上安装了Java 我已经下载了SaxonHE10-6J。来自SourceForge的zip文件 根据这里的建议,我放置了saxon-he-10.6。jar位于myUserName/Library/Java/Extensions文件夹中 然后,我打开终端应用程序并根