Jak napisać skrypt powłoki instalacyjnej aplikacji?

39

Czy ktoś wie, jak napisać skrypt powłoki, aby zainstalować listę aplikacji? Trudno jest ręcznie instalować każdą aplikację za każdym razem, gdy konfiguruję nowy system.

Edycja: Nadal mnie pyta Do you want to continue [Y/n]?. Czy istnieje sposób na wprowadzenie skryptu ylub nie monitowanie o wprowadzenie?

jumpnett
źródło
2
Był taki program o nazwie „tak”, który właśnie to zrobił. (Napisał „y” nieprzerwanie do STDOUT.)
Nathan Osman

Odpowiedzi:

38

Zakładam, że skrypt wyglądałby mniej więcej tak:

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

Po prostu zapisz to jako coś takiego jak install_my_apps.sh, zmień właściwości pliku, aby był wykonywalny i uruchom go z wiersza poleceń jako root.

( Edycja:-y mówi apt-getnie poprosi i po prostu sobie z instalacją)

mac9416
źródło
Jak sprawić, by był wykonywalny? Zakładam, że uruchomiłbym to w następujący sposób: sudo ./install_my_apps.sh
jumpnett
Nie jestem pewien, czy konieczne jest, aby był wykonywalny (jestem facetem Pythona; nie za bardzo w BASH). Ale jeśli musisz, możesz to zrobić za pomocą chmod +x ./install_my_apps.sh.
Michael Crenshaw,
Lub kliknij go prawym przyciskiem myszy, wybierz „Właściwości”. W oknie, które zostanie otwarte, przejdź do zakładki „Uprawnienia” i zaznacz pole wyboru „Zezwalaj na uruchamianie pliku jako programu”
jfoucher
6
Nie wiem, dlaczego to jest CW, ale i tak go edytowałem, aby umieścić -yflagę. Uwaga: jeśli chcesz, aby wyglądał wyraźniej, możesz użyć --yeslub --assume-yeszamiast -y.
Umang
20

Cóż, według twojego pytania najłatwiejszym skryptem byłoby:

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

aptitude update
aptitude install -y $LIST_OF_APPS

Możesz jednak również wpisać aptitude update && aptitude install -y a b c d e. Więc może twoje pytanie nie ma tutaj kluczowego znaczenia. Jeśli są jakieś dodatkowe wymagania, dobrze je wyjaśnić.

qbi
źródło
1
Zauważ, że apt-get będzie działał jako drop-in zamiast aptitude tutaj, jeśli takie są twoje preferencje. Po prostu zamień oba wystąpienia „aptitude” na „apt-get”.
Michael Crenshaw
12

Wystarczy utworzyć listę aplikacji w pliku, example.list i uruchomić

cat example.list | xargs sudo apt-get -y install
Andrew Gunnerson
źródło
to jest niesamowite. nigdy wcześniej nie wiedziałem, jak załadować listę pakietów do apt!
Thufir,
xargs podaje potokowe linie do dowolnego polecenia, po prostu dodając je jako argumenty
Xerus
2

Wybrałbym następujący skrypt: vim install

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

Następnie powinienem umożliwić wykonanie powyższego skryptu chmod +x install. Potem go używać, mogłem wpisać: ./install <package_name>. Przykład:./install clang

NlightNFotis
źródło
1
Chciałem wszystkie programy wymienione w pliku. Dzięki tej metodzie nadal musiałbym wprowadzić nazwę programu jako argument wiersza poleceń, więc tak naprawdę nie ma korzyści.
jumpnett,
1
@jumpnett Lol, przegapiłem punkt listy. Zaczynam brakować kofeiny i to pokazuje. Przepraszam za to. Może zaktualizować odpowiedź.
NlightNFotis
Dodatkowo będzie działał updatedla każdego programu, który jest czasochłonny. I potrzebuje sudo.
Gauthier
jest to wyjątkowo niepotrzebne. Równie dobrze alias install='sudo apt-get install -y'możesz umieścić w swoim.bash_aliases
Xerusie
-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
źródło
1
dodaj wyjaśnienia i popraw wszystkie te literówki
Xerus
która linia Twoim zdaniem wymaga wyjaśnienia?
Yordan Georgiev