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}
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?
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
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}
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}"