_.jar
_ファイルを使用してUbuntu 16.04のインストールプロセスを自動化しようとしましたが、次の問題を解決する方法がわかりませんでした。
問題の説明
インストールファイルの一部により、_/usr/share/taskd/pki/
_にgenerate
という次のファイルが自動的に生成されます。
_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
_
_./generate
_ファイルの実行に関するxy
問題を解決するために、
/usr/share/taskd/pki/
_フォルダにコピー))実行します。.jar
_ファイルの代わりに、実際にコマンドを実行するシェルコマンドを作成します。質問
ただし、_/usr/share/taskd/pki/
_の「現在のディレクトリ」をその場所にあるgenerate
という名前のシェルスクリプトに渡して、_./generate.ca
_、_./generate/server
_、 _./generate.crl
_と_./generate.client client
_が正しく実行/検出されます。
試行
最初に_/usr/share/taskd/pki/
_ファイルを使用してcd
からroot
へ、およびroot
から_.jar
_への変換を試みましたが、cd
.jar
_内から使用した場合、_コマンドは無効になります。
疑問
これは純粋にプログラミングの質問のように見えるかもしれませんが、Stack Overflowに投稿する必要がありますが、本質はプラットフォーム固有であると思います。異なる場所にある2つのスクリプト間でUbuntuの環境/パスを渡す方法。現在、最終的な回答がLinuxまたはUbuntu 16.04に一般的に適用されるかどうかは予測できません。この見方や仮定が正しくない場合はお知らせください。
通常、Runtime.exec()
の代わりに Java.lang.ProcessBuilder を使用する必要があります。
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();