Normalmente, um projeto tem uma variável de ambiente como INSTALL ROOT, PROJECT HOME. Ao controlar como essas variáveis são definidas, os scripts podem ser escritos com raízes de diretório relocáveis. Dentro de um projeto em check-out, essas variáveis podem ser padronizadas para algo relativo ao diretório atual. Quando usado em outro projeto, pode estar em qualquer lugar.
Usando meu projeto macports como exemplo, MACPORTS controla onde o comando port e as portas são instaladas. Um bom padrão para desenvolvimento em uma área de trabalho git é “$ (pwd) / local”:
: ${MACPORTS:="$(cd -P -- "$(dirname -- "${BASH_SOURCE}")/.." && pwd -P)/install"}
O restante dos scripts sempre faz referência a $ MACPORTS para que meus macports possam construir portas em qualquer lugar. No meu diretório inicial, posso implantar o projeto macports (localizado em .macports) em “$ HOME / local” simplesmente configurando MACPORTS.
export MACPORTS="$HOME/local"
$HOME/.macports/bin/build ports
Além de uma var de instalação como $ MACPORTS, há uma var semelhante para home do projeto, que chamo de $ shome; é apenas para desenvolvimento. É calculado de forma semelhante a $ MACPORTS e assume que os scripts estão localizados em um subdiretório como bin, libexec, etc.
shome=""$(cd -P -- "$(dirname -- "${BASH_SOURCE}")/.." && pwd -P)"
Ao contrário de MACPORTS, shome não é um padrão, pois não é realocável. Ao qualificar totalmente todo o acesso do projeto com $ shome, posso usar qualquer um dos seguintes para executar o script de compilação:
bin/build
cd bin; ./build
cd; ~/.macports/bin/build
Usar $ BASH SOURCE em vez de $ 0 me permite definir e usar shome em um script originado em .bashrc. Meus projetos têm um bin / perfil que é fornecido para alterar PATHs, configurar aliases, definir funções. Ajuda saber onde bin / _profile está no caso de eu querer originar outros scripts e configurações relativas ao projeto. $ 0, quando fonte, retorna inutilmente -bash.