Führe automatisch ein Skript aus, wenn ich in ein Verzeichnis wechsle

Führe automatisch ein Skript aus, wenn ich in ein Verzeichnis wechsle

Mögliches Duplikat:
Führen Sie Bash-Skripte beim Aufrufen eines Verzeichnisses aus

Ich verwende eine Umgebung, die einige sehr spezielle Toolversionen erfordert. Die Befehle zum Einrichten der Umgebung befinden sich in einem Skript namensset_foo_env.sh

Angenommen, ich habe ein Verzeichnis ~/repository/foo/. Ist es möglich, es auszuführen, set_foo_env.shsobald ich das fooVerzeichnis betrete?

Antwort1

Sie könnten PROMPT_COMMAND verwenden. Der in PROMPT_COMMAND angegebene Code wird ausgeführt, bevor Bash die Eingabeaufforderung zeichnet.

# Call function 'foo'
PROMPT_COMMAND=foo

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

Beachten Sie, dass PROMPT_COMMAND bash-spezifisch ist und dies keine effiziente Methode ist, da die Funktion foo jedes Mal aufgerufen wird, wenn bash die Eingabeaufforderung zeichnet.

Antwort2

Ändern Sie es cdin eine Funktion, um es tatsächlich auszuführen cd, und führen Sie anschließend Ihr Skript aus.

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

Dies setzt Folgendes voraus:

  1. Das set_foo_env.shwäre spezifisch für ein einzelnes Verzeichnis und
  2. Dadurch set_foo_env.shsollte die Umgebung der vorhandenen Shell geändert werden.

Wenn Sie pfadbasiert mit einer globalen Datei möchten, dann schauen Sie sich die Frage an, die manatwork erwähnt hat (Führen Sie Bash-Skripte beim Aufrufen eines Verzeichnisses aus).

verwandte Informationen