# Probleme variables d'environnement après utilisation de la commande su - (avec un tiret)

**URL:** <https://www.debian-fr.org/t/probleme-variables-denvironnement-apres-utilisation-de-la-commande-su-avec-un-tiret/90546>\
**Category:** Support Debian\
**Tags:** bash, bookworm\
**Created:** [Novembre 10, 2024, 7:48 UTC](https://www.debian-fr.org/t/probleme-variables-denvironnement-apres-utilisation-de-la-commande-su-avec-un-tiret/90546 "2024-11-10T19:48:20Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![anon8635268](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/848f3c/32.png) [@anon8635268](https://www.debian-fr.org/u/anon8635268)\
**Post date:** [Novembre 10, 2024, 7:48 UTC](https://www.debian-fr.org/t/probleme-variables-denvironnement-apres-utilisation-de-la-commande-su-avec-un-tiret/90546/1 "2024-11-10T19:48:20Z")

</div>

Bonjour,

J’ai utilisé la commande su - (avec un tiret) et les variables d’environnements se sont échangées entre l’utilisateur root et l’utilisateur normal…  
Cela a modifié plusieurs variables d’environnement dont $PWD :  
Maintenant lorsque je me connecte avec l’utilisateur root j’atterris dans le répertoire de l’utilisateur normal et inversement.  
Comment revenir en arrière s’ils-vous-plaît ?

---

<div class="post-metadata">

**Author:** ![Clochette](https://www.debian-fr.org/user_avatar/www.debian-fr.org/clochette/32/8757_2.png) [@Clochette](https://www.debian-fr.org/u/Clochette)\
**Post date:** [Novembre 11, 2024, 8:31 UTC](https://www.debian-fr.org/t/probleme-variables-denvironnement-apres-utilisation-de-la-commande-su-avec-un-tiret/90546/2 "2024-11-11T08:31:13Z")

</div>

> [@anon8635268](#):
>
> J’ai utilisé la commande su - (avec un tiret) et les variables d’environnements se sont échangées entre l’utilisateur root et l’utilisateur normal…  
> Cela a modifié plusieurs variables d’environnement dont $PWD

Normale, effectivement.

> [@anon8635268](#):
>
> Maintenant lorsque je me connecte avec l’utilisateur root j’atterris dans le répertoire de l’utilisateur normal et inversement.

C’est à dire ?

> [@anon8635268](#):
>
> Comment revenir en arrière s’ils-vous-plaît ?

Lorsque tu te connecte avec su - root, tu fais en suite un exit pour quitter cet utilisateur, idem avec n’importe quel utilisateur d’ailleurs.

---

<div class="post-metadata">

**Author:** ![Clochette](https://www.debian-fr.org/user_avatar/www.debian-fr.org/clochette/32/8757_2.png) [@Clochette](https://www.debian-fr.org/u/Clochette)\
**Post date:** [Novembre 11, 2024, 1:11 UTC](https://www.debian-fr.org/t/probleme-variables-denvironnement-apres-utilisation-de-la-commande-su-avec-un-tiret/90546/4 "2024-11-11T13:11:34Z")

</div>

> [@anon8635268](#):
>
> Lorsque je fais un su root j’arrive maintenant dans le répertoire /home/clement de mon compte au lieu de /root.  
> Les valeurs des variables $pwd, $home, $logname de l’utilisateur root ont été remplacées par celle de l’utilisateur clement…

Nope … si tu cherches à basculer d’un utilisateur à un autre et qu’il faille impérativement récupérer les variable d’environnement ile te faut systématiquement utiliser le -

Lors de l’utilisation de su, tu bascules l’utilisateur sans son environnement.  
Par contre si tu utilise su - , tu bascules avec les variables d’environnement de l’utilisateur invoqué.

```auto

       -, -l, --login
           Fournir à l'utilisateur un environnement similaire à celui qu'il
           aurait obtenu s'il s'était connecté directement.

           Lorsque - est utilisé, il doit être indiqué comme dernier paramètre
           de su. Les autres formes (-l et --login) ne présentent pas cette
           restriction.

```

[https://www.man-linux-magique.net/man1/su.html](https://www.man-linux-magique.net/man1/su.html)

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Novembre 11, 2024, 1:31 UTC](https://www.debian-fr.org/t/probleme-variables-denvironnement-apres-utilisation-de-la-commande-su-avec-un-tiret/90546/5 "2024-11-11T13:31:35Z")

</div>

Quand tu utilises juste `su`, tu gardes l’environnement d’origine et tu bascule sur le user cible (mais sans l’environnement du user cible).  
Avec `su -` tu bascules vers l’utilisateur cible avec l’environnement de l’utilisateur cible.

---

<div class="post-metadata">

**Author:** ![pled](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pled/32/11791_2.png) [@pled](https://www.debian-fr.org/u/pled)\
**Post date:** [Novembre 11, 2024, 2:33 UTC](https://www.debian-fr.org/t/probleme-variables-denvironnement-apres-utilisation-de-la-commande-su-avec-un-tiret/90546/7 "2024-11-11T14:33:39Z")

</div>

La documentation dit ceci :  
`$ man su`  
3e paragraphe de DESCRIPTION :

For backward compatibility, su defaults to not change the current directory  
and to only set the environment variables HOME and SHELL (plus USER and  
LOGNAME **if the target user is not root** ).

C’est donc normal, comme on pouvait s’y attendre.

---

<div class="post-metadata">

**Author:** ![Verner](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/34f0e0/32.png) [@Verner](https://www.debian-fr.org/u/Verner)\
**Post date:** [Novembre 11, 2024, 7:59 UTC](https://www.debian-fr.org/t/probleme-variables-denvironnement-apres-utilisation-de-la-commande-su-avec-un-tiret/90546/8 "2024-11-11T19:59:29Z")

</div>

A se demander si l’origine de la confusion ne vient d’une traduction approximative française de `man su`.  
En français, lien html: ‹&nbsp;`su [options] [nom_utilisateur]`&nbsp;›  
En anglais, pas la même chose.

> NAME  
> su - run a command with substitute user and group ID
> 
> SYNOPSIS  
> su [options] [-] [user [argument…]]
> 
> DESCRIPTION  
> su allows commands to be run with a substitute user and group ID.
> 
> ```
> When called with no user specified, su defaults to running an interactive shell as root. When user is
> specified, additional arguments can be supplied, in which case they are passed to the shell.
> 
> ```

@anon8635268  
Peux-tu vérifier ce que donnent les commandes suivantes dans ton environnement.

```auto
$ env | grep 'USER\|HOME\|LOGNAME\|SHELL\|^PATH'
USER=toto
HOME=/home/toto
LOGNAME=toto
SHELL=/usr/bin/zsh
PATH=/usr/bin:/bin:/usr/local/bin:/home/users/bin

```

Par défaut, l’utilisateur substitué par su est root.  
`su - root`, ou plus simplement `su -`

```plaintext
# env | grep 'USER\|HOME\|LOGNAME\|SHELL\|^PATH'
USER=root
HOME=/root
LOGNAME=root
SHELL=/usr/bin/zsh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

```
