我有一个服务器列表,我需要在其中以编程方式找到JDK-8的安装位置。一些服务器只有一个jdk安装,这使得使用shell命令readlink -f $(which java)
从/usr/java
找到安装位置变得更容易。但是某些RHEL服务器安装了多个jdk 11和8,alternative --config java
将被设置为jdk 11,在这些情况下,使用上面的命令很难得到jdk 8的安装位置。当RHEL服务器中有多个jdk版本安装时,寻求shell脚本来查找jdk安装位置,并适用于单个和多个jdk安装?
1条答案
按热度按时间fcy6dtqo1#
当RHEL服务器中有多个jdk版本安装时,寻求shell脚本来查找jdk安装位置,并适用于单个和多个jdk安装?
我们不是一个代码编写服务,但我们会给予你的信息和建议,可以帮助你为自己服务。
在使用alternatives系统在多个Java安装之间进行选择的机器上,您可以通过命令
alternatives --display java
获得有关所有已配置Java替代方案的信息。您还可以通过grep
进行过滤,只选择主链接。示例:但是,这已经假设Java 8 JDK可以通过
alternatives
系统使用,并且在alternatives
注册的路径中没有换行符。这就是RHEL包的工作方式,但是如果Java不是通过官方包安装的,那么它可能无法满足这些假设。此外,在安装软件包后,也可以手动注销alternatives
条目。为了超越这一点,您需要做一些额外的假设--具体地说,您可以从路径中识别出您正在寻找的Java安装。如果所有可用的Java安装都是通过官方RHEL包安装的,那么您可以在路径中查找“1.8.0”。因此,我们可以将先前的命令修改为:
如果你想让
grep
只解析出java
命令的路径,那么你可以更进一步:-o
选项告诉grep只打印与正则表达式匹配的那部分行。将bin/java
添加到模式中(可能)可以防止匹配扩展到注解字段,而\>
只是额外的保险,可以确保匹配在单词边界处终止。但是,这确实会做出额外的假设,即
java
二进制文件位于名称以bin
结尾的子目录中。这是一个相当安全的假设,特别是如果没有来自官方软件包以外的Java安装,但它不是绝对安全的。