如何获取 Ubuntu 发行版的完整代号?

如何获取 Ubuntu 发行版的完整代号?
$ lsb_release -c
Codename:   trusty

$ cat /etc/issue
Ubuntu 14.04 LTS \n \l

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04 LTS"

上述命令的输出仅显示部分代号(即trusty)。如何获取完整代号(值得信赖的塔尔羊) 我安装的 Ubuntu 系统有什么问题吗?

答案1

不使用外部工具:

你可以来源(源命令是一个点.)然后/etc/os-release您就可以访问那里定义的所有变量:

$ . /etc/os-release
$ echo "$VERSION"
14.04, Trusty Tahr

编辑。如果您想删除该14.04,部分(如 terdon 所要求的),您可以:

$ . /etc/os-release
$ read _ UBUNTU_VERSION_NAME <<< "$VERSION"
$ echo "$UBUNTU_VERSION_NAME"
Trusty Tahr

请注意,这有点笨拙,因为在其他发行版上,该VERSION字段可能具有不同的格式。例如,在我的 Debian 上,

$ . /etc/os-release
$ read _ UBUNTU_VERSION_NAME <<< "$VERSION"
$ echo "$UBUNTU_VERSION_NAME"
(wheezy)

然后,你可以想象这样的事情(在脚本中):

#!/bin/bash

if [[ -r /etc/os-release ]]; then
    . /etc/os-release
    if [[ $ID = ubuntu ]]; then
        read _ UBUNTU_VERSION_NAME <<< "$VERSION"
        echo "Running Ubuntu $UBUNTU_VERSION_NAME"
    else
        echo "Not running an Ubuntu distribution. ID=$ID, VERSION=$VERSION"
    fi
else
    echo "Not running a distribution with /etc/os-release available"
fi

答案2

我对已提供内容的变体:

. /etc/os-release; echo ${VERSION/*, /}

迄今为止最简短、最无礼的答案。

如果你不想将/etc/os-release的内容加载到当前环境中,你可以很容易地假装 bash 正在加载脚本:

bash <(cat /etc/os-release; echo 'echo ${VERSION/*, /}')

答案3

Grep:

$ grep $(lsb_release -rs) /usr/share/python-apt/templates/Ubuntu.info | grep -m 1 "Description: Ubuntu " | cut -d "'" -f2
Trusty Tahr

解释:

  • lsb_release -rs-> 打印您安装的 Ubuntu 版本。

  • grep $(lsb_release -rs) /usr/share/python-apt/templates/Ubuntu.info-> 抓住包含您的发布版本的所有行,在我的情况下是 14.04。

  • grep -m 1 "Description: Ubuntu "-> 再次抓取仅匹配的第一行(因为-m标志),其中包含字符串Description: Ubuntu

  • cut -d "'" -f2-> 根据分隔符单引号打印字段编号 2'

awk:

$ awk -v var=$(lsb_release -rs) '$3~var {print $4" "$5;exit;}' /usr/share/python-apt/templates/Ubuntu.info | cut -d"'" -f2
Trusty Tahr

解释:

在 awk 中声明和分配变量是通过-v参数完成的。因此,命令的值lsb_release -rs 被分配给变量var,这反过来有助于从包含字符串的行中打印字段 4、字段 5 14.04,如果找到一个,则存在。最后,该cut命令有助于删除单引号。

答案4

您正在寻找的命令是:

grep -oP '(?<=VERSION\=\"(\d\d)\.(\d\d)\,\ )(.*?)(?="$)' /etc/os-release

这是十分难看并且没有优化。我相信应该有更简单的方法,但这存在一些问题。

相关内容