Wie verwaltet man die Verzeichnisliste "dirs -v" vom "alten" Terminal, wenn ein neues geöffnet wird?

424
oksage

Ich habe gerade mit dir, Pushd und Popd gespielt. Hinzufügen / Navigieren im Verzeichnis mit pushd, Verwenden von dirs -v zum Anzeigen einer vertikalen Liste des Verzeichnisses 'stack' und popd zum Entfernen eines Eintrags aus der Liste. Wenn ich ein neues Terminal öffne und die Verzeichnisse mit dir oder dir -v auflisten, wird im neuen Terminal nur das aktuelle Verzeichnis angezeigt. Gibt es eine Möglichkeit, die Liste beim Öffnen eines neuen Terminals zu übertragen? Ich bin auf Debian Stretch mit xfce4-Terminal.

1

1 Antwort auf die Frage

1
meuh

Sie können die Liste der Verzeichnisse in einer Datei speichern, eines pro Zeile, und sie in der neuen Shell wiederherstellen, indem Sie sie pushdin jeder Zeile wiederholt ausführen . Dies setzt voraus, dass Sie keine Verzeichnisse mit Zeilenumbrüchen im Namen haben.

bash hat zwar eine eingebaute Variable DIRSTACK, die die Liste der Verzeichnisse enthält, aber leider ist dies nicht von großem Nutzen, da Sie diesem Array keine neuen Elemente hinzufügen können (obwohl Sie vorhandene Einträge ändern können).

So speichern Sie die Liste einfach

dirs -p >~/mydirs 

Das Wiederherstellen ist etwas komplexer. Zuerst lesen wir die Datei in ein Array vund durchlaufen sie dann in umgekehrter Reihenfolge, bis Eintragsindex 1 angezeigt wird. Ich habe bei Index 1 gestoppt und nicht bei 0, da der 0. Eintrag zum aktuellen Zeitpunkt nur das aktuelle Verzeichnis ist dirs -p. Sie können wählen, ob Sie dies möchten oder nicht.

dirs -c # clear IFS=$'\n' read -r -d '' -a v <~/mydirs for ((i=${#v[*]}-1; i>=1; i--)) do pushd -n "$" >/dev/null done 

Es wäre sinnvoll, diesen Code in einer Bash - Funktion zu speichern und von Ihrem aus aufzurufen ~/.bashrc.