我正在try 从目录如下所示的文件中提取版本号:

... /directory/to/java/bin/./java -version

从命令行运行该命令会产生以下输出:

java version "1.7.0_269"
Java(TM) SE Runtime Environment (build 7.0.8.10 - pkshd34234hsd284842_01(xop4_))
bla bla bla
whole bunch of 
extra info

我只需要提取该版本号1.7.0_269(特别是次要/补丁(?)版本"269").

我对另一个文件执行了类似的操作,并使用了以下语法:

JAVA_VER=$("/the/directory/to/jversion.sh" | awk -F'java.version:' '{print $2}' | xargs )

它工作得很好,但由于某些原因,它不适用于这个命令(诚然,我缺乏bash命令的知识,所以我不确定如何正确地修改它):

APP_JAVA_VER=$(/the/directory/to/java/bin/./java -version | awk -F'java version' '{print $2}' | xargs)

它什么也不会输出.有谁能告诉我如何做这件事的正确方向吗?我看到了许多不同的方法来解决这类问题,但我希望真正了解我的代码在哪里出错以及如何修改它.这与它不是.sh文件有关吗?谢谢你的帮助!

推荐答案

您的问题是有java -version个输出是STDERR的,而awk查看的是STDIN.

试试这个:

APP_JAVA_VER=$(/the/directory/to/java/bin/./java -version 2>&1 | awk -F'java version' '{print $2}' | xargs)

Linux相关问答推荐

GO:当使用NewManager调用创建cgroup时,权限被拒绝

在shell 中使用排除模式的grep

在 Bash 中使用 shell 脚本从文件中解析版本号

Linux TTY 操作顺序

通过 ssh 在远程计算机上按索引访问数组元素

如何在脚本中使用sudo修改其他用户的crontab

如何在充满 csv 的目录中获得不同的值计数

如何使用换行符或制表符或空格 grep 多行字符串

使用 Dockerfile RUN 执行某些操作但忽略错误

Docker 容器立即退出

RealUID,保存的 UID,有效的 UID.这是怎么回事?

是否可以在 Linux x86 GAS 程序集中创建没有系统调用的线程?

在 linux 上查看文件大小

使用 Bash 脚本查找文件中字符串的行号

在 Ubuntu 中学习 OpenGL

`os.symlink` 与 `ln -s`

编译 OpenGL 程序 GL/glew.h 缺失

CentOS:在 PHP 安装中启用 GD 支持

Linux 上的 NuGet:获取响应流时出错

如何将 ISO8859-15 转换为 UTF8?