¿Cómo escribo un script de shell de instalación de la aplicación?

39

¿Alguien sabe cómo escribir un script de shell para instalar una lista de aplicaciones? Es difícil tener que instalar cada aplicación a mano cada vez que configuro un nuevo sistema.

Editar: Todavía me pregunta Do you want to continue [Y/n]?. ¿Hay alguna manera de tener la entrada del script yo para que no solicite entrada?

jumpnett
fuente
2
Solía ​​haber un programa llamado 'sí' que hacía exactamente eso. (Escribió 'y' continuamente para STDOUT.)
Nathan Osman el

Respuestas:

39

Supongo que el guión se vería así:

#!/bin/sh
apt-get update  # To get the latest package lists
apt-get install <package name> -y
#etc.

Simplemente guárdelo como algo así como install_my_apps.sh, cambie las propiedades del archivo para que sea ejecutable y ejecútelo desde la línea de comandos como root.

( Editar: El -yle dice que apt-getno le solicite y simplemente continúe con la instalación)

mac9416
fuente
¿Cómo hacer que sea ejecutable? Supongo que lo ejecutaría como: sudo ./install_my_apps.sh
jumpnett
No estoy seguro de si es necesario hacerlo ejecutable (soy un tipo de Python; no me gusta mucho BASH). Pero si debe hacerlo, puede hacerse ejecutable con chmod +x ./install_my_apps.sh.
Michael Crenshaw
O haga clic derecho sobre él, seleccione "Propiedades". En la ventana que se abre, vaya a la pestaña "Permisos" y marque la casilla de verificación que dice "Permitir la ejecución de archivos como un programa"
jfoucher
66
No sé por qué esto es CW, pero lo edité de todos modos para poner la -ybandera. Nota: Si desea que se vea más claro, puede usarlo --yeso --assume-yesreemplazarlo -y.
Umang
20

Bueno, según su pregunta, el guión más fácil sería:

#!/bin/sh
LIST_OF_APPS="a b c d e"

aptitude update
aptitude install -y $LIST_OF_APPS

Sin embargo, también puedes ingresar aptitude update && aptitude install -y a b c d e. Entonces, tal vez a su pregunta le falta el punto crucial aquí. Si hay algunos requisitos adicionales, sería bueno explicarlos.

qbi
fuente
1
Tenga en cuenta que apt-get funcionaría como un reemplazo directo para aptitude aquí, si esa es su preferencia. Simplemente reemplace ambas instancias de "aptitude" con "apt-get".
Michael Crenshaw
12

Simplemente cree una lista de aplicaciones en un archivo, example.list, y ejecute

cat example.list | xargs sudo apt-get -y install
Andrew Gunnerson
fuente
Esto es asombroso. ¡Nunca supe cómo alimentar una lista de paquetes en apt antes!
Thufir
xargs alimenta las líneas canalizadas en cualquier comando, simplemente agregándolas como argumentos
Xerus
2

Optaría por el siguiente script: vim install

#!/bin/bash
apt-get update  # To get the latest package lists
apt-get install $1 -y

Entonces debería hacer que el script anterior sea ejecutable chmod +x install. Luego de usarlo, podría escribir: ./install <package_name>. Ejemplo:./install clang

NlightNFotis
fuente
1
Quería todos los programas enumerados en el archivo. Con este método, aún tendría que ingresar el nombre del programa como argumento de línea de comando, por lo que realmente no hay un beneficio.
jumpnett
1
@jumpnett Lol, perdí el punto de la lista. Estoy empezando a faltar cafeína y se nota. Lo siento por esto. Puede actualizar la respuesta.
NlightNFotis
Además, se ejecutará updatepara cada programa que se instale, lo que lleva mucho tiempo. Y lo necesita sudo.
Gauthier
Esto es extremadamente innecesario. También podría poner alias install='sudo apt-get install -y'en su.bash_aliases
Xerus
-1
#!/bin/bash

set -eu -o pipefail # fail on error , debug all lines

sudo -n true
test $? -eq 0 || exit 1 "you should have sudo priveledge to run this script"

echo installing the must-have pre-requisites
while read -r p ; do sudo apt-get install -y $p ; done < <(cat << "EOF"
    perl
    zip unzip
    exuberant-ctags
    mutt
    libxml-atom-perl
    postgresql-9.6
    libdbd-pgsql
    curl
    wget
    libwww-curl-perl
EOF
)

echo installing the nice-to-have pre-requisites
echo you have 5 seconds to proceed ...
echo or
echo hit Ctrl+C to quit
echo -e "\n"
sleep 6

sudo apt-get install -y tig
Yordan Georgiev
fuente
1
agregue explicaciones, por favor, y corrija todos estos errores tipográficos
Xerus
¿Qué línea en tu opinión necesita explicación?
Yordan Georgiev