Возможный дубликат:
Выполнять bash-скрипты при входе в каталог
Я запускаю среду, которая требует некоторых очень специфических версий инструментов. Команды для настройки среды находятся в скрипте под названиемset_foo_env.sh
Предположим, у меня есть каталог ~/repository/foo/
. Возможно ли запустить его set_foo_env.sh
сразу после входа в foo
каталог?
решение1
Вы можете использовать PROMPT_COMMAND, код, указанный в PROMPT_COMMAND, будет выполнен до того, как bash отобразит приглашение.
# Call function 'foo'
PROMPT_COMMAND=foo
# The function
foo() {
if [[ $PWD == "$HOME/repository/foo" ]]; then
set_foo_env.sh
fi
}
Обратите внимание, что PROMPT_COMMAND специфичен для bash, и это неэффективный способ, поскольку функция foo будет вызываться каждый раз, когда bash выводит приглашение.
решение2
Измените cd
на функцию, чтобы запустить реальный код cd
и запустить свой скрипт позже.
cd () {
if builtin cd ${1:+"$@"} && [ -r ./set_foo_env.sh ]; then
. ./set_foo_env.sh
fi
}
Это предполагает, что:
- Они
set_foo_env.sh
будут специфичны для отдельных каталогов, и - Это
set_foo_env.sh
должно изменить среду существующей оболочки.
Если вам нужен глобальный файл на основе пути, то посмотрите вопрос, упомянутый manatwork (Выполнять bash-скрипты при входе в каталог).