Para obter o diretório no qual o script está localizado, use:
readlink -f $(dirname $0)
Como dito na man page bash, $0
está configurado para o nome do arquivo.
readlink -f
obtém o caminho absoluto desse diretório.
Eu tenho um script aqui:
$GOPATH/
src/
build.sh
e no build.sh eu tenho:
export GOPATH="$(cd $(dirname "$BASH_SOURCE") && pwd)"
existe uma maneira mais curta de obter o diretório contendo build.sh?
Para obter o diretório no qual o script está localizado, use:
readlink -f $(dirname $0)
Como dito na man page bash, $0
está configurado para o nome do arquivo.
readlink -f
obtém o caminho absoluto desse diretório.
Estendendo a ideia BASH_SOURCE, verifique se ela contém um caminho absoluto; em caso afirmativo, use-o diretamente, caso contrário, preencha o PWD. Depois, retire a barra final e qualquer coisa depois dela, deixando apenas o diretório que contém:
case ${BASH_SOURCE[0]} in
( /* )
p=${BASH_SOURCE[0]}
;;
( * )
p=${PWD}/${BASH_SOURCE[0]}
;;
esac
p=${p%/*}
printf "%s\n" "$p"