次の .ksh ファイルを実行しようとすると、引数が期待どおりに渡されません。
ProcessLauncher.ksh:
/usr/java/jdk1.7.0_25/bin/java -Xmx256M $1 $2 $3 $4 $5 $6 $7 $8 $9 $10
これは、上記の .ksh ファイルを呼び出すために実行するコードです。
呼び出しクラス:
public static void main(String[] args) {
String[] cmdline = {};
cmdline = new String[]{"ksh", "../scripts/ProcessLauncher.ksh", com.myPackage.CalledClass.class.getName(), "SimpleDF", "1099"};
}
そして、これは.kshファイルを呼び出した後に実行されるコードです:
呼び出されたクラス:
public static void main(String[] args) {
System.out.println("Arguments passed: " + Arrays.toString(args));
if (args.length != 2) {
System.out.println("Invalid arguments");
System.exit(0);
}
}
CallingClass#main() メソッドを実行した後の期待される結果:
渡された引数: SimpleDF 1099
CallingClass#main() メソッドを実行した後の実際の結果:
渡される引数: SimpleDF 1099 com.myPackage. calledClass
無効な引数
完全修飾クラス名が最後の引数として間違って渡されています。SuSE Linux Enterprise Server (32 ビット) で JDK7u25 (32 ビット) を使用しています。ただし、.ksh ファイルの Java コマンドから最後の 2 つの引数 (つまり、$9 と $10) を削除すると、正常に動作し、期待どおりの結果が得られます。
誰かがここで何が起こっているのか説明してもらえますか?