Ok, então o que você quer é que o script seja acessado através do symlink para poder usar arquivos relativos ao symlink, certo? E para que isso funcione mesmo que o caminho usado seja absoluto, relativo, relativo de dentro do mesmo diretório, relativo de um subdiretório, etc?
Isto não é de fato simples. Surpreendentemente simples, na verdade - muitas linguagens de programação têm uma função 'abspath' que resolveria esse problema em um flash. No entanto, não acredito que exista tal função no kit de ferramentas de script de shell padrão.
No entanto, você pode criar um simples, com uma linha única:
abspath() {
{ [[ "$1" =~ ^/ ]] && echo "$1" || echo "$(pwd)/$1"; } | sed -r ':. s#(/|^)\./##g; t .; :: s#[^/]{1,}/\.\./##; t :'
}
foo_dir=$(dirname $(abspath $0))
Acredito que isso seja totalmente genérico e funcione para caminhos que contenham qualquer quantidade de ./
e ../
.
Ele usa expressões regulares um pouco,