Je travaille actuellement sur un script bash qui installe et configure divers programmes sur un système Linux standard (actuellement Ubuntu). Puisqu'il installe des programmes et copie un certain nombre de fichiers dans divers dossiers qui nécessitent des privilèges élevés, j'ai déjà réalisé le standard "J'ai besoin de privilèges élevés".
Cependant, je souhaiterais, si possible, pouvoir demander à l'utilisateur son mot de passe sudo et élever automatiquement les privilèges du script si l'utilisateur n'exécute pas la commande de script avec sudo (par exemple, en le lançant à partir du gestionnaire de fichiers de l'interface graphique), sans que l'utilisateur ait à redémarrer le script.
Comme cela est conçu pour fonctionner sur des installations Linux courantes, toute option qui modifie le système ne fonctionnera pas pour mes besoins. Toutes les options doivent être contenues dans le script lui-même.
Est-ce possible dans Bash? Si tel est le cas, quel est le meilleur moyen (sûr mais concis) de le faire?
Réponses:
Je lance
sudo
directement à partir du script:la source
Je suggère:
la source
if [[ -t 1 ]];
vérifier?Ajoutez ceci comme première ligne du script:
Changement
sudo
àgksu
ougksudo
si vous préférez une invite graphique.la source
"$*"
va fusionner tous les arguments en un seul (cela/path/to/script one two three
va donner lieu à$1
êtreone two three
), et$*
sans guillemets, les espaces seront gâchés par des arguments."$@"
fonctionne biensudo
, c'est bien mieux que d'utilisersu
. Mais si vous voulez vraiment, probablementexec su -c "$0" "$@"
exemple de script je ne me dérange pas de partager:
--ImP.TeK
la source
[ "$UID" -eq 0 ] || exec sudo "$0" "$@"
- On dirait un one-liner vraiment efficace! Agréable!$EUDI
, ou toujours le même résultat? Par exemple,[[ "$EUID" -eq 0 ]] || exec sudo "$0" "$@"