Caminho diferente com base no diretório

3

Estou desenvolvendo um aplicativo usando o Play! Versão do Framework 1.2.4. Então baixei isso e adicionei sua pasta bin/ ao meu caminho.

No entanto, estou me preparando para começar outro Play! Projeto Framework usando a versão 2.2.0, que é uma versão diferente.

Eu não quero apenas mudar meu caminho, porque não poderei trabalhar no meu primeiro projeto.

Considerei o symlinking bin/play para a raiz de cada projeto, mas essa não parece ser a solução correta. Além disso, eu prefiro não ter dois comandos ( play e play2 ) que são aliados para seus respectivos comandos.

Qual é o caminho certo para fazer isso?

    
por eliot 02.02.2014 / 18:59

1 resposta

4

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.

    
por 05.05.2014 / 23:09