Speichere das letzte Arbeitsverzeichnis bei der Bash-Abmeldung

7

Ist es möglich, das letzte Arbeitsverzeichnis zu speichern, wenn Sie in bash einen "exit" ausführen? Wenn Sie sich also das nächste Mal anmelden, befindet es sich in dem Verzeichnis, in dem Sie sich zuletzt beim Ausloggen befanden.

    
Verhogen 20.04.2009, 05:46
quelle

6 Antworten

15

Speichern Sie das letzte Arbeitsverzeichnis in ~ ./. bash_logout in eine versteckte Datei:

%Vor%

Lesen Sie diese Datei in ~ / .bashrc mit

%Vor%     
Fritz G. Mehner 20.04.2009, 06:30
quelle
7

Setze dies in deine ~/.bashrc (wahrscheinlich am Ende):

%Vor%

Dann haben Sie die Wahl zwischen:

Entweder in ~/.bash_logout (wird für interaktive Nicht-Login-Shells nicht in das Verzeichnis gespeichert):

%Vor%

Oder verwenden Sie trap für EXIT , fügen Sie dies in Ihre ~/.bashrc ein (Traps können leicht / versehentlich überschrieben werden):

%Vor%

Oder benutze PROMPT_COMMAND , setze dies auf deinen ~/.bashrc (wahrscheinlich der zuverlässigste Weg):

%Vor%

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.

    
lhunath 20.04.2009 06:33
quelle
2

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.

    
Tanktalus 20.04.2009 23:13
quelle
1

Sie können das aktuelle Verzeichnis (pwd) jedes Mal in eine Datei schreiben, wenn Sie das Verzeichnis (cd) ändern. Beim Starten des Terminals sollte das Bash-Start-Skript diese Datei nach "last dir" suchen. Wenn etwas gefunden - CD dazu.

    
Pawka 20.04.2009 05:51
quelle
0

Schauen Sie sich die .bashrc an und vielleicht können Sie sie zum Zeitpunkt der Abmeldung ändern, um das Verzeichnis zu enthalten, an dem Sie interessiert sind.

    
ojblass 20.04.2009 05:59
quelle
0

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:

  1. Geben Sie etwas Code in ~ / .bash_logout ein. Dies wird nur ausgeführt, wenn eine Login-Shell beendet wird. Wenn Sie also nur ein Terminal-Fenster schließen, wird das Verzeichnis nicht gespeichert.
  2. Falle bei EXIT. Mit dem integrierten "Trap" können Sie Code ausführen lassen, wenn die Shell beendet wird. Dies wird ausgeführt, wenn eine Shell beendet wird - nun, jede Shell, in der Sie die Falle eingerichtet haben, dh.

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?

    
camh 20.04.2009 06:05
quelle

Tags und Links