Eles devem funcionar da mesma forma, desde que não haja links simbólicos (na expansão do caminho ou no próprio script):
-
MYDIR="$(dirname "$(realpath "$0")")" -
MYDIR="$(dirname "$(which "$0")")" -
Uma versão em dois passos de qualquer um dos itens acima:
MYSELF="$(realpath "$0")"MYDIR="${MYSELF%/*}"
Se houver um link simbólico no caminho para seu script, which fornecerá uma resposta sem incluir a resolução desse link. Se realpath não estiver instalado por padrão no seu sistema, você pode encontrá-lo aqui .
[EDITAR]: parece que realpath não tem vantagem sobre readlink -f sugerido pelo Caleb , provavelmente é melhor usar o último. Meus testes de tempo indicam que é realmente mais rápido.