J'essaie de m'assurer que lorsqu'un script est exécuté, il est exécuté en tant qu'utilisateur spécifique sans avoir à suivre cet utilisateur avant l'exécution du script. De plus, le script est exécuté avec quelques drapeaux par exemple
./myscript.sh -e dev -v 1.9
J'ai essayé ce qui suit
[ `whoami` = myuser ] || exec sudo -S su - myuser -c "bash `pwd`/`basename $0` [email protected]"
Mais le drapeau -v qui est censé être une entrée de mon script est alimenté en entrée de su. Il se plaint donc d'une option invalide, existe-t-il un moyen de corriger ce qui précède ?
NB :La personne qui exécute le script a les privilèges sudo.
Réponse acceptée :
L'utilisateur courant est déjà dans la variable $USER . Donc, tout ce dont vous avez besoin est :
[ "$USER" = "myuser" ] || sudo -u myuser $0 "[email protected]"
Il n'y a pas besoin de sudo su , sudo peut faire tout ce dont vous avez besoin. Vous n'avez pas non plus besoin de pwd ou basename , le $0 la variable a déjà le chemin complet vers le script.
Votre commande d'origine lançait un shell de connexion (su - ). Si c'est vraiment nécessaire (ce qui semble étrange), vous pouvez faire :
[ "$USER" = "myuser" ] || sudo -iu myuser $0 "[email protected]"