Como criar um script bash que verifique se um programa já está instalado e, se não estiver, o instala?
Obrigado pela ajuda.
Aqui está o código que tenho até agora:
#/bin/bash
PS3="choose an option"
select opcion in "Installing_Youtube" "exit"
do
case $opcion in
"Installing_Youtube")
youtube-dl > /usr/bin
if [ $? -eq 127 ] ; then
echo "installing youtube"
apt-get update
apt-get install youtube-dl
mkdir Videos
else
echo "Youtube already installed"
fi
;;
"exit")
exit
/usr/bin
?apt-mark showmanual
e instalar com algo parecidoapt-get install "$(< package.list)"
.Respostas:
você consegue fazer isso:
dpkg -s <packagename> &> /dev/null
depois verifique o status de saída. somente se o status de saída do comando acima for igual ao
0
pacote instalado .tão:
fonte
sudo apt install $name
? O comando precisa ir na próxima linha ... Caso contrário, bom trabalho ...dpkg
é relevante apenas para os pacotes debian instalados. No caso particular do OP,youtube-dl
por exemplo, também pode ser instalado através do gerenciador de pacotes do pythonpip
if dpkg -s “$name” &> /dev/null ; then
? Mesmo efeito, imo mais limpo / mais claro.if
faz ...//
->#
Aqui está uma função que eu escrevi para o propósito que eu uso nos meus scripts. Ele verifica se o pacote necessário está instalado e, se não, solicita que o usuário o instale. Requer um nome de pacote como parâmetro. Se você não souber o nome do pacote ao qual pertence um programa exigido, poderá consultá-lo. Informações sobre isso disponíveis aqui.
fonte
Esta linha de comando irá verificar usando o
which
programa e retornará0
se instalado e1
se não:Claro que você o usará dessa maneira em seu script:
Um uso simples seria:
Observe várias coisas:
fonte
which
é super não-portátil. Eu freqüentemente usamcommand -v
em vez disso, mas isso depende muito do tipo de nome que você está procurando (aliás, função, executável, & c.)Unix & Linux
site! Se eu estivesse respondendo noUnix & Linux
site, isso seria uma questão diferente!Por que você deseja verificá-lo em primeiro lugar? A menos que você tenha uma boa razão para isso, não faça isso apenas
apt-get install package
. Se já estiver instalado, será atualizado se houver uma versão mais nova disponível, se estiver instalada e atualizada, nada acontecerá. Caso você tenha alguma configuração que precise ser aplicada, existem outras opções, como criar um pacote de configuração que depende do pacote ou usar o software de gerenciamento de configuração como ansible.fonte
Uma maneira fácil de verificar os pacotes instalados usando
apt-mark
:apt-mark showinstall
listará todos os pacotes marcados como instalar (já instalado ou na fila para instalação). Depois disso, é uma simples questão de saudar os pacotes com os quais você se importa.Exemplo:
apt-mark showinstall | grep -q "^$PACKAGE_NAME$" && echo "installed" || echo "not"
fonte