Puis-je accéder à la variable $ USER d'origine à partir d'un script exécuté avec `sudo`?

19

Une question bizarre, je sais. Voici le script:

echo $USER

Voici la commande que j'utilise pour l'exécuter:

sudo ./myscript.sh

En ce moment, il imprime "root" mais je veux qu'il imprime jon, mon nom d'utilisateur. Existe-t-il un moyen de le faire en modifiant le script et non la commande?

Jonathan
la source
Oui, il existe des moyens de le faire. Mais peut-être que le moyen le plus simple est une solution de contournement. Appelez ce script à partir d'un autre script, où vous «enregistrez» votre ID utilisateur afin que le «script sudo» puisse y accéder.
sudodus

Réponses:

28

Utilisez la SUDO_USERvariable d'environnement au lieu de USER.

sudoplace le nom de l'utilisateur qui l'a exécuté dans la SUDO_USERvariable d'environnement:

ek@Io:~$ sudo sh -c 'echo $USER'
[sudo] password for ek:
root
ek@Io:~$ sudo sh -c 'echo $SUDO_USER'
ek

Vous pouvez donc simplement remplacer $USERpar $SUDO_USERdans votre script:

echo $SUDO_USER

Lectures complémentaires

Eliah Kagan
la source