如何在没有 lsb-release 的情况下获得 Debian 代号

Woo*_*ody 17 version debian

我正在尝试创建一个脚本,该脚本要求我打印 debian 代号,以便我可以将其回显到 sources.list 文件中。

我试图让这个脚本在任何版本的 Debian 上工作,所以我希望设置一个发行代号的 bash 变量。这很容易做到(使用 lsb_release -c),但是我们的部署映像默认不包含 lsb_release - 并且需要此脚本来修复 sources.list,使用 apt-get 安装 lsb-release 将不是一个选项.

我找到了很多方法来获取有关系统的版本号和其他信息,但找不到可靠的地方来获取代号。

任何想法将不胜感激!

(我正在测试的操作系统是 Debian Squeeze)

cuo*_*glm 23

您可以使用/etc/os-release

(
  . /etc/os-release
  printf '%s\n' "$VERSION"
)
7 (wheezy)
Run Code Online (Sandbox Code Playgroud)


小智 17

挤压不附带/etc/os-release,这是我的“黑客”:

dpkg --status tzdata|grep Provides|cut -f2 -d'-'
Run Code Online (Sandbox Code Playgroud)


Per*_*ulf 6

您可以打印代码以及 debian 的版本号:

root@debian:/home/mohsen# grep "VERSION=" /etc/os-release |awk -F= {' print $2'}|sed s/\"//g
8 (jessie)
Run Code Online (Sandbox Code Playgroud)

或者,您可以从数字中提取您的代号并大声疾呼:

grep "VERSION=" /etc/os-release |awk -F= {' print $2'}|sed s/\"//g |sed s/[0-9]//g | sed s/\)$//g |sed s/\(//g
jessie
Run Code Online (Sandbox Code Playgroud)

  • 如果你只想要代号,它很简单`awk -F"[)(]+" '/VERSION=/ {print $2}' /etc/os-release` (4认同)

Lei*_*och 6

您可以从 获得 Debian 发行版的代号/etc/os-release。您可以不尝试解析此文件,而是将其导入到新环境中,以免影响您当前的环境,并echo在该新环境中执行命令。

env -i bash -c '. /etc/os-release; echo $VERSION_CODENAME'
Run Code Online (Sandbox Code Playgroud)

分解:

  • env : 在新环境中运行命令。
  • -i : 不要从现有环境继承环境变量。
  • bash : 运行 bash 以便我们有一个 shell 来获取 os-release 文件,并运行 echo 命令。
  • -c: 告诉bash我们要执行命令而不是启动交互式 shell。
  • . /etc/os-release:将 的内容os-release导入到我们的新环境中。os-release包含几行设置环境变量,这将在我们的新环境中设置这些环境变量。
  • ; : 分开这个命令并运行下一个命令。
  • echo $VERSION_CODENAME: 回显os-release文件设置的代号。

  • 我像这样修复它`echo "$(. /etc/os-release && echo ${VERSION_CODENAME-stretch})"` 这对我的任务来说似乎没问题,但看起来很糟糕 (2认同)