web-dev-qa-db-fra.com

Fichier .sh pour apt-get update / apt-get upgrade

C'est peut-être une question simple mais ...

J'ai un fichier update.sh avec les éléments suivants:

Sudo apt-get update
Sudo apt-get upgrade

Lorsque je lance ceci avec ./update.sh (après l'avoir défini sur exécutable), il me demande de saisir mon mot de passe Sudo. Est-ce que cela va exécuter les deux commandes, et je ne peux essentiellement exécuter ce script qu'une seule fois et prendre en charge mes commandes apt-get update/upgrade?

Merci tout le monde

1
snovosel

Le fonctionnement de Sudo est que, par défaut, il vous reste 15 minutes avant que le mot de passe ne vous soit demandé à nouveau. Donc oui, en utilisant les deux commandes, cela fonctionnera parfaitement, et en fonction de la durée d'exécution de apt-get update, vous devrez entrer le mot de passe une fois.

Cependant, ce n'est pas la meilleure pratique. Au lieu de cela, je suggèrerais de faire fonctionner votre script entier avec Sudo au lieu de le placer devant chaque commande du fichier. En d'autres termes, le script devrait être:

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

Et lancez le comme

Sudo  ./my_script.sh

Notez que nous utilisons ici la ligne #!/bin/bash pour utiliser bash Shell en tant qu'interpréteur. Ceci est très différent de /bin/sh. Pour ce que vous faites, cela ne fait aucune différence, mais si vous devez être conscient qu'ils diffèrent par la syntaxe de certains des opérateurs.

Cependant, une approche encore meilleure serait de se débarrasser complètement du script et d’utiliser une fonction ou un alias qui fasse ce que vous voulez. Les scripts concernent en réalité de grandes quantités de code que vous souhaitez réutiliser. Pour 2 à 3 lignes, une fonction ou un alias dans le fichier ~/.bashrc sera suffisant.

Personnellement, je ferais quelque chose comme ça dans mon ~/.bashrc

alias agu="Sudo bash -c 'apt-get update && apt-get upgrade'"
3

N'oubliez pas de définir DEBIAN_FRONTEND=noninteractive pour ces invites fastidieuses sur la version à gérer:

Sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -y;

Si vous ne le faites pas, votre script restera en suspens. Donc, si vous deviez le faire dans un script, je ferais ce qui suit:

#!/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;

Les méthodes indiquées précédemment fonctionneront ... jusqu'à ce qu'elles ne fonctionnent pas.

Je devais me référer à un script précédent que j'avais écrit pour trouver cette variable.

J'espère que cela aidera quelqu'un d'autre avec son script de correction/bootstrap.

1
Robert J

Pourquoi ne pas simplement courir:

apt-get update && apt-get upgrade
0
Vijay