Comment obtenir le répertoire $HOME de l'utilisateur différent dans le script bash?

J'ai besoin pour l'exécution d'une partie d'un script bash en tant qu'utilisateur différent, et à l'intérieur de cet utilisateur $HOME répertoire. Cependant, je ne suis pas sûr de la façon de déterminer cette variable. Commutation de l'utilisateur et de l'appel de $HOME ne fournit pas à l'emplacement correct:

# running script as root, but switching to a different user...
su - $different_user
echo $HOME
# returns /root/but should be /home/myuser

Mise à jour:

Il semble que le problème est avec la manière que je suis en train de changer d'utilisateur dans mon script:

$different_user=deploy

# create user
useradd -m -s /bin/bash $different_user

echo "Current user: `whoami`"
# Current user: root

echo "Switching user to $different_user"
# Switching user to deploy

su - $different_user
echo "Current user: `whoami`"
# Current user: root
echo "Current user: `id`"
# Current user: uid=0(root) gid=0(root) groups=0(root)

sudo su $different_user
# Current user: root
# Current user: uid=0(root) gid=0(root) groups=0(root)

Quelle est la bonne façon de passer les utilisateurs et exécuter des commandes en tant qu'utilisateur différent dans un script bash?

  • Vous pouvez toujours extraire à partir de /etc/passwd, en supposant qu'elle est définie localement compte.
  • su - $different_user doit avoir été suffisante. Êtes-vous sûr que vous êtes encore connecté en tant que myuser. Essayez d'exécuter id commande pour vérifier. Certains shell de connexion est défini sur nologin et il sort dès que vous vous connectez en tant que myuser.
  • J'ai mis à jour ma question d'inclure la façon dont j'ai créé l'utilisateur. Essentiellement: useradd -m -s /bin/bash $different_user.
  • Merci de prendre un autre regard sur ma réponse. Je substantiellement modifié pour qu'il corresponde exactement à ce que vous avez essayé de le faire.
InformationsquelleAutor Andrew | 2013-12-10