Em um script, entro no $0possível caminho relativo para ele. Para convertê-lo em absoluto, encontrei esta solução que não entendo:
abspath=$(cd ${0%/*} && echo $PWD/${0##*/})
Meu problema é a mágica dentro de ${0%/*}e ${0##*/}. Parece que o primeiro extrai o nome do diretório e o último extrai o nome do arquivo, apenas não entendo como.
dirnameutilitário é útil aqui.
BASH_SOURCEé melhor do que $0, pois $0fornece o comando digitado pelo usuário, que pode não ser o script em execução no momento.
readlink -f $0o caminho canônico.