Como escrevo um script de shell de instalação de aplicativo?

39

Alguém sabe como escrever um script de shell para instalar uma lista de aplicativos? É doloroso ter que instalar cada aplicativo manualmente sempre que eu configuro um novo sistema.

Edit: Ainda me pergunta Do you want to continue [Y/n]?. Existe uma maneira de inserir o script you não solicitar entrada?

jumpnett
fonte
2
Costumava haver um programa chamado 'yes' que fazia exatamente isso. (Ele escreveu 'y' continuamente para STDOUT.)
Nathan Osman

Respostas:

39

Eu assumiria que o script seria algo como isto:

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

Apenas salve isso como algo como install_my_apps.sh, altere as propriedades do arquivo para torná-lo executável e execute-o na linha de comando como root.

( Edit: O -ydiz apt-getpara não avisar você e apenas continuar com a instalação)

mac9416
fonte
Como torná-lo executável? Eu suponho que eu iria executá-lo como: sudo ./install_my_apps.sh
jumpnett
Não tenho certeza se é necessário torná-lo executável (eu sou do tipo Python; não gosto muito de BASH). Mas se você precisar, ele poderá ser executado com chmod +x ./install_my_apps.sh.
Michael Crenshaw
Ou clique com o botão direito do mouse e selecione "Propriedades". Na janela que se abre, vá para a guia "Permissões" e marque a caixa de seleção que diz "Permitir a execução de arquivo como um programa"
jfoucher 30/07/10
6
Não sei por que isso é CW, mas editei mesmo assim para colocar a -ybandeira. Nota: Se quiser torná-lo mais claro, você pode usar --yesou --assume-yesno lugar de -y.
Umang
20

Bem, de acordo com sua pergunta, o script mais fácil seria:

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

aptitude update
aptitude install -y $LIST_OF_APPS

No entanto, você também pode entrar aptitude update && aptitude install -y a b c d e. Talvez sua pergunta esteja perdendo o ponto crucial aqui. Se houver alguns requisitos adicionais, seria bom explicá-los.

qbi
fonte
1
Observe que o apt-get funcionaria como um substituto para o aptitude aqui, se essa for sua preferência. Simplesmente substitua as duas instâncias do "aptitude" por "apt-get".
Michael Crenshaw
12

Basta criar uma lista de aplicativos em um arquivo, example.list e executar

cat example.list | xargs sudo apt-get -y install
Andrew Gunnerson
fonte
isso é incrível. nunca soube como alimentar uma lista de pacotes no apt antes!
Thufir
xargs alimenta as linhas canalizada para qualquer comando, simplesmente adicionando-os como argumentos
Xerus
2

Eu optaria pelo seguinte script: vim install

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

Então eu devo tornar o script acima executável chmod +x install. Em seguida, usá-lo, eu poderia digitar: ./install <package_name>. Exemplo:./install clang

NlightNFotis
fonte
1
Eu queria todos os programas listados no arquivo. Com esse método, eu ainda teria que inserir o nome do programa como um argumento de linha de comando, portanto, realmente não há benefício.
jumpnett
1
@jumpnett Lol, eu perdi o ponto da lista. Estou começando a sentir falta de cafeína e isso mostra. Me desculpe por isso. Pode atualizar a resposta.
NlightNFotis 13/09/12
Além disso, ele será executado updatepara todos os programas instalarem, demorado. E precisa sudo.
Gauthier
isso é extremamente desnecessário. Você também pode colocar alias install='sudo apt-get install -y'no seu.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
fonte
1
adicionar explicações agradar e corrigir todos esses erros de digitação
Xerus
qual linha na sua opinião precisa de explicação ?!
Yordan Georgiev