Java から 3 つのパラメーターを受け取る bash スクリプトを実行しようとしています。以下は、コマンド ラインを作成するコードです。
CommandLine command = new CommandLine(/bin/bash);
command.addArgument(ScriptName);
command.addArgument(Param1);
command.addArgument(Param2);
command.addArgument(Param3);
空でないパラメーターが渡された場合、これは魅力のように機能します。しかし、パラメータの 1 つが空であると想定されているように機能しません (つまり、"")
詳しく言うと、場合によっては Param2 = "". これで、bash スクリプトが実行されると、Param2 = "" と見なされる代わりに、Param2 = Param 3 (値) および Param3 = undefined が使用されます。
これが起こらないようにするにはどうすればよいですか?
編集: Param1、Param2 & Param3 は、実際には bash スクリプトに渡されるファイル名です。ここで、Param1 => File1、Param2 => File 2 & Param3 => 出力ファイル
Bash スクリプトは、実際にはファイル 1 でいくつかのメトリックを呼び出して生成し、それを出力ファイルに保存しています。メトリックを生成する場合、生成されるメトリックには 2 つのカテゴリがあります。
- 絶対の
- 相対的
絶対はファイル 1 で生成され、相対はファイル 1 とファイル 2 を比較した後に生成されます。bash スクリプトでは、ファイル 2 が引数として渡されない場合、相対メトリックを生成しないという条件があります。
これがデザインになったものです。ここで、比較用のファイル 2 が存在しない場合に問題が発生します。この場合、絶対メトリックを生成し、相対メトリックを除外します。
しかし、今私に起こっていることは、Param 3 (つまり、出力ファイル) が File 2 (完全に望ましくない) と見なされ、相対メトリックの生成がトスになることです。
Runtime.getRuntime().exec を使用すると、引用することでこれを行うことができました。ie /bin/bash Script Param1 "" Param3 これは魅力的に機能しました。
コードを削減し、クロスプラットフォームのサポートを強化しようとして、commons-exec を導入したところ、問題が発生し始めました。
それで、私の質問はまだです、Param2の値を空にして、commons-execコマンドラインを使用してスクリプトをbashに渡すにはどうすればよいですか?