Ich versuche sicherzustellen, dass, wenn ein Skript ausgeführt wird, es als ein bestimmter Benutzer ausgeführt wird, ohne diesen Benutzer kontaktieren zu müssen, bevor das Skript ausgeführt wird. Außerdem wird das Skript zum Beispiel mit ein paar Flags ausgeführt
./myscript.sh -e dev -v 1.9
Folgendes habe ich versucht
[ `whoami` = myuser ] || exec sudo -S su - myuser -c "bash `pwd`/`basename $0` [email protected]"
Aber das Flag -v, das eine Eingabe für mein Skript sein soll, wird als Eingabe für su gefüttert. Es beschwert sich also über eine ungültige Option, gibt es eine Möglichkeit, das Obige zu korrigieren?
NB:Die Person, die das Skript ausführt, hat sudo-Berechtigungen.
Akzeptierte Antwort:
Der aktuelle Benutzer steht bereits in der Variable $USER
. Sie brauchen also nur:
[ "$USER" = "myuser" ] || sudo -u myuser $0 "[email protected]"
sudo su
ist nicht erforderlich , sudo
kann alles, was Sie brauchen. Sie brauchen auch kein pwd
oder basename
, der $0
Variable hat bereits den vollständigen Pfad zum Skript.
Ihr ursprünglicher Befehl war das Starten einer Login-Shell (su -
). Wenn das wirklich nötig ist (was seltsam erscheint), können Sie Folgendes tun:
[ "$USER" = "myuser" ] || sudo -iu myuser $0 "[email protected]"