Identificando o gerenciador de pacotes do sistema

8

Existe uma maneira (de um script) de identificar o gerenciador de pacotes padrão do sistema?

Para esclarecer, o que eu quero fazer é executar um determinado comando e, no Debian ou qualquer um de seus derivados, ele retornará algo como "apt", no openSUSE ele retornará "zypp", no Fedora et al it vai retornar "yum", no Arch Linux ele retornará "pacman" etc.

Sei que posso fazer isso com algo como o seguinte, apenas me perguntei se havia um método mais robusto que não fosse interrompido assim que houvesse um executável com o mesmo nome.

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

2 respostas

7

Comece com a resposta aceita para esta pergunta: Como posso obter o nome da distribuição e o número da versão em um simples shell script? . Em seguida, decida qual gerenciador de pacotes você deseja usar com base na distribuição detectada.

    
por 22.08.2012 / 18:07
6

Em vez de identificar programas binários, você deve começar a partir de distribuições de identificação,

Basta fornecer algumas linhas que funcionam no script do 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

for f in ${!osInfo[@]}
do
    if [[ -f $f ]];then
        echo Package manager: ${osInfo[$f]}
    fi
done

Embora não seja possível confiar nessas partes, mas geralmente as pessoas não farão isso.

    
por 22.08.2012 / 17:58