Você precisa atribuir /../..
ao último readlink
, e não dirname
:
$(readlink -f "$(dirname "$(readlink -f "$0")")/../..")
Seu script faz com que dirname path/to/script/../..
seja executado, exibindo " path/to/script/..
", que readlink
se recusa a canonizar porque construções como file/..
são inválidas no Linux e a opção -f
requer a existência de todos os componentes. ( readlink -m
funcionaria, pois não verifica a existência de nenhum componente do caminho.)