假设我需要为多个 Linux 发行版中的任何一个安装一组先决条件。在这种情况下,我需要根据发行版切换安装表达式。
我知道uname -v
,并且我知道我可以使用一些易碎的字符串表达式和逻辑来检查该命令的输出。然而我真正需要的是:
V=$(something-like-uname)
echo $V
"Debian"
# or
"Gentoo"
# or
"Redhat"
# or
"Arch"
# etc.
这个命令是什么? (存在吗?)
答案1
我总是lsb_release -i
先检查,然后再检查
/etc/os-release
作为后备。它应该可以在许多
但当然你永远不能指望它无处不在。它是免费桌面标准
并出现在系统化系统。在 Slackware 上它显示:
$ cat /etc/os-release
NAME=Slackware
VERSION="14.2"
ID=slackware
VERSION_ID=14.2
PRETTY_NAME="Slackware 14.2"
ANSI_COLOR="0;34"
CPE_NAME="cpe:/o:slackware:slackware_linux:14.2"
HOME_URL="http://slackware.com/"
SUPPORT_URL="http://www.linuxquestions.org/questions/slackware-14/"
BUG_REPORT_URL="http://www.linuxquestions.org/questions/slackware-14/"
在 Raspbian 上:
$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
您感兴趣的领域可能是ID
.
答案2
lsb_release -i
如果已安装,可能会执行您想要的操作。否则,它会检查诸如/etc/redhat-release
、/etc/debian_version
等文件。
$ lsb_release -i
Distributor ID: Fedora
答案3
我会用:
grep -Po "(?<=^ID=).+" /etc/os-release | sed 's/"//g'