J'écris un programme dans 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?
man whoami
est généralement un bon premier arrêt pour vérifier la documentation.Réponses:
Sur la ligne de commande, entrez
ou
Pour enregistrer ces valeurs dans une variable, faites
ou
Bien sûr, vous n'avez pas besoin de créer une variable car c'est à cela que sert la
$USER
variable.la source
$USER
n'est pas défini du tout. Pire encore, il s'agit simplement d'une variable d'environnement, elle peut donc être remplacée par l'utilisateur:USER=thisisnotmyname bash -c 'echo $USER' # prints thisisnotmyname
whoami
(comme vous l'avez suggéré) élimine complètement le problème, en supposant que les variables d'environnement remplacées sont un problème potentiel dans votre contexte.Une alternative à
whoami
isid -u -n
.id -u
renverra l'ID utilisateur (par exemple 0 pour root ).la source
id
commande-u
et les-n
drapeaux font partie de posix"${USER}"
et leswhoami
deux dépendent de la façon dont vous vous connectez. Plus précisément, les shells de connexion et sudo définiront $ USER etwhoami
examineront l'utilisateur attaché à stdin. Cependant, si vous exécutez un travail par lots à partir de cron, ou si vous exécutez un script de démarrage en tant qu'utilisateur différent de root, ceux-ci produiront le mauvais utilisateur (root) ou rien du tout. Cette réponse renverra la valeur correcte indépendamment en regardant l'ID utilisateur du processus.-n
argument affiche le nom d'utilisateur, tout comme la question d'origine posée. voir ce qui suit:id -u -n
impressionsbrett
- même sur darwin.Utilisez la commande standard Unix / Linux / BSD / MacOS
logname
pour récupérer 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 quittera. Cette commande existe depuis environ 1981.la source
Un hack que j'ai utilisé sur Solaris 9 et Linux et qui fonctionne bien pour les deux:
Cet extrait de code imprime le nom de l'utilisateur avec l'EUID actuel.
REMARQUE: vous avez besoin de Bash comme interprète ici.
Sous Solaris, vous avez 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)$USER
la variable n'est définie correctement qu'après avoir lu les fichiers de profil (par exemple,/etc/profile
)la source
ps
commande est tout ce qui est nécessaire pour afficher le propriétaire du pid du shell actuel.command -p id
(à partir d'un shell POSIX) ou/usr/xpg4/bin/id
. Plus généralement, sur Solaris, vous voudriez modifier votre environnement pour vous mettre dans un environnement POSIX (avec quelque chose commePATH=
getconf PATH` et assurez-vous de courir/usr/xpg4/bin/sh
) pour éviter d'être coincé avec des commandes des années 70/80.Deux commandes:
id
imprime l'ID utilisateur avec les groupes. Format:uid=usernumber(username) ...
whoami
donne le nom d'utilisateur actuella source
Lorsque les autorisations root (sudo) sont requises, ce qui est généralement de 90% + lors de l'utilisation de scripts, les méthodes des réponses précédentes vous donnent toujours
root
la réponse.Pour obtenir l'utilisateur "connecté" actuel est tout aussi simple, mais cela nécessite d'accéder à différentes variables:
$SUDO_UID
et$SUDO_USER
.Ils peuvent être repris:
Ou attribué, par exemple:
la source
Dans Solaris OS, j'ai utilisé cette commande:
Sous Linux - Quelqu'un a déjà répondu à cela dans les commentaires.
la source
Pour Bash , KornShell (
ksh
),sh
etc. Beaucoup de vos questions trouvent rapidement une réponse:pour obtenir la documentation du système que vous utilisez ou généralement plus facilement:
google "fonction homme"
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 coquille.
Pour l'écrire:
la source
Le nom d'utilisateur de l'utilisateur actuel peut être obtenu en Bash pur avec l'
${parameter@operator}
extension de paramètre (introduite dans Bash 4.4):La fonction
:
intégrée (synonyme detrue
) est utilisée à la place d'une variable temporaire en définissant le dernier argument, qui est stocké dans$_
. Nous développons ensuite it (\u
) comme s'il s'agissait d'une chaîne d'invite avec l'P
opérateur.C'est mieux que d'utiliser
$USER
, comme$USER
c'est juste une variable environnementale régulière; elle peut être modifiée, non définie, etc. Même si elle n'est pas intentionnellement altérée, un cas courant où elle est toujours incorrecte est lorsque l'utilisateur est changé sans démarrer un shell de connexion (su
par défaut).la source
Sur la plupart des systèmes Linux, il suffit de taper whoami sur la ligne de commande pour fournir l'ID utilisateur.
Cependant, sur Solaris, vous devrez peut-être déterminer l'ID utilisateur, en déterminant l'UID de l'utilisateur connecté via la commande ci-dessous.
Une fois l'UID connu, recherchez l'utilisateur en faisant correspondre l'UID au
/etc/passwd
fichier.la source
Récupère le user_struct de la tâche en cours
la source