$ 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
这是十分难看并且没有优化。我相信应该有更简单的方法,但这存在一些问题。