如何在安装双JDK的RHEL系统中通过Shell自动获取JDK8安装路径?
适配单/多JDK场景的RHEL系统JDK 8路径查询脚本
下面这个Shell脚本可以自动识别RHEL系统中无论是单JDK还是多JDK(默认是JDK11)的场景,找出所有JDK8的安装路径:
#!/bin/bash # 初始化JDK8路径数组 jdk8_paths=() # 1. 从alternatives中查找所有JDK 8的条目 if command -v alternatives &> /dev/null; then alternatives --display java | grep -E '(jdk|jre).*8' | awk '{print $1}' | while read -r link_path; do real_path=$(readlink -f "$link_path") # 确认路径属于JDK8 if echo "$real_path" | grep -qE 'jdk1\.8|jre1\.8|jdk8|jre8'; then # 提取JDK根目录 jdk_root=$(dirname "$(dirname "$real_path")") if [[ ! " ${jdk8_paths[@]} " =~ " ${jdk_root} " ]]; then jdk8_paths+=("$jdk_root") fi fi done fi # 2. 扫描/usr/java目录下的JDK8路径 if [ -d "/usr/java" ]; then for dir in /usr/java/*; do if [ -d "$dir" ] && echo "$dir" | grep -qE 'jdk1\.8|jre1\.8|jdk8|jre8'; then real_dir=$(readlink -f "$dir") if [[ ! " ${jdk8_paths[@]} " =~ " ${real_dir} " ]]; then jdk8_paths+=("$real_dir") fi fi done fi # 3. 从RPM包中查找JDK8路径(针对RPM安装的JDK) if command -v rpm &> /dev/null; then rpm -qa | grep -E '(java-1.8.0|jdk1.8|jre1.8)' | while read -r pkg; do rpm -ql "$pkg" | grep -E 'bin/java$' | head -1 | while read -r bin_path; do jdk_root=$(dirname "$(dirname "$bin_path")") if echo "$jdk_root" | grep -qE '1\.8\.0'; then if [[ ! " ${jdk8_paths[@]} " =~ " ${jdk_root} " ]]; then jdk8_paths+=("$jdk_root") fi fi done done fi # 输出结果 if [ ${#jdk8_paths[@]} -eq 0 ]; then echo "未找到JDK 8的安装路径" else echo "找到以下JDK 8安装路径:" for path in "${jdk8_paths[@]}"; do echo "- $path" done fi
脚本说明
- alternatives扫描:针对多JDK通过alternatives管理的场景,列出所有Java备选项,筛选出JDK8相关的链接,解析真实路径后提取根目录,避免重复添加。
- /usr/java目录扫描:覆盖手动安装到该目录的JDK8,直接匹配目录命名规则,获取真实路径。
- RPM包查询:适配RHEL系统通过yum/rpm安装的JDK8,从包文件列表中定位java可执行文件,反向推导JDK根目录。
- 去重处理:确保同一个JDK路径不会被多次输出。
使用步骤
- 把上面的代码保存成
find_jdk8.sh文件 - 给脚本加执行权限:
chmod +x find_jdk8.sh - 直接运行:
./find_jdk8.sh
内容的提问来源于stack exchange,提问作者JCDani
相关产品推荐
相关产品推荐

