Wie kann man „dirs“ dazu bringen, den gesamten DIRSTACK aus einem Skript aufzulisten?

Wie kann man „dirs“ dazu bringen, den gesamten DIRSTACK aus einem Skript aufzulisten?

Mein Testskript:

#!/bin/bash
dirs -p >> work_note.txt

In einem Stapel von 10 Verzeichnissen erhalte ich nur das oberste 1 zurück. Wenn ich es ausführe dirs -poder dirs -vdie Befehlszeile verwende, erhalte ich den gesamten Stapel.

Ich bin für alle Tipps und Informationen zu dem, was mir fehlt, dankbar.

NOTIZ Mein Hauptziel ist es, einen Abmeldevorgang zu erstellen, der den DIRSTACK in eine Datei schreibt, damit ich mich an die Arbeit erinnern kann, die ich in einem Terminal erledigt habe. Normalerweise habe ich mehrere Terminals in Betrieb.

Antwort1

Dies DIRSTACKist eine lokale Variable und wird nicht an Skripte, Subshells, Kindprozesse usw. übergeben. Ich empfehle die Verwendung einer in Ihr geladenen Funktion .bashrcanstelle eines Skripts.

Antwort2

Ich habe diesen Trick verwendet, um meinen Verzeichnisstapel bei jeder Sitzung abzurufen. Normalerweise habe ich ihn in einer Datei gespeichert. Ich kann ihn auch in andere Terminals importieren/exportieren.

Definieren Sie diese Funktion in Ihrer .bashrc

stackd () 
{ 
    SAVEIFS=$IFS;
    IFS=$(echo -en "\n\b");
    builtin cd $@ && builtin pushd "$PWD" > /dev/null;
    dirs -l -p >> $HOME/.iostackd/dirstack && sort -u -o $HOME/.iostackd/dirstack $HOME/.iostackd/dirstack > /dev/null;
    IFS=$SAVEIFS
}

Überladen Sie Ihre eingebaute CD mit Alias

alias cd='stackd "$1"'

verwandte Informationen