Use ${BASH_SOURCE[-1]}
:
script_dir=$( dirname "$( readlink -f "${BASH_SOURCE[-1]}" )" )
Esta é uma matriz que contém os arquivos de origem para a pilha de chamadas da função shell atual, e o último elemento dela será a origem do script principal.
Isso deve funcionar independentemente de o script ser originado com source
ou não.
A versão específica de bash
que você está usando é a versão 4.2.1. Índices negativos em matrizes (referências do final da matriz) foram adicionados na versão 4.3. Para obter o mesmo efeito de usar ${BASH_SOURCE[-1]}
em uma versão pré-4.3 de bash
, use
${BASH_SOURCE[ ${#BASH_SOURCE[@]} - 1 ]}