zsh bietet einige nette Hook-Funktionen , einschließlich chpwdzum Ausführen einer Funktion, nachdem der Benutzer die Verzeichnisse gewechselt hat.
# zsh only
function greet() { echo 'hi'; }
chpwd_functions+=("greet")
cd .. # hi
pushd # hi
popd  # hi
Ich versuche das in Bash zu emulieren.
Einschränkungen:
- Es muss sowohl in interaktiven als auch in nicht interaktiven Shells funktionieren, was meiner Meinung nach bedeutet, dass es sich nicht auf so etwas verlassen kann 
$PROMPT_COMMAND - Es kann nicht neu definiert werden 
cd, da ich möchte, dass es für jeden Befehl funktioniert, der Verzeichnisse ändert (z. B.pushdundpopd). - Es muss nach dem Befehl des Benutzers ausgeführt werden, 
trap "my_function" DEBUGfunktioniert also nicht, es sei denn, ich kann dort irgendwie sagen: "Führen Sie zuerst das, was$BASH_COMMANDwir gefangen haben, dann auch dies aus ..." Ich sehe, dass ich das automatische Ausführen von$BASH_COMMANDif vermeiden kann, wennextdebuges aktiviert ist und die Trap-Funktion gibt 1 zurück, aber ich glaube nicht, dass ich erzwingen möchteextdebug, und die Rückkehr1für einen erfolgreichen (aber geänderten) Befehl scheint falsch. 
Der letzte Teil - "Nach dem Befehl des Benutzers ausführen" - hat mich derzeit verblüfft. Wenn ich nach jedem Befehl eine Funktion ausführen kann , kann ich überprüfen lassen, ob sich das Verzeichnis seit unserer letzten Überprüfung geändert hat. Z.B:
function check_pwd() {
  # true in a new shell (empty var) or after cd
  if [ "$LAST_CHECKED_DIR" != "$PWD" ]; then
    my_function
  fi
  LAST_CHECKED_DIR=$PWD
}
Bin ich auf dem richtigen Weg oder gibt es einen besseren Weg? Wie kann ich einen Befehl in bash ausführen, nachdem der Benutzer die Verzeichnisse geändert hat?
cdgrundsätzlich neu definiert.
                MYBIN=$( cd -P -- "$(dirname -- "$(command -v -- "$0")")" && pwd -P ), ändern Sie bitte nicht die vertrauenswürdigen Unix-Befehle.
                bash, was auf allen Betriebssystemen, auf denen es ausgeführt wird, ziemlich gleich funktioniert.
                
cd,pushdundpopd? Wie viele andere Möglichkeiten gibt es, das Verzeichnis zu wechseln?