Это не первый раз, когда я пытался выполнить системную команду из Java; но на этот раз это оказывается очень тяжело. У меня есть сценарий, который отлично работает с терминалом. Он считывает данные из файла (input.txt), обрабатывает его и экспортирует результат в другой файл (ouput.txt). Все это длится не более 1 секунды. Но, когда я пытаюсь выполнить его с Java, он застревает и никогда не заканчивается. Это мой код:Java не может выполнить системную команду (Ubuntu)
Process p = new ProcessBuilder("./runCalculator.sh").start();
p.waitFor();
Я также попытался с Runtime.getRuntime().exec("./runCalculator.sh")
, но все-таки. Я прочитал как InputStream, так и ErrorStream этого процесса. Поток ошибок не возвращает ничего, кроме сообщения «Начальный расчет ...»
Любые идеи?
Спасибо, это сработало для меня! Но почему? –
Потому что вы должны фактически запустить «bash» (или «sh»), который является интерпретатором. И вы передаете команду, которую хотите выполнить (для bash это передается с помощью опции '-c') –
@Pantelis ваш исходный код работал бы, если файл, который вы передали в ProcessBuilder ctr, был исполняемым файлом. Поскольку это был сценарий оболочки runCalculator.sh, оболочка (bash или sh) является исполняемым программным файлом, необходимым для интерпретации команд сценария оболочки и запуска их. В командной строке запустите $ file/usr/bin/bash и сравните вывод с запуском $ file ./runCalculator.sh –