Es hängt davon ab, ob. In können zsh
Sie konfigurieren cd
, dass das alte Verzeichnis automatisch auf den Verzeichnisstapel verschoben wird, dies ist jedoch nicht die Standardeinstellung.
Soweit ich zsh
mit Standardeinstellungen feststellen kann, verhält sich das sehr ähnlich wie bash
:
cd somedir
- Verzeichnis wechseln zu
somedir
- Speichern Sie das ursprüngliche Verzeichnis in
OLDPWD
- einstellen
PWD="somedir"
- Ersetzen Sie das oberste Element des Verzeichnisstapels (wie durch dargestellt
dirs
) durch somedir
(die Anzahl der Elemente auf dem Stapel ändert sich nicht).
cd -
:
- Verzeichnis wechseln zu
$OLDPWD
- Swap-Werte von
PWD
undOLDPWD
- Ändern Sie das oberste Element des Verzeichnisstapels, um es wiederzugeben (das neue).
PWD
pushd somedir
:
- Verzeichnis wechseln zu
somedir
- Originalverzeichnis speichern in
OLDPWD
- einstellen
PWD="somedir"
somedir
auf den Verzeichnisstack schieben (um ein Element erweitern)
popd
:
- Originalverzeichnis speichern in
OLDPWD
- Entfernen Sie das erste Element des Verzeichnisstapels
- Wechseln Sie in das neue oberste Element des Verzeichnisstapels
- setzt
PWD
auf das neue Top-Element des Verzeichnisstapels
Hinweis: Ob das aktuelle Arbeitsverzeichnis als Element des Verzeichnisstapels betrachtet wird, unterscheidet sich zwischen zsh
und bash
. Ich habe bash
als Referenz für die obigen Listen verwendet.
Im bash
vorliegenden Arbeitsverzeichnis gilt es als oberstes Element des Verzeichnisstapels. Der man 1 bash
sagt:
pushd [-n] [dir]
[…] Fügt dir
es dem Verzeichnisstapel oben hinzu und macht es zum neuen aktuellen Arbeitsverzeichnis, als ob es als Argument für das cd
eingebaute Verzeichnis angegeben worden wäre. […]
Durch Drucken von DIRSTACK
( echo ${dirstack[@]}
) wird bestätigt, dass das erste Element mit identisch ist $PWD
.
Im zsh
jetzigen Arbeitsverzeichnis ist es nicht Teil des Verzeichnisstacks (wird aber trotzdem mit angezeigt dirs
). man 1 zshbuiltins
sagt:
pushd [ -qsLP ] [ arg ]
[…] Ändern Sie das aktuelle Verzeichnis und verschieben Sie das alte aktuelle Verzeichnis in den Verzeichnisstapel. Ändern Sie im ersten Formular das aktuelle Verzeichnis in arg. […]
Drucken dirstack
( echo ${dirstack[@]}
) und Vergleichen mit der Ausgabe von dirs
sollte zeigen, dass das PWD
nicht Teil von `dirstack ist.
In beiden Shells wird dirs
das aktuelle Arbeitsverzeichnis als erstes Element gedruckt. Auch in beiden Shells 1
verweist das Verzeichnisstapelelement mit dem Index auf das Verzeichnis, das vor dem letzten aktuell war pushd
. Das liegt daran, dass Arrays in zsh
normalerweise von nummeriert werden 1
, während sie von 0
in nummeriert werden bash
. Es gibt also kaum einen praktischen Unterschied
Wie oben erwähnt, kann dieses Verhalten in geändert werden zsh
.
Wenn Sie die eingestellte AUTO_PUSHD
Option zsh
( setopt autopushd
) cd somedir
verhält sich wie pushd somedir
wird das vorherige Verzeichnis auf das Verzeichnis - Stack automatisch geschoben. Dies ist wahrscheinlich auf Ihrem Computer der Fall. Sie können ausführen setopt
, um eine Liste der Optionen abzurufen, die nicht standardmäßig festgelegt sind. Prüfen Sie, ob autopushd
in der Liste angezeigt wird.
Dies ändert sich aber nicht, um sich so cd -
zu verhalten popd
. Stattdessen wird einfach $PWD
auf den Verzeichnisstapel geschoben und das Verzeichnis in geändert $OLDPWD
. Das bedeutet, dass durch wiederholtes Aufrufen cd -
der Verzeichnisstapel ( ($PWD $OLDPWD $PWD $OLDPWD $PWD …)
) vergrößert wird . Wenn es sich tatsächlich genauso verhält wie popd
auf Ihrem System, würde ich vorschlagen, ob cd
es sich tatsächlich um das builtin ( whence -v cd
) handelt. Möglicherweise wird es durch einen Alias oder eine Funktion ersetzt.
Da der Verzeichnisstapel bei AUTO_PUSHD
aktivierter Option relativ schnell wächst , können Sie seine Größe begrenzen, indem Sie den Parameter DIRSTACKSIZE
auf die gewünschte maximale Größe einstellen .
Sie können Duplikate auch verhindern, indem Sie die PUSHD_IGNORE_DUPS
Option aktivieren.
Weitere Optionen finden Sie im Handbuch .
cd
setzt die Shell-VariableOLDPWD
auf das vorherige Verzeichnis undcd -
wird in übersetztcd "$OLDPWD"
.