Les commandes su dans un script exécuté en tant que root semblent incohérentes

J’essaie de comprendre comment exécuter des commandes à partir de mon compte d’utilisateur dans un script avec les privilèges root. J’ai ce script de test et le résultat me dérange.

~ $ cat test.sh

sortie :

#!/usr/bin/bash su -c "whoami" user su -c "echo $HOME" user 

~ $ sudo ./test.sh

sortie :

 user /root 

Pourquoi la première commande «su» semble-t-elle s’exécuter en tant qu ‘«utilisateur» mais la seconde semble fonctionner en tant que «root»?

Les guillemets doubles développent les variables de shell. Essayer

 echo su -c "echo $HOME" user 

pour voir ce que je veux dire C’est le shell qui exécute le script qui développe $HOME , qui s’exécute en tant que root (depuis sudo ./test.sh ). Donc, ce qui finit par être exécuté est l’utilisateur su -c 'echo /root' user .

Tu veux

 su -c 'echo $HOME' user 

Ici, nous transmettons echo $HOME non expansé à su -c .