システムパッケージマネージャの識別

システムパッケージマネージャの識別

デフォルトのシステムパッケージマネージャを識別する方法(スクリプトから)はありますか?

明確にすると、私がやりたいことは与えられたコマンドを実行することです。 Debianやその派生物では「apt」のようなものを返し、openSUSEでは「zypp」を返し、Fedoraなどでは「yum」を返します。 Arch Linuxは「pacman」などを返します。

以下の方法でこれを行うことができます。同じ名前の実行可能ファイルがある限り、中断されないより強力な方法があるかどうか疑問に思います。

which apt >/dev/null 2>&1
if [ $? -eq 0 ]
then
    echo "apt"
fi
# etc...

ベストアンサー1

バイナリではなくディストリビューションを識別することから始める必要があります。

以下は、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

これらのファイルが変更されたため、この方法は失敗する可能性がありますが、これは非常に非標準の構成であるため、ほとんどの場合機能します。

おすすめ記事