我正在尝试创建一个脚本,要求我打印 Debian 代号,以便我可以将其回显到文件中sources.list
。
我试图让这个脚本在任何版本的 Debian 上工作,所以我希望设置一个发布代号的 bash 变量。这很容易做到lsb_release -c
。但是,我们的部署映像默认不包含lsb_release
- 并且需要此脚本来修复,因此无法选择sources.list
安装。lsb-release
apt-get
我找到了多种方法来获取版本号和有关系统的其他信息,但找不到可靠的地方来获取代号。
(我正在使用 Debian Squeeze 对此进行测试。)
答案1
您可以使用/etc/os-release
:
(
. /etc/os-release
printf '%s\n' "$VERSION"
)
7 (wheezy)
答案2
对于不附带的 Debian 发行版/etc/os-release
(如 Squeeze),您可以使用以下“hack”。它利用该包提供了包含该名称的tzdata
功能(1) :
$ dpkg --status tzdata
Package: tzdata
...
Provides: tzdata-squeeze
因此,您可以对其进行后处理以提取功能名称的该部分:
dpkg --status tzdata|grep Provides|cut -f2 -d'-'
或者,用更少的管道
dpkg --status tzdata|awk -F'[:-]' '$1=="Provides"{print $NF}'
(1)但这是 RedHat 术语
答案3
您可以从 获取 Debian 发行版的代号/etc/os-release
。您可以将其放入新环境中,而不是尝试解析此文件,以免影响当前环境,并echo
在该新环境中执行命令。
env -i bash -c '. /etc/os-release; echo $VERSION_CODENAME'
分解它:
env
:在新环境中运行命令。-i
:不要从现有环境继承环境变量。bash
:运行 bash,以便我们有一个 shell 来获取 os-release 文件,并运行 echo 命令。-c
:告诉bash
我们要执行命令而不是启动交互式 shell。. /etc/os-release
:将内容源os-release
到我们的新环境中。os-release
包含几行设置环境变量,这将在我们的新环境中设置这些环境变量。;
:分离该命令并运行下一个命令。echo $VERSION_CODENAME
:回显文件设置的代号os-release
。
答案4
对于系统:
hostnamectl | grep "Operating System"
输出:
Operating System: Debian GNU/Linux 8 (jessie)