Como verificar no bash se o pacote existe no Debian

10

Eu gostaria de escrever um script bash de instalação, onde eu gostaria de instalar o servidor MySQL.

No Linux Mint eu segui o código:

apt-get -y --force-yes install mysql-server-5.6

mas instalei o novo Debian 8 e não há mysql-server - em vez disso, há mariadb .

Como posso saber se existe um pacote?

Eu só sei que há dpkg -s , que deve informar se um pacote está instalado.

    
por Dusan Plavak 29.04.2015 / 20:32

3 respostas

12

(o abaixo é do Ubuntu, mas a mesma técnica obviamente funciona no Debian também)

$ apt-cache show screen
Package: screen
Priority: optional
Section: misc
Installed-Size: 950
Maintainer: Ubuntu Developers <[email protected]>
Original-Maintainer: Axel Beckert <[email protected]>
Architecture: amd64
Version: 4.1.0~20120320gitdb59704-9
Depends: libc6 (>= 2.15), libpam0g (>= 0.99.7.1), libtinfo5
Suggests: iselect (>= 1.4.0-1) | screenie | byobu
Filename: pool/main/s/screen/screen_4.1.0~20120320gitdb59704-9_amd64.deb
Size: 645730
...

Se o pacote existir, as informações serão exibidas. Se não, você verá algo como:

$ apt-cache show foobar
N: Unable to locate package foobar
E: No packages found

Além disso, o código de saída de apt-cache será diferente de zero se nenhum pacote correspondente for encontrado.

Nota adicional: Se você estiver usando apt-cache show package , onde o pacote é virtual (um que não existe, mas é, por exemplo, referenciado por outros pacotes), você obtenha:

N: Can't select versions from package 'package' as it is purely virtual
N: No packages found

O exit code disso é zero (o que é um pouco enganador na minha opinião).

    
por 29.04.2015 / 20:34
3

Eu usaria dpkg -l mysql-server &> /dev/null && echo "mysql-server is installed" .

Ele verificará se o pacote mysql-server está instalado e, se estiver, imprime esse fato na tela. Uma solução mais sofisticada seria, no bash (não testado):

function package_exists() {
    return dpkg -l "$1" &> /dev/null
}

Então, pode-se fazer em um script:

if ! package_exists mysql-server ; then
    echo ”Please install mysql-server!"
fi
    
por 30.04.2015 / 00:25
0

Em um verso:

apt-cache pkgnames | grep -q $your_package_name

sai com 0 se estiver presente, 1 se não estiver.

Bônus: verificação eficiente para vários pacotes, listados no arquivo "packages_we_want", um por linha, classificado com sort :

apt-cache pkgnames | sort | comm -13 - packages_we_want lista todos os pacotes que você quer, mas não existe nos repositórios.

apt-cache pkgnames | sort | comm -12 - packages_we_want lista todos os pacotes que você quer e existe nos repositórios.

    
por 24.02.2018 / 01:14

Tags