web-dev-qa-db-fra.com

Obtenir le nom d'utilisateur des utilisateurs actuels dans bash?

Je suis en train d'écrire un programme en bash qui doit obtenir le nom d'utilisateur de l'utilisateur. 

J'ai entendu parler d'une chose appelée whoami mais je n'ai aucune idée de ce qu'elle fait ni de la façon de l'utiliser. 

Quelle commande dois-je utiliser pour obtenir le nom d'utilisateur actuel? 

227
George

Sur la ligne de commande, entrez

echo "$USER"

ou

whoami

Pour enregistrer ces valeurs dans une variable, faites

myvariable=$(whoami)

ou 

myvariable=$USER

Bien sûr, vous n’avez pas besoin de créer une variable puisque c’est à cela que sert la variable $USER.

335
SethMMorton

alternative à whoami est id -u -n.

id -u renverra l'identifiant de l'utilisateur (par exemple 0 pour root).

55
Brett

Un hack que j'ai utilisé sous Solaris 9 et Linux et qui fonctionne très bien pour les deux:

ps -o user= -p $$ | awk '{print $1}'

Cet extrait imprime le nom de l'utilisateur avec le numéro EUID actuel.

NOTE: vous avez besoin de Bash comme interprète ici.

Sous Solaris, vous rencontrez des problèmes avec les méthodes décrites ci-dessus:

  • id n'accepte pas les paramètres -u et -n (vous devrez donc analyser la sortie)
  • whoami n'existe pas (par défaut)
  • who am I imprime le propriétaire du terminal actuel (ignore EUID)
  • La variable $USER est définie correctement uniquement après la lecture des fichiers de profil (par exemple /etc/profile)
16
Elvenfighter

Deux commandes:

  1. id imprime l'ID utilisateur avec les groupes . Format: uid=usernumber(username) ...

  2. whoami donne le nom d'utilisateur actuel

11
Sireesh Yarlagadda

Utilisez la commande standard Unix/Linux/BSD/MacOS logname pour extraire l'utilisateur connecté. Cela ignore l'environnement ainsi que Sudo, car ce sont des journalistes peu fiables. Il imprimera toujours le nom de l'utilisateur connecté, puis se fermera. Cette commande existe depuis environ 1981.

My-Mac:~ devin$ logname
devin
My-Mac:~ devin$ Sudo logname
Password:
devin
My-Mac:~ devin$ Sudo su -
My-Mac:~ root# logname
devin
My-Mac:~ root# echo $USER
root
11
Devin R

Lorsque des autorisations root (Sudo) sont requises, ce qui correspond généralement à 90% + lors de l'utilisation de scripts, les méthodes ci-dessus vous donnent toujours root comme réponse.

Obtenir l'utilisateur "connecté" actuel est tout aussi simple, mais nécessite l'accès à différentes variables: $Sudo_UID et $Sudo_USER.

Ils peuvent être répercutés:

echo $Sudo_UID
echo $Sudo_USER

ou assigné, par exemple:

myuid=$Sudo_UID
myuname=$Sudo_USER
6
OldManRiver

Sous Solaris, j'ai utilisé cette commande.

$ who am i     # remember to use it with space.

Sous Linux, quelqu'un a déjà répondu à cela dans les commentaires.

$ whoami       # without space
5
Lin-man

Pour bash/ksh/sh etc. Beaucoup de vos questions trouvent rapidement une réponse:

man [function]

pour obtenir la documentation du système que vous utilisez.

ou généralement plus facilement: google "man function" Cela peut donner des résultats différents pour certaines choses où linux et unix ont des différences modestes.

Pour cette question, entrez simplement "whoami" dans votre Shell.

Pour le script:

myvar=$(whoami)

5
Fred Mitchell

Le nom d'utilisateur de l'utilisateur actuel peut être obtenu en Bash pur avec l'extension de paramètre ${parameter@operator} (introduite dans Bash 4.4):

$ : \\u
$ printf '%s\n' "${_@P}"

Le : intégré (synonyme de true) est utilisé à la place d'une variable temporaire en définissant le dernier argument, qui est stocké dans $_. Nous le développons ensuite (\u) comme s'il s'agissait d'une chaîne d'invite avec l'opérateur P.

C'est mieux que d'utiliser $USER, car $USER n'est qu'une variable d'environnement ordinaire; il peut être modifié, désactivé, etc. Même si ce n’est pas intentionnellement falsifié, un cas courant dans lequel il est toujours incorrect est celui où l’utilisateur change sans ouvrir de shell de connexion (valeur par défaut de su).

1
Crestwave

Sur la plupart des systèmes Linux, il suffit de taper whoami sur la ligne de commande pour obtenir l’ID utilisateur.

Toutefois, sous Solaris, vous devrez peut-être déterminer l'ID utilisateur en déterminant l'UID de l'utilisateur connecté à l'aide de la commande ci-dessous. 

echo $UID

Une fois que l'UID est connu, recherchez l'utilisateur en faisant correspondre l'UID au/etc/passwd. 

cat /etc/passwd | cut -d":" -f1,3
0
John