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]"