Comment écrire un script shell d'installation d'application?

39

Est-ce que quelqu'un sait comment écrire un script shell pour installer une liste d'applications? C'est pénible de devoir installer chaque application manuellement chaque fois que je configure un nouveau système.

Edit: Il me demande toujours Do you want to continue [Y/n]?. Existe-t-il un moyen de saisir le script you de ne pas demander sa saisie?

Jumpnett
la source
2
Il y avait un programme appelé «oui» qui faisait justement cela. (Il a écrit 'y' continuellement à STDOUT.)
Nathan Osman le

Réponses:

39

Je suppose que le script ressemblerait à quelque chose comme ceci:

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

Enregistrez-le simplement sous le nom install_my_apps.sh, modifiez les propriétés du fichier pour le rendre exécutable, puis exécutez-le à partir de la ligne de commande en tant que root.

( Edit: Le -ydit de apt-getne pas vous inviter et juste de commencer l'installation)

mac9416
la source
Comment le rendre exécutable? Je suppose que je le ferais comme: sudo ./install_my_apps.sh
jumpnett le
Je ne suis pas certain qu'il soit nécessaire de le rendre exécutable (je suis un gars de Python; pas grand-chose dans BASH). Mais si vous devez, il peut être rendu exécutable avec chmod +x ./install_my_apps.sh.
Michael Crenshaw
Ou faites un clic droit dessus, sélectionnez "Propriétés". Dans la fenêtre qui s'ouvre, allez à l'onglet "Autorisations", puis cochez la case "Autoriser l'exécution du fichier en tant que programme"
jfoucher
6
Je ne sais pas pourquoi c'est CW, mais je l'ai quand même modifié pour mettre le -ydrapeau. Remarque: Si vous souhaitez que cela paraisse plus clair, vous pouvez utiliser --yesou --assume-yesremplacer -y.
Umang
20

Eh bien, selon votre question, le script le plus simple serait:

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

aptitude update
aptitude install -y $LIST_OF_APPS

Cependant, vous pouvez aussi entrer aptitude update && aptitude install -y a b c d e. Alors peut-être que votre question manque le point crucial ici. S'il y a d'autres exigences, il serait bon de les expliquer.

qbi
la source
1
Notez qu'apt-get fonctionnerait ici en remplacement immédiat d'aptitude, si tel est votre choix. Il suffit de remplacer les deux instances de "aptitude" par "apt-get".
Michael Crenshaw
12

Il suffit de créer une liste d'applications dans un fichier, exemple.list, et d'exécuter

cat example.list | xargs sudo apt-get -y install
Andrew Gunnerson
la source
C'est génial. jamais su comment introduire une liste de paquets dans apt auparavant!
Thufir
xargs nourrit les lignes canalisées dans n'importe quelle commande, en les ajoutant simplement comme arguments
Xerus
2

J'opterais pour le script suivant: vim install

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

Ensuite, je devrais rendre le script ci-dessus exécutable chmod +x install. Puis l'utiliser, je pouvais taper: ./install <package_name>. Exemple:./install clang

NlightNFotis
la source
1
Je voulais tous les programmes énumérés dans le fichier. Avec cette méthode, je devrais tout de même saisir le nom du programme en tant qu'argument de ligne de commande. Il n'y a donc aucun avantage.
Jumpnett
1
@ jumpnett Lol, j'ai raté le point de la liste. Je commence à manquer de caféine et ça se voit. Désolé pour cela. Peut mettre à jour la réponse.
NlightNFotis
De plus, updatechaque programme à installer sera exécuté , ce qui prend du temps. Et ça a besoin sudo.
Gauthier
c'est extrêmement inutile. Vous pourriez aussi bien mettre alias install='sudo apt-get install -y'dans votre.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
la source
1
ajoutez des explications s'il vous plaît et corrigez toutes ces fautes de frappe
Xerus
quelle ligne à votre avis a besoin d'explication?!
Yordan Georgiev