Verzeichnis im Terminal ändern, wenn der Arbeitsordner in den Papierkorb verschoben wurde (in der interaktiven Shell)?

Also arbeite ich gelegentlich in zsh, in einer interaktiven Shell, und wechsle zum Finder (oder Path Finder) und werfe dort den Ordner, das ist das aktuelle Arbeitsverzeichnis im Terminal, in den Papierkorb. Ich werde dann später für etwas anderes zur Shell zurückkehren und feststellen, dass sich die Shell immer noch in dem jetzt gelöschten Ordner befindet.

Gibt es eine Möglichkeit, wie zsh herausfinden kann, dass, wenn sich der übergeordnete Ordner des Ordners in ".Trash" geändert hat, er beispielsweise sein Verzeichnis ändern sollte (in meinem Fall idealerweise in den Desktop-Ordner)? Aber dass es dies nur in einer interaktiven Shell tun sollte, im Gegensatz zu einem Shell-Skript oder einer anderen App?

Ich kann googeln und implementieren, bin aber nicht in der Lage, die richtigen Begriffe zu finden, und bin eher das, was ich einen Spleißer oder Klatscher nenne, als irgendein richtiger Programmierer. In der Hoffnung, dass jemand schon einmal in diese Richtung gedacht hat.

Antworten (1)

Nein, Zsh kann dies nicht automatisch bemerken, wenn Sie es nicht aktiv verwenden.

Aber was spielt es für eine Rolle? Sie können einfach eingeben, cdum zu Ihrem Home-Ordner zurückzukehren.

Aktualisieren

In Ordnung, hier ist eine echte Lösung, die ich getestet habe und die funktioniert. Danke an @nohillside für die Ermutigung!

autohome() {
  # If the present working dir doesn't exist...
  if [[ ! -d $PWD ]]; then
    # Go back to ~
    cd $HOME

    # If the line editor is active, redraw the prompt.
    zle && zle .reset-prompt
  fi
}

# This will call the function above as soon as you start typing.
autoload -Uz add-zle-hook-widget
add-zle-hook-widget line-pre-redraw autohome
PROMPT_COMMANDHmm, man könnte den tatsächlichen Strompfad in oder PS1(oder was auch immer zshdafür hat) überprüfen und eine Meldung in der Eingabeaufforderung anzeigen.
@nohillside Nicht ohne zuerst Benutzereingaben zu erhalten. Zsh kann nicht sagen, ob ein Terminalfenster wieder "aktiv" wird, es sei denn, der Benutzer gibt tatsächlich etwas ein.
@nohillside In Ordnung, ich habe meiner Antwort eine Lösung hinzugefügt, die genau das tut.