Ok, encontrei uma maneira de fazer isso funcionar com facilidade:
ln -s 'realpath ../dir2/file' link #not perfect
Não é perfeito - $( ... )
é preferível a '...'
para substituição de comando, e há um problema com nomes de arquivos com espaços - a "double quotes"
corrige isso enquanto permite que a substituição de comando continue. Então, aqui está uma resposta atualizada:
ln -s "$(realpath ../dir2/file)" link
Então, se eu quiser que o nome do arquivo seja o mesmo,
ln -s "$(realpath ../dir2/file)" .