In bash eval n'est pas nécessaire echo ~$username, mais c'est correct, mais dans sh eval, une variable est nécessaire
Felipe Alcacibar
Cela donne parfois une mauvaise valeur, peut-être le dossier de départ d'un compte précédent avec le même nom d'utilisateur?
Andrew
@AndrewMacFie: Qu'entendez-vous par "précédent"?
Choroba
1
@choroba Ajoutez un utilisateur, supprimez-le, puis ajoutez un utilisateur avec le même nom d'utilisateur. Si le dossier de base de l'utilisateur est différent la deuxième fois, cette commande donne le dossier de départ d'origine plutôt que le dossier actuel. La réponse de Glenn Jackman donne la réponse actuelle.
Andrew
Notez également que si vous eval echo "~$USER"faites l'hypothèse qui $USERne contient pas de caractères spéciaux que le shell peut interpréter. Par exemple, si USER="foo\$bar", alors, evalle shell va substituer $bardans votre sortie ce qui n’est pas ce que vous voulez. Fondamentalement, si vous prenez cette route, vous devez vous assurer que cette $USERentrée est saine. La plupart du temps, ce sera probablement le cas, mais vous devez en tenir compte.
Zorawar
65
Cela pourrait fonctionner pour vous:
homedir=$( getent passwd "$USER"| cut -d:-f6 )
Cela fonctionnera également sur des utilisateurs autres que vous. Par exemple,
C’est légitime, utiliser getenvplutôt que de supposer que l’emplacement de la maison passwdest encore plus loin que de supposer que l’emplacement de la maison est/home/
Evan Carroll
13
Il semble que vous soyez cet utilisateur - pourquoi pas
Cela ne fonctionnera pas si vous êtes dans un environnement sensible et que vous n'avez pas transmis à sudo les indicateurs -H ou -i - $ HOME restera le répertoire personnel de l'utilisateur précédent (sudoing).
Asfand Qazi
1
Je ne sais pas si cela peut aider, mais placer le tilde en dehors de l'expression fonctionne sur ZSH mais pas sur Bash:
Cela ne va pas au travail; L'idée ici est de faire cela dans un script shell, et sans doute sans exiger les informations d'identification de l'utilisateur en question ...
SamB
-1 pour la même raison que SamB a mentionnée. J'ai modifié votre réponse parce que je veux que vous sachiez comment utiliser le formatage de Markdown et que vous soyez plus concis. Vous avez également manqué la méthode beaucoup plus facile, qui est juste echo $HOME.
echo ~$username
, mais c'est correct, mais dans sh eval, une variable est nécessaireeval echo "~$USER"
faites l'hypothèse qui$USER
ne contient pas de caractères spéciaux que le shell peut interpréter. Par exemple, siUSER="foo\$bar"
, alors,eval
le shell va substituer$bar
dans votre sortie ce qui n’est pas ce que vous voulez. Fondamentalement, si vous prenez cette route, vous devez vous assurer que cette$USER
entrée est saine. La plupart du temps, ce sera probablement le cas, mais vous devez en tenir compte.Cela pourrait fonctionner pour vous:
Cela fonctionnera également sur des utilisateurs autres que vous. Par exemple,
la source
getenv
plutôt que de supposer que l’emplacement de la maisonpasswd
est encore plus loin que de supposer que l’emplacement de la maison est/home/
Il semble que vous soyez cet utilisateur - pourquoi pas
?
la source
Je ne sais pas si cela peut aider, mais placer le tilde en dehors de l'expression fonctionne sur ZSH mais pas sur Bash:
la source
Une fois que vous vous êtes connecté, exécutez
cd
pour accéder à votre répertoire personnel, puispwd
imprimez le répertoire de travail.la source
echo $HOME
.