En bash eval no se necesita con solo echo ~$usernameestá bien, pero en sh eval es necesario si es una variable
Felipe Alcacibar
Esto a veces da un valor incorrecto, ¿tal vez la carpeta de inicio de una cuenta anterior con el mismo nombre de usuario?
Andrew
@AndrewMacFie: ¿Qué quieres decir con "anterior"?
choroba
1
@choroba Agregue un usuario, elimínelo, luego agregue un usuario con el mismo nombre de usuario. Si la carpeta de inicio del usuario es diferente la segunda vez, este comando proporciona la carpeta de inicio original en lugar de la actual. La respuesta de Glenn Jackman da la actual.
Andrew
Tenga en cuenta también que si eval echo "~$USER"está asumiendo que $USERno contiene caracteres especiales que el shell puede interpretar. Por ejemplo, si USER="foo\$bar", entonces cuando evalel shell lo sustituya $baren su salida, que no es lo que desea. Básicamente, si toma esta ruta, debe asegurarse de que $USERsea una entrada sensata. La mayoría de las veces probablemente lo será, pero debes tener esto en cuenta.
Zorawar
65
Esto podría funcionar para usted:
homedir=$( getent passwd "$USER"| cut -d:-f6 )
Esto también funcionará en usuarios que no son usted. Por ejemplo,
Esto no funcionará si está en un entorno sudo'ed y no pasó sudo las banderas -H o -i: $ HOME seguirá siendo el directorio de inicio del usuario anterior (sudo'ing).
Asfand Qazi
1
No sé si ayuda, pero colocar la tilde fuera de la expresión funciona en ZSH pero no en Bash:
Eso no va a funcionar; La idea aquí es hacer esto en shell script, y presumiblemente sin requerir las credenciales del usuario en cuestión ...
Samb
-1 por la misma razón que mencionó SamB. Edité su respuesta porque quiero que vea cómo usar el formato Markdown y que sea más conciso. También te perdiste el método mucho más fácil, que es justo echo $HOME.
echo ~$username
está bien, pero en sh eval es necesario si es una variableeval echo "~$USER"
está asumiendo que$USER
no contiene caracteres especiales que el shell puede interpretar. Por ejemplo, siUSER="foo\$bar"
, entonces cuandoeval
el shell lo sustituya$bar
en su salida, que no es lo que desea. Básicamente, si toma esta ruta, debe asegurarse de que$USER
sea una entrada sensata. La mayoría de las veces probablemente lo será, pero debes tener esto en cuenta.Esto podría funcionar para usted:
Esto también funcionará en usuarios que no son usted. Por ejemplo,
fuente
getenv
lugar de asumir la ubicaciónpasswd
es incluso un paso más allá de asumir que la ubicación de la casa es/home/
Parece que eres ese usuario, ¿por qué no?
?
fuente
No sé si ayuda, pero colocar la tilde fuera de la expresión funciona en ZSH pero no en Bash:
fuente
Una vez que inicie sesión, ejecute
cd
para ir a su directorio de inicio, luego ejecutepwd
para imprimir el directorio de trabajo.fuente
echo $HOME
.