Рекурсивно переопределить rc-файл в bash - PullRequest
0 голосов
/ 06 марта 2012

Это похоже на .htaccess для каталогов.

У меня есть следующее:

Файл: ~ / .myapprc

APP_USER=alagu
APP_DOMAIN=goyaka.com

Файл: ~ / testapp / .myapprc

APP_USER=alagu_test
APP_DOMAIN=localhost

Что я хочу:

[alagu@~ ]$ echo $APP_USER
alagu

[alagu@~ ]$ cd ~/testapp
[alagu@~ ]$ echo $APP_USER
alagu_test

Как мне это сделать?

Ответы [ 3 ]

3 голосов
/ 06 марта 2012

Похоже, вы хотите получать .myapprc всякий раз, когда вы меняете каталог.

Есть два пути, которые вы могли бы использовать - PROMPT_COMMAND и ловушка DEBUG.

Чтобы сделать это с первым, вам нужно один раз выполнить следующее:

PROMPT_COMMAND="[ -f .myapprc ] && . .myapprc"

и со вторым:

trap "[ -f .myapprc ] && . .myapprc" DEBUG

Они будут источником файла один раз для каждого запроса, поэтому, если поиск этого файла стоит дорого, вы можете расширить его, чтобы проверить, изменился ли $PWD.

Вы также можете переопределить cd, но это может нарушить некоторые сценарии оболочки:

alias cd=cd_
function cd_
{
    \cd "$@"
    local ret=$?
    [ -f .myapprc ] && . .myapprc
    return $ret
}

Но делать что-либо из этого на самом деле не очень хорошая идея - эй, вы все огромные дыры в безопасности, так как в конечном итоге вы будете выполнять любые команды в .myapprc в любом текущем рабочем каталоге. .


Позднее редактирование для Joachim - используйте это с решениями PROMPT_COMMAND / trap, чтобы избежать чрезмерного выполнения .myapprc с помощью следующего: PROMPT_COMMAND='if [ -f .myapprc -a "$PWD" != "$PWDLAST" ]; then PWDLAST="$PWD"; source .myapprc; fi'


2 голосов
/ 06 марта 2012

Вы можете создать в вашем .bashrc функцию, которая переопределяет команду cd:

cd() {
    # "$@" to preserve quoting/whitespace
    builtin cd "$@"
    [ -f ".myapprc" ] && source .myapprc
}
1 голос
/ 06 марта 2012

Вы можете настроить свою среду на основе вашего рабочего каталога с помощью direnv.Это на http://direnv.net.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...