Speichern Sie das letzte Arbeitsverzeichnis in ~ ./. bash_logout in eine versteckte Datei:
%Vor%Lesen Sie diese Datei in ~ / .bashrc mit
%Vor% Setze dies in deine ~/.bashrc
(wahrscheinlich am Ende):
Dann haben Sie die Wahl zwischen:
Entweder in ~/.bash_logout
(wird für interaktive Nicht-Login-Shells nicht in das Verzeichnis gespeichert):
Oder verwenden Sie trap
für EXIT
, fügen Sie dies in Ihre ~/.bashrc
ein (Traps können leicht / versehentlich überschrieben werden):
Oder benutze PROMPT_COMMAND
, setze dies auf deinen ~/.bashrc
(wahrscheinlich der zuverlässigste Weg):
Stellen Sie außerdem sicher, dass Ihre ~/.profile
oder ~/.bash_profile
Ihre ~/.bashrc
als Quelle verwendet, da der Pfad ansonsten nicht wiederhergestellt wird, wenn die Login-Shells gestartet werden.
Siehe Ссылка für Informationen darüber, wie Sie Ihre dotfiles verwenden sollten.
Sie müssen auch mit diesem ganzen Konzept vorsichtig sein. Wenn Sie zum Beispiel Ihren Code ausführen lassen, wenn Sie nicht erwarten, kann das viele Dinge verwirren.
Wenn Sie beispielsweise ein Shell-Skript ausführen, das das aktuelle Arbeitsverzeichnis geändert hat und dann beim Beenden die CWD-Datei gespeichert hat, können Sie in der nächsten Shell, die gestartet wird, in einem Verzeichnis landen erwarte nicht.
Ein anderer beliebter Begriff, zumindest für mich bei $ work, ist, wenn ein Skript ausgeführt wird, wenn der Benutzer root su hat, um ein Skript auszuführen, alles automatisch (d. h. programmgesteuert). Wenn Sie diesen CWD-Trick für Ihren eigenen Benutzer ausführen, ist das in Ordnung, aber es kann mit System-Tools, die erwarten, dass "su-youruser -c ls" die Dateien in Ihrem Home-Verzeichnis zurückgibt, erheblich vermasseln. (Ok, rufen Sie "ls" auf, da Ihr Benutzer eine dumme Idee ist, aber es gibt Dinge, wo Ihr Benutzer eine bessere Umgebung zum Ausführen von etwas als root hat - z. B. auf NFS-Mounts, die root zerquetscht haben.)
Also, der Schlüssel hier ist zu sagen, ob Sie in einer interaktiven Shell sind oder nicht, und wenn nicht, nicht wiederherstellen oder speichern Sie Ihre CWD . IIRC, $ - hat ein 'i' für interaktive Shells. Verwenden Sie es zum Setzen der Falle und zum Wiederherstellen der CWD.
Persönlich habe ich nur einen Alias gesetzt:
%Vor%und dann überprüft go.sh einfach seinen Parameter für welches Verzeichnis ich gehen möchte. Beispielsweise wird "go myproj" cd ~ / svn / myproj und "go bigdisk" wird cd / mnt / bigdisk. Und für komplexere Fälle kann es mehr Parameter erfordern, z. B. "go myproj lib" würde nur "cd ~ / svn / myproj / myproj / lib" oder was auch immer sein. Kein automatisches Speichern, aber keine der folgenden Nebenwirkungen.
Wahrscheinlich möchten Sie das aktuelle Verzeichnis in einer Datei speichern, wenn die Shell beendet wird. Es gibt eine Reihe von Möglichkeiten, das Shell Exitting zu erkennen:
Sie könnten die CWD bei jeder Eingabeaufforderung oder bei jeder Ausführung von 'cd' speichern, aber das ist ein bisschen zu viel.
Um Ihre CWD beim nächsten Start der Shell wiederherzustellen, müssen Sie einfach 'cd' für den Inhalt Ihrer Sicherungsdatei ausführen, falls sie existiert.
Vielleicht möchten Sie darüber nachdenken, was passieren soll, wenn mehrere Shells gleichzeitig laufen. Welchen möchten Sie den CWD speichern? Sollten alle neuen Shells, die beginnen, diese CWD verwenden? Oder nur gerade die nächste Shell, die startet?