J'ai une USER
variable dans mon script et je veux voir son HOME
chemin basé sur la USER
variable. Comment puis je faire ça?
bash
shell-script
users
MatthewRock
la source
la source
~foo
avec des variables dansbash
. Pas directement, de toute façon.~
semble cependant que l'onglet semble se développer et qu'un autre comportement spécifié du préfixe tilde doit être remplacé par un chemin d'accès du répertoire de travail initial associé au nom de connexion obtenu à l'aide de lagetpwnam()
fonction . Cette recherche est donc probablement très bonne. Je n'aime pas les extensions de tabulation, cependant - j'aime taper des tabulations.Vous pouvez utiliser
eval
pour obtenir le répertoire personnel de quelqu'un.Au moins pour les utilisateurs locaux, cela fonctionne à coup sûr. Je ne sais pas si les utilisateurs distants comme LDAP sont gérés
eval
.la source
eval
est nécessaire. Bash ne traite pas~foo
après une expansion variable.USER
.$USER
développe pour juste une seule chaîne de caractères alphabétiques.La place habituelle est
/home/$USER
, mais cela ne doit pas nécessairement être universel. Le lieu définitif pour rechercher de telles informations se trouve dans le fichier/etc/passwd
.Ce fichier est lisible dans le monde entier (tout le monde peut le lire), ainsi tout utilisateur a accès à son contenu.
Si $ USER existe dans le fichier, l'entrée précédente est le répertoire HOME de l'utilisateur.
Ceci sélectionnera l’entrée et imprimera le répertoire HOME:
Pour les systèmes plus complexes (distants), getent est la commande habituelle pour obtenir des informations sur les utilisateurs à partir du système NSS (Name Service Switch libraries).
Une commande de
Fournira des informations équivalentes (si disponibles).
la source
Si l'utilisateur n'existe pas,
getent
une erreur sera renvoyée.Voici une petite fonction shell qui n'ignore pas le code de sortie de
getent
:Voici un exemple d'utilisation:
la source
Si vous êtes connecté en tant qu'utilisateur root, si vous connaissez
USER
le mot de passe ou s'ilUSER
n'y en a pas, l'option suivante est une autre option:Sous le
su
comportement standard , s'ilUSER
est non défini ou vide, ilsu
tentera alors d'exécuter la commande en tant que root.Si la valeur
USER
est pas un nom d'utilisateur valide, une erreur appropriée sera soulevée:su: user <user> does not exist
.Il y a déjà beaucoup de bonnes réponses ici, mais cela peut toujours aider quelqu'un.
la source