从Linx操作系统发布文件中获取操作系统名称和版本



我正试图通过/etc/OS发布文件,通过一个简单的命令,在一行中获取操作系统名称(pretty_name(和版本(version_ID(。

目前,我有以下几种:

cat /etc/*-release | egrep "PRETTY_NAME|VERSION_ID" | cut -d = -f 2 | tr -d '"'

这给了我以下输出:

7.9
Red Hat Enterprise Linux

我希望我的输出看起来像这样:

Red Hat Enterprise Linux 7.9

我可以做些什么来获得我想要的输出?

由于os-release是shell格式的(由您必须信任的操作系统供应商提供(,您可以直接获取它(它将引号视为语法而非数据,因此不需要手动删除(。

根据@Cyrus的建议进行修改,在可用的情况下,更喜欢Red Hat的扩展元数据,而不是通用变量名称(但在其他情况下,则返回通用名称(:

. /etc/os-release
printf '%s %sn' 
"${REDHAT_SUPPORT_PRODUCT:-$PRETTY_NAME}" 
"${REDHAT_SUPPORT_PRODUCT_VERSION:-$VERSION_ID}"

注意;则不能保证CCD_ 2的内容的顺序。这个答案集中在OP的案例上;


使用tac反转输出,然后使用tr 'n' ' '连接行;

cat /etc/*-release | egrep "PRETTY_NAME|VERSION_ID" | cut -d = -f 2 | tr -d '"' | tac | tr 'n' ' '
# 10 Debian GNU/Linux 10 (buster)

另一个选项是读取lsb_release的第二行和第三行,开关具有更一致的输出;

lsb_release -as 2>/dev/null | sed -n 2,3p | tac | tr 'n' ' '
# 10 Debian GNU/Linux 10 (buster)

最新更新