J'ai ce script pour éteindre mon système après 30 secondes. Je veux exécuter ce script en double-cliquant dessus (cette option que j'ai changée dans Nautilus). Ceci est le contenu de mon script
#!/bin/bash
shutdown -h +30;
echo "succesfull"
read -p "Press any key to continue... " -n1 -s
pour que le script Sudo soit exécutable sans mot de passe, j'ai suivi ceci réponse et je suis en mesure d'exécuter ce script à partir du terminal sans utiliser de mot de passe (Sudo ~/test/test.sh
). Le problème est que lorsque je double-clique sur le script ci-dessus, il demande à nouveau des privilèges root:
shutdown: Need to be root
successful
Press any key to continue...
Quel est le problème ici?
Vous pouvez conditionner la relance du script en tant que root s'il est lancé en tant qu'utilisateur normal.
Pour éteindre l'ordinateur:
#!/bin/bash
if [[ $USER == "eka" ]]; then # If the script is ran as "eka" then...
Sudo $0 # relaunch it as "root".
exit 0 # Once it finishes, exit gracefully.
Elif [[ $USER != "root" ]]; then # If the user is not "eka" nor "root" then...
exit 0 # Once it finishes, exit gracefully.
fi # End if.
shutdown -h +30;
read -p "Press any key to continue... " -n1 -s
Version simplifiée:
#!/bin/bash
[[ $USER == "eka" ]] && { Sudo $0; exit 0; }
[[ $USER != "root" ]] && exit 0
shutdown -h +30;
Version très simplifiée (non recommandée):
#!/bin/bash
Sudo $0 # Relaunch script as root (even if it's already running as root)
shutdown -h +30; # Shutdown the computer in 30 seconds.
Pour suspendre l'ordinateur :)
#!/bin/bash
if [[ $USER == "eka" ]]; then # If the script is ran as "eka":
gnome-screensaver-command -a # Lock computer.
else # Else:
Sudo -u eka gnome-screensaver-command -a # Once it finishes, exit gracefully.
fi # End if.
Version simplifiée:
#!/bin/bash
[[ $USER != "eka" ]] && { Sudo -u eka gnome-screensaver-command -a; exit 0; }
Version très simplifiée:
#!/bin/bash
Sudo -u eka gnome-screensaver-command -a
Remarque:$0
est une variable qui contient le chemin d'accès complet au script.