Shell
辨識系統包管理器
有沒有辦法(從腳本)來辨識預設的系統包管理器?
澄清一下,我想要做的是執行一個給定的命令,在 Debian 或其任何衍生產品上它會返回類似“apt”的東西,在 openSUSE 上它會返回“zypp”,在 Fedora 等上它會返回“yum”,在 Arch Linux 上它會返回“pacman”等。
我知道我可以用類似下面的方法來做到這一點,我只是想知道是否有一種更強大的方法,只要有同名的執行檔就不會中斷。
which apt >/dev/null 2>&1 if [ $? -eq 0 ] then echo "apt" fi # etc...
從這個問題的公認答案開始:如何在簡單的 shell 腳本中獲取分發名稱和版本號?. 然後,根據檢測到的分佈決定您要使用哪個包管理器。
您應該從辨識發行版開始,而不是辨識二進製程序,
只需給您幾行在 bash 腳本中有效的程式碼:
declare -A osInfo; osInfo[/etc/redhat-release]=yum osInfo[/etc/arch-release]=pacman osInfo[/etc/gentoo-release]=emerge osInfo[/etc/SuSE-release]=zypp osInfo[/etc/debian_version]=apt-get osInfo[/etc/alpine-release]=apk for f in ${!osInfo[@]} do if [[ -f $f ]];then echo Package manager: ${osInfo[$f]} fi done
儘管這些部分是不可信的,但通常人們不會那樣做。