При попытке автоматизировать процесс установки в Ubuntu 16.04 с a .jar
файл, я не знал, как решить следующую проблему:
Описание проблемы
Часть файлов установки автоматически генерирует следующий названный файл generate
в месте /usr/share/taskd/pki/
:
generate
#!/bin/sh
# For a public or production server, purchase a cert from a known CA, and skip
# the next step.
# For development, testing and personal server management, create a CA key and
# cert, and use that to generate a server key and cert. Creates:
# ca.key.pem
# ca.cert.pem
# server.key.pem
# server.cert.pem
./generate.ca
./generate.server
# Generate a certificate revocation list (CRL). The initial CRL is empty, but
# can grow over time. Creates:
# server.crl.pem
./generate.crl
# The above is sufficient to operate a server. What follows is a per-client
# process. Creates:
# ${1}.key.pem
# ${1}.cert.pem
./generate.client client
У меня есть проект Java, который выполняет команды установки, которые я выполняю от местоположения /mnt/c/example folder/setup.jar
. Код Java, который выполняет команду, состоит из: p = Runtime.getRuntime().exec(String[] command)
и фактическая команда на рассмотрении создается:
commands[10] = new String[2]
commands[10][0] = "sudo";
commands[10][1] = "/usr/share/taskd/pki/generate";
Принимая во внимание, что исходная команда оболочки:
cd /usr/share/taskd/pki
sudo ./generate
Решить мой xy
- проблема выполнения ./generate
файл, я могу
/usr/share/taskd/pki/
папка) и выполненный это. .jar
файл.Вопрос
Однако я задавался вопросом, как я могу передать "текущий каталог" /usr/share/taskd/pki/
к названному сценарию оболочки generate
в том месте, таком, что ./generate.ca
, ./generate/server
, ./generate.crl
и ./generate.client client
выполняются правильно/нашел.
Попытки
Первоначально я пытался cd
кому: root
и от root
кому: /usr/share/taskd/pki/
с .jar
файл, однако я узнал что cd
команда не является эффективной при использовании из .jar
.
Сомнения
Это могло бы походить просто на вопрос о программировании, который должен быть отправлен в Переполнении стека, но я думаю, что сущность является конкретной платформой; как передать среды/пути в Ubuntu между 2 сценариями в различных местоположениях. Я в настоящее время не могу предсказывать, будет ли окончательный ответ обычно применим к Linux или Ubuntu 16.04. Если эта перспектива или предположение являются неправильными сообщенные мне.
Обычно необходимо использовать java.lang. ProcessBuilder вместо Runtime.exec()
.
ProcessBuilder имеет некоторые хорошие функции как способность изменить переменные среды или установку рабочего каталога.
Здесь пример:
List<String> command = new ArrayList<String>();
command.add("./generate");
File workingDirectory = new File("/usr/share/taskd/pki/");
ProcessBuilder pb = new ProcessBuilder(command);
pb.directory(workingDirectory);
Process p = pb.start();