6 votes

Comment puis-je obtenir le nom complet de l'utilisateur actuellement connecté via le Terminal lorsqu'il est exécuté en tant que Root ?

Cette commande fonctionne très bien pour lister le nom complet :

finger $(whoami) | egrep -o 'Name: [a-zA-Z0-9 ]{1,}' | cut -d ':' -f 2 | xargs echo

Mais, si vous l'exécutez après un

sudo su

Il renvoie l'administrateur du système racine du CVMS

Je me demande s'il n'y a pas un autre endroit pour lire la variable Nom complet ? Existe-t-il un objet Utilisateur quelque part qui pourrait l'indiquer ? Je pensais que j'étais sur quelque chose avec

dscacheutil -q user | grep -A 3 -B 2 -e uid:\ 5'[0-9][0-9]'

Mais il ne semble pas que le nom complet soit représenté dans ces données de retour.

4voto

klanomath Points 63400

Il suffit d'utiliser id -P $(stat -f%Su /dev/console) | awk -F '[:]' '{print $8}'

id -P $(stat -f%Su /dev/console) rendements :

adminuser:********:501:20::0:0:AdminUser:/Users/adminuser:/bin/bash

awk -F '[:]' '{print $8}' donne le 8ème terme (le "RealName") d'une sortie séparé par des deux points.

Comme proposé par fd0 vous pouvez aussi utiliser :

id -P $(stat -f%Su /dev/console) | cut -d : -f 8

qui est encore plus simple/élégante.

1 votes

+1 pour id -P mais j'utiliserais cut au lieu de awk sur la chaîne directe.

1 votes

@fd0 Ajouté comme proposition alternative ;-)

2voto

grg Points 181593

Vous pouvez utiliser dscl pour lire le RealName :

$ dscl . -read /Users/grgarside RealName
RealName:
 George Garside

Ce qui suit vous donnera exactement ce que vous cherchez. Elle utilise 'who am i' pour obtenir le nom d'utilisateur, puis sed pour formater la sortie.

$ dscl . -read "/Users/$(who am i | awk '{print $1}')" RealName | sed -n 's/^ //g;2p'
George Garside

0 votes

Merci ! Tu m'as suffisamment rapproché pour que je comprenne à partir de là !

0 votes

@Joodoo Voir l'édition, c'est plus rationnel. Vous devriez également poster vos solutions en tant que réponse réelle plutôt que de modifier votre question.

0 votes

@user 'whoami' renvoie Root plutôt que l'utilisateur original. Votre commande awk renvoie une ligne vide pour moi.

2voto

iMatthewCM Points 81

Il fallait une approche à deux lignes :

username="$(stat -f%Su /dev/console)"
realname="$(dscl . -read /Users/$username RealName | cut -d: -f2 | sed -e 's/^[ \t]*//' | grep -v "^$")"

Et ensuite vous pouvez juste faire écho de la variable realname.

0 votes

Puis-je vous demander pourquoi vous avez changé la réponse acceptée ? Avez-vous vu la modification que j'avais apportée à ma réponse ?

0 votes

Je l'ai fait, mais quand j'ai travaillé sur ce sujet, vos modifications n'étaient probablement pas encore en place, parce que je n'ai pas réussi à faire fonctionner votre réponse "hors de la boîte". Ma réponse est ce que j'ai fini par mettre en œuvre, donc je sais qu'elle fonctionne pour mes besoins. Mon commentaire initial sur votre réponse était "Merci ! J'ai pu m'en approcher suffisamment pour comprendre à partir de là !", ce que je maintiens, car elle m'a effectivement donné le coup de pouce cérébral dont j'avais besoin, donc merci beaucoup de m'avoir mis sur la bonne voie :)

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X