我正在编写一个用于各种Linux平台的shell脚本。脚本的一部分会安装几个包。我如何确定 Linux 供应商和默认系统安装机制,例如 Debian/Ubuntu 有 apt-get/apt,Fedora 有 yum 等等......
提前致谢
你真的不需要检查供应商,因为他们可能会决定改变打包系统(不太可能,但从概念上讲,你必须确保对于你测试的每个发行版,你尝试正确的包管理器命令)。您所要做的就是测试安装本身:
YUM_CMD=$(which yum)
APT_GET_CMD=$(which apt-get)
OTHER_CMD=$(which <other installer>)
然后可能按照您的偏好顺序对它们进行排序:
if [[ ! -z $YUM_CMD ]]; then
yum install $YUM_PACKAGE_NAME
elif [[ ! -z $APT_GET_CMD ]]; then
apt-get $DEB_PACKAGE_NAME
elif [[ ! -z $OTHER_CMD ]]; then
$OTHER_CMD <proper arguments>
else
echo "error can't install package $PACKAGE"
exit 1;
fi
如果你想要一个故障安全脚本,你可以看看Gentoo(或类似于Yocto或OpenEmbedded的框架)如何提供甚至获取源代码(使用wget)和从头开始构建的方法。
#!/bin/bash
set -ex
OS=$(uname -s | tr A-Z a-z)
case $OS in
linux)
source /etc/os-release
case $ID in
debian|ubuntu|mint)
apt update
;;
fedora|rhel|centos)
yum update
;;
*)
echo -n "unsupported linux distro"
;;
esac
;;
darwin)
brew update
;;
*)
echo -n "unsupported OS"
;;
esac