Respostas:
eval echo "~$USER"estiver assumindo que $USERnão contém caracteres especiais que o shell possa interpretar. Por exemplo, se USER="foo\$bar", então quando nós evalo shell substituiremos $barna sua saída, o que não é o que você deseja. Basicamente, se você seguir esta rota, precisará garantir $USERuma entrada sã. Na maioria das vezes, provavelmente será, mas você deve ter isso em mente.
Isso pode funcionar para você:
homedir=$( getent passwd "$USER" | cut -d: -f6 )
Isso também funcionará em usuários que não são você. Por exemplo,
homedir=$( getent passwd "someotheruser" | cut -d: -f6 )
getenvem vez de assumir a localização de passwdé ainda um passo além do que assumindo a localização da casa é/home/
Parece que você é esse usuário - por que não
echo $HOME
?
Não sei se ajuda, mas colocar o til fora da expressão funciona no ZSH, mas não no Bash:
echo ~`echo $USER`
Depois de fazer o login, execute cdpara ir para o diretório inicial e, em seguida, execute pwdpara imprimir o diretório de trabalho.
echo $HOME.
echo ~$usernameque está tudo bem, mas em sh é necessário eval se é uma variável