Essaye en remplaçant le self par $$ :
Code:ps -o user= $(awk '{print $6}' /proc/$$/stat)
Version imprimable
Essaye en remplaçant le self par $$ :
Code:ps -o user= $(awk '{print $6}' /proc/$$/stat)
Si le script d'installation s'est déconnecté (ou l'un de ses parents) de la session d'origine avec nohup ou équivalent, il n'est plus dans la même session ou le même process group.
Il peut en revanche remonter la hiérarchie de ses parents jusqu'à un shell appartenant à l'utilisateur courant, mais ce n'est pas garanti.
Si l'un de ces processus est mort, ses descendants sont reparentés à init.
Pour afficher la hiérarchie complète, la commande suivante peut être utilisée, elle affichera le nom du compte utilisateur en cas de changement:
Code:pstree -up -cls $$
Si tu n'as pas pstree, voilà un script qui devrait t'afficher le nom de l'utilisateur original si le processus courant est toujours connecté à la bonne hiérarchie :
Code:
1
2
3
4
5
6
7
8 pid=$$ while [ $pid -gt 1 ] ; do read pid user < <(ps -p $pid -o ppid= -o user=) if [ "$user" != root ] ; then echo $user break fi done
Je viens par ailleurs de tester en post install les propositions de ggnore:
$SUDO_UID et $SUDO_USER me renvoient les bonnes informations.
Cela fonctionne y compris quand l'installation se fait depuis un terminal où l'on s'est placé en root complet.
Il me restera donc toujours la possibilité de tester si sudo est installé, de récupérer l'utilisateur avec $SUDO_USER si c'est le cas, et de faire appel à logname dans le cas contraire.
En espérant qu'il n'existe pas une dérivée Debian exotique !
J'ai testé ton script jlliagre, il fonctionne.
Mais qu'entends-tu par "Si tu n'as pas pstree" ?
Ce que veux dire jlliagre, c'est que par défaut pstree n'est pas installée en standard...
Et comment ça se passe si l'utilisateur qui installe le package est réellement root ?
Je pose cette question, car la solution de jlliagre ne retournera rien dans ce cas...
Sur Ubuntu, il l'est. Le script a tout de même fonctionné.
Oui, tout à fait puisqu'il exclut root des réponses valides.Citation:
Et comment ça se passe si l'utilisateur qui installe le package est réellement root ?
Je pose cette question, car la solution de jlliagre ne retournera rien dans ce cas...
On peut en revanche affiner en sortie de boucle en testant si $user est vide. S'il l'est, c'est que c'est root qui est l'utilisateur courant.
Oui bien sûr. Ce que je voulais dire, c'est que pstree remonte la hiérarchie des processus et affiche le nom du compte de l'utilisateur non root s'il en trouve un. Mon script permet de faire la même chose sans pstree.
Sur une installation Ubuntu standard, l'utilisateur courant ne peut pas être root car ce compte est désactivé par défaut. On doit donc systématiquement se loguer avec un compte utilisateur "normal" puis passer sous root via sudo.Citation:
On peut en revanche affiner en sortie de boucle en testant si $user est vide. S'il l'est, c'est que c'est root qui est l'utilisateur courant.
Si mon script ne renvoie rien, c'est qu'il n'a pas pu remonter jusqu'à un processus de l'utilisateur.
Je viens de me rendre compte que je n'avais pas vu ton message, désolé !
Lorsque je veux passer en root complet , je fais un
sous UbuntuCode:sudo su root
J'ai testé l'installation du paquet depuis un terminal, , avec divers contextes:
- après être passé root par su sous Debian
- par sudo sous Ubuntu
- après être passé root par sudo su root sous Ubuntu lorsque je voulais vérifier la solidité de ce qui était retourné.
Qu'entends-tu par "le même souci au départ de l'installation du package ?" Tu veux dire en vérifiant si le problème apparaît dans un script de pré installation ?
Oui, car si tu n'as pas ce problème au départ, autant sauver la valeur pour la récupérer ensuite.
J'avais écarté cette solution qui m'avait effleuré l'esprit pensant qu'il n'y avait aucune raison pour que le statut puisse changer entre la pré et la post installation, du coup je ne l'ai pas testée.
Comme le problème est résolu avec la solution de jlliagre, ça restera à tester par ceux qui en auront la patience ! ;)