Executa um script automaticamente quando eu alterno para um diretório [duplicado]

8

Estou executando um ambiente que requer algumas versões de ferramentas muito específicas. Os comandos para configurar o ambiente estão em um script chamado set_foo_env.sh

Suponha que eu tenha um diretório ~/repository/foo/ . É possível executar set_foo_env.sh assim que eu entrar no diretório foo ?

    
por boffin 10.07.2012 / 16:15

2 respostas

6

Você poderia usar PROMPT_COMMAND, o código especificado em PROMPT_COMMAND é executado antes que o bash desenhe o prompt.

# Call function 'foo'
PROMPT_COMMAND=foo

# The function
foo() {
        if [[ $PWD == "$HOME/repository/foo" ]]; then
              set_foo_env.sh  
        fi
}

Note que PROMPT_COMMAND é bash específico, e isto não é uma maneira eficiente porque a função foo será chamada toda vez que bash desenhar o prompt.

    
por 10.07.2012 / 16:22
5

Altere o cd para uma função para executar o cd real e execute seu script posteriormente.

cd () {
    if builtin cd ${1:+"$@"} && [ -r ./set_foo_env.sh ]; then
        . ./set_foo_env.sh
    fi
}

Isso pressupõe que:

  1. O set_foo_env.sh seria específico para um único diretório e
  2. Esse set_foo_env.sh deve alterar o ambiente do shell existente.

Se você deseja baseado em caminho com um arquivo global, observe a pergunta mencionada pelo manatwork ( Executar scripts bash ao entrar em um diretório ).

    
por 10.07.2012 / 17:37