String de prefixo Bash com til para expandir para o diretório inicial

4

Eu não consigo descobrir como prefixar uma string (por exemplo, "user1") com um til (~) para produzir ~user1 e expandir para o diretório inicial do user1.

Aqui está o que eu tenho agora:

USER="user1"
ls ~${USER}
ls: cannot access ~user1: No such file or directory

~user1 não está sendo expandido. Como posso conseguir isso?

editar

Isso não funciona:

$ cat test.sh
USER="user1"
ls $(~$USER)

$ sh -x test.sh
+ USER=user1
+ ~user1
test.sh: 1: ~user1: not found
+ ls
test.sh
    
por bernie 14.09.2012 / 17:29

2 respostas

6

Se o diretório de seu usuário não for simplesmente /home/user , você poderá usar eval em seu script ( source ):

USER_HOME=$(eval echo ~${USER})
echo ${USER_HOME}
    
por 14.09.2012 / 17:41
3

Esta é uma maneira geral de obter bash para reavaliar, mas o uso de eval pode ser melhor, pois não vai gerar um novo processo. (o echo é construído no bash, então não é um novo processo)

user="user1"
bash -c "ls ~${user}"
    
por 14.09.2012 / 17:36