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

Une question étrange, je sais. Voici le script:

echo $USER 

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

 sudo ./myscript.sh 

Pour le moment, il affiche “root” mais je veux que jon , mon nom d’utilisateur, soit imprimé. Y a-t-il un moyen de le faire en changeant le script et non la commande?

Utilisez la variable d’environnement SUDO_USER au lieu de USER .

sudo place le nom de l’utilisateur qui l’a exécuté dans la variable d’environnement SUDO_USER :

 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 $USER par $SUDO_USER dans votre script:

 echo $SUDO_USER 

Lectures complémentaires

  • man sudo , dans la section “ENVIRONNEMENT”:

     SUDO_USER Set to the login name of the user who invoked sudo. 

    La page de manuel décrit également d’autres variables d’environnement associées définies par sudo qui peuvent s’avérer utiles, telles que SUDO_UID et SUDO_GID

  • Obtenir $ USER dans un script shell lors de l’exécution avec sudo?