Demander le mot de passe sudo et élever les privilèges par programmation dans le script bash?

Je travaille actuellement sur un script bash qui installe et met en place divers programmes sur un système Linux stocké (actuellement, Ubuntu). Comme il installe des programmes et copy un certain nombre de files dans divers dossiers nécessitant des privilèges élevés, j'ai déjà effectué la procédure standard «J'ai besoin de privilèges élevés».

Cependant, j'aimerais, si possible, pouvoir inviter l'user pour son mot de passe sudo et élever automatiquement les privilèges du script si l'user n'exécute pas la command de script avec sudo (par exemple le lancer à partir du gestionnaire de files GUI) sans que l'user doive redémarrer le script.

Comme cela est conçu pour fonctionner sur les installations Linux stockées, toute option qui modifie le système ne fonctionnera pas à mes fins. Toutes les options doivent être contenues dans le script lui-même.

Est-ce possible à Bash? Si c'est le cas, quel est le meilleur moyen (sûr, mais concis) de le faire?

Je cours sudo directement à partir du script:

 if [ $EUID != 0 ]; then sudo "$0" "$@" exit $? fi 

Je suggère:

 #!/bin/bash if (($EUID != 0)); then if [[ -t 1 ]]; then sudo "$0" "$@" else exec 1>output_file gksu "$0 $@" fi exit fi # some example stuff ls -l /root echo "app: $0" for f; do echo ">$f<" done 

Ajoutez ceci comme première ligne du script:

 [ "$UID" -eq 0 ] || exec sudo bash "$0" "$@" 

Changez sudo en gksu ou gksudo si vous préférez une invite graphique.