3

Я разрабатываю приложение, используя Play! Framework Framework 1.2.4. Поэтому я скачал это и добавил папку bin/ к моему пути.

Тем не менее, я готовлюсь начать новую игру! Каркасный проект использует версию 2.2.0, которая является другой версией.

Я не хочу просто менять свой путь, потому что тогда я не смогу работать над своим первым проектом.

Я рассмотрел символическую ссылку bin/play на корень каждого проекта, но это не похоже на правильное решение. Кроме того, я бы не хотел иметь две команды (play и play2), которые связаны с соответствующими командами.

Как правильно это сделать?

1 ответ1

4

Напишите следующий скрипт:

#!/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") "$@"

Поместите его в каталог bin с именем play , со ссылками на имена любых других команд, которые находятся в каталоге play (если есть).  Теперь вы можете просто набрать нужную команду, и скрипт определит, какую версию запустить.  (Конечно, ваш каталог приватных bin должен находиться в начале вашей PATH , перед любой игрой! Рамки каталогов.)

Если вы хотите ввести такие команды, как

play project/aardvark/foo

в то время как в вашем домашнем каталоге, это потребует немного больше работы.  Если вы хотите быть в состоянии сделать

play ../battlestar/bar

в то время как в projects/aardvark это будет несколько сложнее.


Недостаток вышеупомянутого заключается в том, что сценарий play в каталоге bin должен обновляться всякий раз, когда вы определяете новый проект (или переопределяете старый).  Вот подход, который позволяет локализовать информацию о конфигурации в каталогах проекта:

#/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") "$@"

Затем поместите файл .playrc в корневой каталог каждого проекта, сказав

export PATH="play_dir_for_this_project":"$PATH"

и поместите файл .playrc в свой домашний каталог, говоря

echo "You aren’t in a \"play\" project directory."
exit 1

в качестве отступника.  Лучшая обработка ошибок может быть добавлена и оставлена как упражнение.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .