.sh arquivo para atualização do apt-get / apt-get

1

Esta pode ser uma pergunta simples, mas ...

Eu tenho um arquivo update.sh com o seguinte:

sudo apt-get update
sudo apt-get upgrade

Quando executo isso usando ./update.sh (depois de configurá-lo para executável), ele me pede para digitar minha senha sudo. Isso executará os dois comandos, e eu posso essencialmente executar este script apenas uma vez e ter meus comandos apt-get update / upgrade resolvidos?

Obrigado a todos

    
por snovosel 29.04.2017 / 19:07

2 respostas

3

A maneira como o sudo funciona é que, por padrão, ele dá 15 minutos para que ele solicite a senha novamente. Então, sim, usando os dois comandos, funcionará perfeitamente, e dependendo de quanto tempo apt-get update será executado, você precisará digitar a senha uma vez.

No entanto, esta não é a melhor prática. Em vez disso, sugiro que você execute todo o script com o sudo em vez de colocá-lo na frente de cada comando no arquivo. Em outras palavras, o script deve ser:

#!/bin/bash
apt-get update
apt-get upgrade

E corra como

sudo  ./my_script.sh

Observe que aqui estamos usando #!/bin/bash line para usar bash shell como intérprete. Isso é muito diferente de /bin/sh . Por que você está fazendo isso não faz diferença, mas se você precisa estar ciente de que eles diferem na sintaxe de alguns dos operadores.

No entanto, uma abordagem ainda melhor seria livrar-se completamente do script e usar a função ou alias que faz o que você deseja. Os scripts são realmente para grandes quantidades de código que você deseja reutilizar. Para 2 - 3 linhas, uma função ou alias no arquivo ~/.bashrc será suficiente.

Pessoalmente, eu faria algo assim no meu ~/.bashrc

alias agu="sudo bash -c 'apt-get update && apt-get upgrade'"
    
por Sergiy Kolodyazhnyy 02.06.2017 / 19:49
1

Não se esqueça de definir DEBIAN_FRONTEND=noninteractive para esses avisos incômodos sobre qual versão manter:

sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -y;

Se você não fizer isso, seu script ficará no limbo. Então, se você fosse fazer isso em um script, eu faria o seguinte:

#!/usr/bin/env bash
set -e

patching(){
    # sudo specified because this was from my bootstrap script for an
    # ec2 instance remove the sudos as previously stated if you are 
    # going to exec it from your current shell
    sudo apt-get update -y;
    sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -y;
};

patching;

Os métodos indicados anteriormente funcionarão ... até que não funcionem.

Eu tive que me referir a um script anterior que escrevi para encontrar essa variável.

Espero que ajude alguém com seu script de patch / bootstrap.

    
por Robert J 03.11.2017 / 06:38