Sto cercando di assicurarmi che quando uno script viene eseguito, venga eseguito come un utente specifico senza dover chiedere a quell'utente prima che lo script venga eseguito. Inoltre lo script viene eseguito con un paio di flag per esempio
./myscript.sh -e dev -v 1.9
Ho provato quanto segue
[ `whoami` = myuser ] || exec sudo -S su - myuser -c "bash `pwd`/`basename $0` [email protected]"
Ma il flag -v che dovrebbe essere un input per il mio script viene inviato come input a su. Quindi si lamenta di un'opzione non valida, c'è un modo per correggere quanto sopra?
NB:La persona che esegue lo script ha i privilegi sudo.
Risposta accettata:
L'utente corrente è già nella variabile $USER
. Quindi tutto ciò di cui hai bisogno è:
[ "$USER" = "myuser" ] || sudo -u myuser $0 "[email protected]"
Non è necessario sudo su
, sudo
può fare tutto ciò di cui hai bisogno. Inoltre non hai bisogno di pwd
o basename
, il $0
la variabile ha già il percorso completo dello script.
Il tuo comando originale stava avviando una shell di accesso (su -
). Se è davvero necessario (il che sembra strano), puoi fare:
[ "$USER" = "myuser" ] || sudo -iu myuser $0 "[email protected]"