Es hängt davon ab, ob. In können zshSie konfigurieren cd, dass das alte Verzeichnis automatisch auf den Verzeichnisstapel verschoben wird, dies ist jedoch nicht die Standardeinstellung.
Soweit ich zshmit 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
PWDundOLDPWD
- Ä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"
somedirauf 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
PWDauf das neue Top-Element des Verzeichnisstapels
Hinweis: Ob das aktuelle Arbeitsverzeichnis als Element des Verzeichnisstapels betrachtet wird, unterscheidet sich zwischen zshund bash. Ich habe bashals Referenz für die obigen Listen verwendet.
Im bashvorliegenden Arbeitsverzeichnis gilt es als oberstes Element des Verzeichnisstapels. Der man 1 bashsagt:
pushd [-n] [dir]
[…] Fügt dires dem Verzeichnisstapel oben hinzu und macht es zum neuen aktuellen Arbeitsverzeichnis, als ob es als Argument für das cdeingebaute Verzeichnis angegeben worden wäre. […]
Durch Drucken von DIRSTACK( echo ${dirstack[@]}) wird bestätigt, dass das erste Element mit identisch ist $PWD.
Im zshjetzigen Arbeitsverzeichnis ist es nicht Teil des Verzeichnisstacks (wird aber trotzdem mit angezeigt dirs). man 1 zshbuiltinssagt:
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 dirssollte zeigen, dass das PWDnicht Teil von `dirstack ist.
In beiden Shells wird dirsdas aktuelle Arbeitsverzeichnis als erstes Element gedruckt. Auch in beiden Shells 1verweist das Verzeichnisstapelelement mit dem Index auf das Verzeichnis, das vor dem letzten aktuell war pushd. Das liegt daran, dass Arrays in zshnormalerweise von nummeriert werden 1, während sie von 0in 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_PUSHDOption zsh( setopt autopushd) cd somedirverhält sich wie pushd somedirwird 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 autopushdin der Liste angezeigt wird.
Dies ändert sich aber nicht, um sich so cd -zu verhalten popd. Stattdessen wird einfach $PWDauf 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 popdauf Ihrem System, würde ich vorschlagen, ob cdes 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_PUSHDaktivierter Option relativ schnell wächst , können Sie seine Größe begrenzen, indem Sie den Parameter DIRSTACKSIZEauf die gewünschte maximale Größe einstellen .
Sie können Duplikate auch verhindern, indem Sie die PUSHD_IGNORE_DUPSOption aktivieren.
Weitere Optionen finden Sie im Handbuch .
cdsetzt die Shell-VariableOLDPWDauf das vorherige Verzeichnis undcd -wird in übersetztcd "$OLDPWD".