Je veux créer un script bash qui doit être exécuté avec sudo mais doit prendre en compte le nom de l'utilisateur non sudo qui l'a exécuté. Donc, si l'utilisateur bob
s'exécute, sudo ./myscript.sh
je voudrais myscript.sh
savoir si bob
c'est lui qui l'a exécuté.
Regardons à l'intérieur myscript.sh
:
USER=$(whoami)
# Do something that takes into account the username.
Comment puis-je connaître le nom de l'utilisateur qui a engendré le processus? Plus précisément, que dois-je utiliser au lieu de whoami
pour obtenir bob
et non root
?
bash
shell-script
sudo
users
marcio
la source
la source
USER=$(whoami)
. Notez que leUSER
existe déjà en tant que variable interne du shell. De plus, s'il s'agit d'un script bash, ne l' exécutez pas à l'aidesh
, qui ne possède qu'un sous-ensemble de fonctionnalités compatibles POSIX.#!/usr/bin/env bash
sur mes scripts bash.sh
ou autre chose.Réponses:
Je ne sais pas à quel point c'est standard, mais au moins dans les systèmes Ubuntu
sudo
définit les variables d'environnement suivantes (entre autres - voir laENVIRONMENT
section de la page de manuel sudo):par exemple,
la source
Si vous souhaitez que cela fonctionne
sudo
également, utilisez${SUDO_USER:-$USER}
. Par exemple:Explication
${var:-val}
s’étendra à$var
moins qu’il ne soit pas défini ou vide, auquel cas il s’étendraval
.la source