使用Bash Shell脚本提取Java版本号失败的问题排查
Java -version版本号提取失败的原因及解决方法
问题原因
java -version的输出默认打印到标准错误流(stderr),而非标准输出流(stdout)。你之前的管道命令只捕获了stdout的内容,导致awk无法获取到任何输入,最终输出为空。
解决方法
1. 修正输出捕获逻辑
先将stderr重定向到stdout,让管道能获取到java -version的输出:
APP_JAVA_VER=$(/the/directory/to/java/bin/java -version 2>&1 | awk -F'java version' '{print $2}' | xargs)
其中2>&1是关键,它把文件描述符2(stderr)的内容重定向到文件描述符1(stdout),确保后续命令能读取到输出。
2. 精准提取版本信息
- 提取完整版本号(如1.7.0_269):
改用双引号作为分隔符,直接定位版本字符串:FULL_JAVA_VER=$(/the/directory/to/java/bin/java -version 2>&1 | awk -F'"' '/java version/ {print $2}') - 单独提取build号(如269):
在拿到完整版本号后,按下划线分割取第二个元素:JAVA_BUILD_NUM=$(/the/directory/to/java/bin/java -version 2>&1 | awk -F'"' '/java version/ {split($2, ver_arr, "_"); print ver_arr[2]}')
内容的提问来源于stack exchange,提问作者TorusWithSprinkles
相关产品推荐
相关产品推荐

