Verifique por si mesmo:
% ln -s ~/one two
% ls -l two
[...] two -> /home/rmano/one
O comando ln
nem mesmo vê o ~
char --- ele é expandido pelo shell.
Agora, para usar o link, o novo usuário deve ter as permissões apropriadas no caminho real.
Você pode colocar um literal ~
no link, mas não funcionará, pelo menos não no linux --- variáveis de ambiente como $HOME
não são expandidas quando o kernel resolve link simbólico.
Veja:
% cd
% touch a1
% ln -s $HOME/a1 a2
% ln -s '$HOME'/a1 a3
% ls -l a?
-rw-rw-r-- 1 rmano rmano 0 Mar 21 13:49 a1
lrwxrwxrwx 1 rmano rmano 15 Mar 21 13:49 a2 -> /home/rmano/a1
lrwxrwxrwx 1 rmano rmano 4 Mar 21 13:50 a3 -> $HOME/a1
% cat a2
% cat a3
cat: a3: No such file or directory
Existe algum sistema operacional que possui essas características (acho que uma versão do FreeBSD fez isso, assim como alguns UNIX que usei em estações de trabalho Apollo --- não tenho certeza) que é chamado variante symlink .
Veja também link