Как запустить скрипт оболочки Unix из кода Java?

Это старый вопрос, но поскольку он так высоко поднялся на google, я подумал, что было бы полезно исправить ответ. Фактически вы можете использовать метод Logging.init. Вот как вы добавили бы уровень trace журнала

require 'logging'
Logging.init %w(trace debug info warn error fatal)
Logging.logger.root.level = :trace
Logging.logger.root.add_appenders Logging.appenders.stdout
Logging.logger['hello'].trace 'TEST'

Это использует 2.0.0 жемчужины logging.

144
задан Lii 30 July 2016 в 14:12
поделиться

5 ответов

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

, Например, если это - сценарий удара, помещает #!/bin/bash наверху сценария, также chmod +x.

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

1
ответ дан Kekoa 30 July 2016 в 14:12
поделиться

Я думаю, что Вы ответили на свой собственный вопрос с

Runtime.getRuntime().exec(myShellScript);

относительно того, является ли это хорошей практикой..., что Вы пытаетесь сделать со сценарием оболочки, который Вы не можете сделать с Java?

21
ответ дан Hosam Aly 30 July 2016 в 14:12
поделиться

Я сказал бы, что это не в духе Java для выполнения сценария оболочки от Java. Java предназначен, чтобы быть кросс-платформенным, и выполнение сценария оболочки ограничило бы свое использование просто UNIX.

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

23
ответ дан Jack Leow 30 July 2016 в 14:12
поделиться
  • 1
    TestDriven.NET похож на большое дополнение Visual Studio, но я должен купить его...: ( – Michael Kniskern 6 November 2008 в 07:30

Необходимо действительно посмотреть Разработчик Процесса . Это действительно создается для такого рода вещи.

ProcessBuilder pb = new ProcessBuilder("myshellScript.sh", "myArg1", "myArg2");
 Map<String, String> env = pb.environment();
 env.put("VAR1", "myValue");
 env.remove("OTHERVAR");
 env.put("VAR2", env.get("VAR1") + "suffix");
 pb.directory(new File("myDir"));
 Process p = pb.start();
172
ответ дан djeikyb 30 July 2016 в 14:12
поделиться

То же, что и Solaris 5.10, работает так ./ batchstart.sh есть уловка, которую я не знаю, принимает ли ваша ОС его использование \\. batchstart.sh вместо этого. Этот двойной слэш может помочь.

0
ответ дан 23 November 2019 в 22:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: