Como posso saber se um pacote é instalado via yum em um script bash?

54

Eu estou tentando escrever um script que instala pacotes, mas se falhar em algum ponto posterior, o script reverte o que quer que esteja instalado. É claro que se o usuário já tiver instalado um pacote, não quero desinstalá-lo de baixo deles. Como meu script pode dizer se um pacote foi previamente instalado via yum?

    
por Doktor J 02.04.2014 / 06:02

5 respostas

61

Encontrei o seguinte em um Pergunta StackOverflow ; a resposta que eu precisava, na verdade, não respondia a pergunta lá (e não foi selecionada como a resposta correta), então eu pensei em postá-la aqui para os outros acharem mais fácil.

yum list installed PACKAGE_NAME

Esse comando retorna alguma saída legível por humanos, mas, mais importante, retorna um código de status de saída; 0 indica que o pacote é instalado, 1 indica que o pacote é não instalado (não verifica se o pacote é válido, portanto yum list installed herpderp-beepbopboop retornará um "1" da mesma forma yum list installed traceroute será se você não tiver o traceroute instalado). Você pode verificar posteriormente "$?" para este código de saída.

Como a saída é um pouco contra-intuitiva, usei a versão "condensada" do @Chris Downs abaixo em uma função de empacotamento para tornar a saída mais "lógica" (ou seja, 1 = instalado 0 = não instalado):

function isinstalled {
  if yum list installed "$@" >/dev/null 2>&1; then
    true
  else
    false
  fi
}

uso seria

if isinstalled $package; then echo "installed"; else echo "not installed"; fi

EDITAR:

Substituído return declarações com chamadas para true e false que ajudam a tornar a função mais legível / intuitiva, enquanto retorna os valores que o bash espera (ou seja, 0 para verdadeiro, 1 para falso).

Se você está apenas verificando um pacote no seu script, talvez seja melhor você testar yum list installed diretamente, mas (IMHO) a função facilita a compreensão do que está acontecendo, e sua sintaxe é muito mais fácil lembre-se que yum com todos os redirecionamentos para suprimir sua saída.

    
por 02.04.2014 / 06:02
8

Oneliner mais simples:

yum -q list installed packageX &>/dev/null && echo "Installed" || echo "Not installed"
    
por 12.01.2016 / 17:22
7

Não exatamente cumprindo a pré-condição da pergunta "via yum", mas mais rápido que "yum -q list" é:

rpm -q <package_name>

que retorna o nome exato da versão possivelmente instalada, bem como o código de erro "0" se instalado e "1" se não.

    
por 08.01.2017 / 12:12
0

Um script útil para o yum:

#!/bin/sh pckarr=(wget mlocate bind-utils ANY_RANDOM_PACKAGE_NAME) yum update -y for i in ${pckarr[*]} do isinstalled=$(rpm -q $i) if [ ! "$isinstalled" == "package $i is not installed" ]; then echo Package $i already installed else echo $i is not INSTALLED!!!! yum install $i -y fi done updatedb

No array pckarr, liste os pacotes que você deseja instalar ou verifique se ele está instalado.

    
por 04.11.2017 / 07:16
0

Você também pode ler o valor de retorno $? do yum. Deve ser 0 se tudo funcionou ou positivo, dependendo de que tipo de problemas você se deparou. Essa é uma boa maneira se você quiser realizar ações diferentes se algo falhar.

    
por 04.11.2017 / 09:36