Je crée un script d'installation Bash qui compile et installe des bibliothèques pour OSX et Linux. Parce que certaines commandes de mon script ("make install", "apt-get install", "port install", etc.) nécessitent Sudo, j'ai besoin de l'utilisateur pour fournir le mot de passe.
Actuellement, l'utilisateur reçoit le mot de passe chaque fois que la première commande Sudo est sur le point d'être exécutée, mais comme il s'agit souvent d'une étape de compilation, il reste toujours un certain temps entre le démarrage du script et la saisie du mot de passe.
Je voudrais mettre l'entrée du mot de passe + vérifier au début du script. De plus, je suis curieux de savoir si c’est vraiment un bon moyen d’installer des bibliothèques système.
Alternativement, je pourrais installer les bibliothèques dans un emplacement de sandbox local qui ne nécessite pas Sudo, mais ensuite, je devrai dire à apt-get et à macports où installer leurs bibliothèques, à part le répertoire par défaut/usr/local/et/opt/local , et je ne sais pas comment faire cela ni si c'est une idée intelligente.
Pour obtenir le mot de passe, il suffit de mettre Sudo echo "Thanks."
au début du script.
Mais je préférerais cette solution:
if [[ $UID != 0 ]]; then
echo "Please run this script with Sudo:"
echo "Sudo $0 $*"
exit 1
fi
Pour ceux qui ne veulent pas élever le script entier (pour limiter les risques en utilisant uniquement Sudo dans le script si nécessaire), la première partie de la réponse acceptée Sudo echo "Thanks"
fonctionne mais ne répond pas à l'échec du mot de passe Sudo en quittant le script. Pour ce faire, les scripts qui incluent des commandes Sudo et souhaitent garantir l'accès à Sudo avant son utilisation pourraient commencer par
if [[ ! $(Sudo echo 0) ]]; then exit; fi
La mise en garde est que vous vous fiez à l'existence d'un délai d'attente sudoers qui durera toute la durée de votre script pour supprimer le reste des invites.
Une autre façon de s'y prendre:
function checkSudo() {
if ((EUID != 0)); then
echo "Granting root privileges for script ( $SCRIPT_NAME )"
if [[ -t 1 ]]; then
Sudo "$0" "$@"
else
exec 1>output_file
gksu "$0" "$@"
fi
exit
fi
}