Автоматически запускать скрипт при переключении в каталог

Автоматически запускать скрипт при переключении в каталог

Возможный дубликат:
Выполнять 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
}

Это предполагает, что:

  1. Они set_foo_env.shбудут специфичны для отдельных каталогов, и
  2. Это set_foo_env.shдолжно изменить среду существующей оболочки.

Если вам нужен глобальный файл на основе пути, то посмотрите вопрос, упомянутый manatwork (Выполнять bash-скрипты при входе в каталог).

Связанный контент