¿Cómo puedo crear un script bash que verifique si un programa ya está instalado y, si no lo está, lo instala?
Gracias por tu ayuda.
Aquí está el código que tengo hasta ahora:
#/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
luego instalar con algo comoapt-get install "$(< package.list)"
.Respuestas:
Puedes hacerlo:
dpkg -s <packagename> &> /dev/null
luego verifique el estado de salida. solo si el estado de salida del comando anterior era igual al
0
paquete instalado .entonces:
fuente
sudo apt install $name
? El comando debe pasar a la siguiente línea ... De lo contrario, buen trabajo ...dpkg
solo es relevante para los paquetes Debian instalados. En el caso particular de OP,youtube-dl
por ejemplo, también podría instalarse a través del administrador de paquetes de Pythonpip
if dpkg -s “$name” &> /dev/null ; then
? Mismo efecto, más limpio / más claro imo.if
hace ...Aquí hay una función que escribí para el propósito que uso en mis scripts. Comprueba si el paquete requerido está instalado y, de lo contrario, solicita al usuario que lo instale. Requiere un nombre de paquete como parámetro. Si no conoce el nombre del paquete al que pertenece un programa requerido, puede buscarlo. Información sobre eso disponible aquí.
fuente
Esta línea de comando verificará el uso del
which
programa y regresará0
si está instalado y1
si no:Por supuesto, lo usará de esta manera en su script:
Un uso simple sería:
Tenga en cuenta varias cosas:
fuente
which
Es súper no portátil. Frecuentemente usocommand -v
en su lugar, pero depende en gran medida del tipo de nombre que esté buscando (alias, función, ejecutable, etc.)Unix & Linux
sitio! ¡Si estuviera respondiendo en elUnix & Linux
sitio, sería un asunto diferente!¿Por qué quieres comprobarlo en primer lugar? A menos que tenga una buena razón para ello, no lo haga, solo
apt-get install package
termine. Si ya está instalado, se actualizará si hay una versión más nueva disponible, si está instalado y está actualizado, no pasará nada. En caso de que tenga que aplicar alguna configuración, hay otras opciones, como crear un paquete de configuración que depende del paquete o usar un software de administración de configuración como ansible.fuente
Una manera fácil de verificar los paquetes instalados usando
apt-mark
:apt-mark showinstall
enumerará todos los paquetes marcados como instalación (ya instalados o en cola para la instalación). Después de eso, es una simple cuestión de agarrar los paquetes que le interesan.Ejemplo:
apt-mark showinstall | grep -q "^$PACKAGE_NAME$" && echo "installed" || echo "not"
fuente