Configuração para desenvolvimento e implantação

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.