Как запустить терминальные команды Mac OS из Java (используя Runtime?) - PullRequest
4 голосов
/ 18 января 2011

Я искал способы запуска внешних программ, используя среду выполнения Java.Это прекрасно работает, например:

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

Создает новый каталог, как вы ожидаете.Теперь из окна bash в Mac я могу написать:

love testgame

Чтобы запустить игровой движок 'Love' в папке с именем testgame.Причина, по которой это работает, заключается в том, что я назвал «любовь» псевдонимом любви.У меня такое ощущение, что это причина того, что следующее не работает:

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);

Я получаю ошибку 127 от процесса, сгенерированного средой выполнения.Я получаю это как «команда не найдена» везде, где я ее исследую.

1 Ответ

7 голосов
/ 18 января 2011

Я подозреваю, что у вас проблема с путём поиска исполняемых файлов. Это также зависит от того, используете ли вы приложение OSX или Unix cmd

Если unix cmd (или использовать часть Unix приложения OSX, например /Applications/AppName.app/Contents/MacOS/AppName), то есть два способа исправить это

  1. Введите полный путь к исполняемому файлу в коде Java, например,
    String[] cmd = {"/full/absolute/path/to/love", "/Users/mtc06/testgame"};

  2. Измените путь для включения исполняемого файла. Это зависит от метода запуска Java.

    a) Если java запускается из командной строки, добавьте каталог исполняемого файла в переменную среды PATH.
    б) Если Java-программа запускается из Finder, путь должен быть изменен в ~ / MacOSX / environment.plist, например. добавление / пользователи / отметка / 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"};
...