我正试图通过/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)