D'amener les utilisateurs à la maison de répertoire lors de l'exécution d'un script en tant que root
J'ai un script sh qui doit être exécuté en tant que root, cependant il est exécuté par l'utilisateur final à l'aide de sudo. Comment puis-je obtenir le répertoire de base d'utilisateurs lorsque ~/points /root lors de l'exécution avec sudo?
Vous devez vous connecter pour publier un commentaire.
Le répertoire home de l'utilisateur serait
~$SUDO_USER
. Vous pouvez utilisereval
comme suit:eval
. Voir ma réponse sanseval
.eval
ici. Le~
est en expansion, doncecho ~user
est suffisant.eval
parce que l'utilisateur est stocké dans une variable.SUDO_USER='root; touch /tmp/AllYourBaseAreBelongToUs'
Essayez d'éviter de eval. Surtout avec la racine perms.
Que vous pouvez faire:
Mise à jour:
ici est pourquoi, pour éviter eval.
FOO="bob; ls"; eval "echo $FOO"
imprime seulement un mot: "bob", puis exécutels
. Maintenant, remplacezls
avec quelque chose de plus abominable.De sorte que vous pouvez accéder à
$SUDO_USER
et demander au système de son homedir avecgetent passwd $SUDO_USER | cut -d: -f6
.Essayez d'accéder à la variable d'environnement $SUDO_USER
sudo sh -c 'echo ~$SUDO_USER'
À moins que j'ai mal compris la question, lorsque l'utilisateur exécute le script avec la commande sudo, le
$HOME
variable d'environnement ne change pas. Pour tester, j'ai créé ce script:... et de l'exécuter:
De sortie:
La sortie me dit que
$HOME
pointe toujours vers le domicile de l'utilisateur (dans ce cas, /home/haiv).