Запустить CMD эквивалент в OSX? - PullRequest
0 голосов
/ 23 марта 2009

Я использую этот код, чтобы моя Java-программа открывала (видимое) окно CMD:

try {
            String line;
            Process p = Runtime.getRuntime().exec("cmd /C start \"Render\" \"" + myPath + "\\punchRender.cmd\"");
             BufferedReader input =
                    new BufferedReader(new InputStreamReader(p.getInputStream()));
            while ((line = input.readLine()) != null) {
            System.out.println(line);
            jLabel7.setText(line);

            }
            input.close();
        } catch (Exception err) {
            err.printStackTrace();
        }

и я пытался сделать то же самое с терминалом OSX, вот где я сейчас нахожусь:

  try {
            String line;
            Process p = Runtime.getRuntime().exec("sh " + myPath + "/punchRender.sh");
             BufferedReader input =
                    new BufferedReader(new InputStreamReader(p.getInputStream()));
            while ((line = input.readLine()) != null) {
            System.out.println(line);
            jLabel7.setText(line);

            }
            input.close();
        } catch (Exception err) {
            err.printStackTrace();
        }

Пока что не повезло :( Есть предложения? Файл .sh даже не работает ...

Ответы [ 5 ]

2 голосов
/ 23 марта 2009

Я бы просто удостоверился, что в вашем сценарии оболочки включены биты выполнения, и просто передал имя файла сценария оболочки.

Process p = Runtime.getRuntime().exec(myPath + "/punchRender.sh")

Edit:

Я не знаю Java конкретно, есть ли возможность установить права доступа к файлам для Unix / Linux с его помощью, чтобы установить бит eXecute или как экранировать кавычки. Но это было бы что-то вроде этого:

Process chmod = Runtime.getRuntime().exec("chmod u+x \"" + myPath + "/punchRenderer.sh\"")

2 голосов
/ 23 марта 2009

Это должно работать. Не только запуск скрипта, но и открытие терминала:

Process p = Runtime.getRuntime().exec("open -a /Applications/Utilities/Terminal.app \"" + myPath + " /punchRender.sh\"");

1 голос
/ 23 марта 2009

Если вы хотите новое видимое окно терминала, вы не можете запустить оболочку напрямую. Вам нужно запустить терминал, а затем запустить файл .command, а не скрипт оболочки. Я не уверен, насколько сложно было бы подключить стандартный вывод этой команды к вашему процессу Java. Возможно, вам придется найти какой-то другой способ получения вывода в терминал.

Кстати, я попробовал твой код в классе на своем собственном Mac дома, и он отлично запустил файл .sh. Я запускал класс Java из командной строки. Может быть, Ш просто не в вашем ПУТИ.

0 голосов
/ 23 марта 2009

Могу ли я предложить вам записать стандартную ошибку , а также в качестве стандартного вывода и сбросить ее. Это должно дать вам некоторое представление о том, что происходит (это хорошая практика в целом).

Вам может потребоваться собрать стандартный вывод и стандартную ошибку в разных потоках, чтобы избежать проблем с блокировкой. См. здесь для StreamGobbler

0 голосов
/ 23 марта 2009

Полагаю, вы проверили, что файл .sh исполняемый, не так ли?

...