Não posso comentar outra resposta, por isso estou postando aqui. Como dito, dirname
apenas lê $0
e pega o nome do diretório, então se você chamou algo como ../../directory/something.sh
ele não resolve esses pontos, mas apenas retorna ../../directory
. Em vez de usar a expansão subshell com cd
e pwd
, você pode usar um comando muito inteligente readlink
que realmente resolve não apenas diretórios pontilhados, mas também todos os links simbólicos. Portanto, sugiro
echo "I am located at $(readlink -e -- "$0")"
Você pode usar outro dirname
em torno disso para obter o diretório em vez do arquivo.