Передайте/установите 'текущий каталог' сценарию оболочки от Java в Ubuntu 16.04

При попытке автоматизировать процесс установки в 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 файл, я могу

  1. Создайте его в Java с полными путями, (скопируйте его в /usr/share/taskd/pki/ папка) и выполненный это.
  2. Создайте оболочку, управляют, чтобы на самом деле выполнил команды, вместо a .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. Если эта перспектива или предположение являются неправильными сообщенные мне.

1
задан 11 April 2019 в 13:30

1 ответ

Обычно необходимо использовать 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();
2
ответ дан 7 December 2019 в 13:18

Другие вопросы по тегам:

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