Речь идет не о разрешениях на выполнение файла JAR. На самом деле, файл JAR должен быть только для чтения.
Если заголовок вашего вопроса является точным, речь идет о том, может ли программа на Java прочитать и выполнить сценарии оболочки , о которых вы говорите:
Сами сценарии оболочки должны выполняться исполняемым пользователем, который пытается их запустить. Например, в самих сценариях должны быть установлены соответствующие биты выполнения.
Пути к сценариям оболочки должны быть доступны для чтения (действующему пользователю ...) на всем пути от корневого каталога. (Или текущий каталог, если вы используете относительный путь относительно точки. Или каталоги $ PATH ..., если вы используете простое имя команды.)
Странно то, что фрагмент кода НЕ является попыткой запустить скрипт оболочки вообще. Это простая команда java
. Сценарии оболочки не используются.
Если это не удается из-за ошибки «В доступе отказано», либо команда java
не является исполняемой, либо файл JAR недоступен для чтения.
Я думаю, вы должны предоставить нам больше информации; например все соответствующие выходные данные, реальный код и реальные имена файлов и каталогов и разрешения.
Моя программа начинается с простой попытки перейти (через CD) к каталогу, в котором находится сам файл JAR:
Я предполагаю, что вы понимаете, что ваша попытка:
String[] cd = {jarDirectory.getAbsolutePath(), "cd"};
Runtime.getRuntime().exec(cd);
не работает. Он изменяет текущий каталог дочернего процесса, но это не влияет на родительский или следующий дочерний процесс, который вы запускаете. Вы должны использовать ProcessBuilder
и, в частности, его directory(File)
, который можно использовать для выбора другого текущего каталога для дочернего процесса.
Это означает, что вы, вероятно, находитесь не в том каталоге, что может привести к проблеме «отказано в разрешении».