Это старый вопрос, но поскольку он так высоко поднялся на 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
.
Это возможно, просто должностное лицо это как любая другая программа. Просто удостоверьтесь, что Ваш сценарий имеет надлежащий #! (хижина) строка как первая строка сценария, и удостоверяется, существует, выполняют полномочия на файле.
, Например, если это - сценарий удара, помещает #!/bin/bash наверху сценария, также chmod +x.
Также что касается того, если это - хорошая практика, нет это не, специально для Java, но если это сохраняет Вас много времени, портируя большой сценарий, и Вы не становитесь заплаченными дополнительными, чтобы сделать это ;) сэкономить Ваше время, должностное лицо сценарий, и поместить портирование на Java в Вашем долгосрочном списке ожидающих выполнения задач.
Я думаю, что Вы ответили на свой собственный вопрос с
Runtime.getRuntime().exec(myShellScript);
относительно того, является ли это хорошей практикой..., что Вы пытаетесь сделать со сценарием оболочки, который Вы не можете сделать с Java?
Я сказал бы, что это не в духе Java для выполнения сценария оболочки от Java. Java предназначен, чтобы быть кросс-платформенным, и выполнение сценария оболочки ограничило бы свое использование просто UNIX.
После этих слов определенно возможно выполнить сценарий оболочки из Java. Вы использовали бы точно тот же синтаксис, который Вы перечислили (я не попробовал его сам, но пытаюсь выполнить сценарий оболочки непосредственно, и если это не работает, выполните саму оболочку, передав сценарий в как параметр командной строки).
Необходимо действительно посмотреть Разработчик Процесса . Это действительно создается для такого рода вещи.
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();
То же, что и Solaris 5.10, работает так ./ batchstart.sh
есть уловка, которую я не знаю, принимает ли ваша ОС его использование \\. batchstart.sh
вместо этого. Этот двойной слэш может помочь.