Escreva o seguinte script:
#!/bin/sh
projdir1="$HOME/project/aardvark"
playdir1=/bin/play1.2.4
projdir2="$HOME/project/battlestar"
playdir2=/bin/play2.2.0
︙
case "$PWD" in
"$projdir1" | "$projdir1"/*)
export PATH="$playdir1":"$PATH"
;;
"$projdir2" | "$projdir2"/*)
export PATH="$playdir2":"$PATH"
;;
︙
*)
echo "I don't know which version of \"play\" to use in $PWD"
exit 1
esac
exec $(basename "$0") "$@"
Coloque no diretório bin
com o nome play
,
com links para os nomes de outros comandos que residem no diretório play
(caso existam).
Agora você pode simplesmente digitar o comando que você quer,
e o script descobrirá qual versão será executada.
(É claro que seu diretório bin
privado deve ocorrer perto do início de seu PATH
,
antes de qualquer jogo! Diretórios do Framework.)
Se você quiser digitar comandos como
play project/aardvark/foo
enquanto estiver no seu diretório pessoal, isso precisará de um pouco mais de trabalho. Se você quer ser capaz de fazer
play ../battlestar/bar
enquanto em projects/aardvark
, isso será um pouco mais difícil.
Uma desvantagem do acima é que exige que o script play
, no diretório bin
,
deve ser atualizado sempre que você definir um novo projeto (ou redefinir um antigo).
Aqui está uma abordagem que permite localizar as informações de configuração
nos diretórios do projeto:
#/bin/sh
case "$PWD" in
"$HOME"/*)
# OK
;;
*)
echo "This script should be used only within your home directory tree."
exit 1
esac
rcfile=".playrc"
while [ ! -f "$rcfile" ]
do
rcfile="../$rcfile"
done
. "$rcfile"
exec $(basename "$0") "$@"
Em seguida, coloque um arquivo .playrc
em cada diretório-raiz do projeto, dizendo
export PATH="play_dir_for_this_project":"$PATH"
e coloque um arquivo .playrc
em seu diretório pessoal, dizendo
echo "You aren’t in a \"play\" project directory."
exit 1
como backstop. Melhor tratamento de erros pode ser adicionado e é deixado como um exercício.