我正在使用 Java keytool 作为更大的 bash 脚本的一部分。我需要传入密码来创建密钥库,因此使用了命令keytool -importkeystore -deststorepass:file ${somefile}
。
-deststorepass:file
根据文档, 这仅在 Java 7 中可用http://docs.oracle.com/javase/6/docs/technotes/tools/solaris/keytool.html
http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/keytool.html
我之前曾使用过该脚本,但我认为这台机器上的默认 Java 一定是 Java 6,而且我不确定它是否可以update-alternatives -config java
被认为是稳定的。
有人知道在 Linux 环境中为特定脚本设置 Java 版本的方法吗?我看到了,但我自己无法将其翻译成 Linux。 在 OS X 中切换 Java 7 和 8
谢谢!
答案1
我猜您的愿望不是暂时更改系统范围的默认 Java 虚拟机,因为这可能会对其他应用程序产生意想不到的副作用,而只是找到一台适合您目的的机器。
假设您的 JVM 安装在没有空格的目录中(标准发行版中的一个简单的假设):
# wantedArg is the argument that we need
function getSuitableAlternative() {
cmd=$1
wantedArg=$2
JVM_LIST=$(update-alternatives --list $cmd)
# Try all available JVMs until we find one supporting the specified parameter
for jvm in $JVM_LIST
do
$jvm -help |grep -q -- -$wantedArg && { echo $jvm; break; }
done
}
# Find a "java" command supporting "deststorepass" argument
suitableJvm=$(getSuitableAlternative java deststorepass)
# Bad luck.
if [ "$suitableJvm" == "" ]
then
echo "No suitable JVM machine found" >&2
echo "Please sudo apt-get install jdk7..." >&2
exit 1
fi
$suitableJvm <...>