当我尝试执行以下 .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 文件(即 $9 和 $10)中的 java 命令中删除最后两个参数时,它工作正常并且我得到了预期的结果。
有人可以解释一下这里发生了什么吗?