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.sh
sobald ich das foo
Verzeichnis 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 cd
in 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:
- Das
set_foo_env.sh
wäre spezifisch für ein einzelnes Verzeichnis und - Dadurch
set_foo_env.sh
sollte 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).