To zależy. W zshmożna skonfigurować cddo pchania starego katalogu do katalogu stos automatycznie, ale to ustawienie domyślne nie jest.
O ile mogę stwierdzić zshprzy ustawieniach domyślnych zachowuje się bardzo podobnie do bash:
cd somedir
- zmień katalog na
somedir
- zapisz oryginalny katalog w
OLDPWD
- zestaw
PWD="somedir"
- zamień górny element stosu katalogu (jak pokazano przez
dirs) na somedir(liczba elementów na stosie nie zmienia się).
cd -:
- zmień katalog na
$OLDPWD
- Zamień wartości
PWDiOLDPWD
- zmodyfikuj górny element stosu katalogów, aby odzwierciedlał (nowy)
PWD
pushd somedir:
- zmień katalog na
somedir
- zapisz oryginalny katalog w
OLDPWD
- zestaw
PWD="somedir"
- push
somedirna stos katalogów (rozszerzając go o jeden element)
popd:
- zapisz oryginalny katalog w
OLDPWD
- usuń pierwszy element ze stosu katalogów
- zmień katalog na nowy górny element stosu katalogów
- ustawiony
PWDna nowy najwyższy element stosu katalogów
Uwaga: To, czy obecny katalog roboczy jest uważany za element stosu katalogów, różni się między zshi bash. Użyłem bashjako odniesienia do powyższych list.
W bashobecnym katalogu roboczym jest uważany za najwyższy element stosu katalogów. man 1 bashMówi:
pushd [-n] [dir]
[…] Dodaje dirdo stosu katalogów u góry, czyniąc go nowym bieżącym katalogiem roboczym, tak jakby został dostarczony jako argument do cdwbudowanego. […]
Drukowanie DIRSTACK( echo ${dirstack[@]}) potwierdza, że pierwszy element jest identyczny $PWD.
W zshobecnym katalogu roboczym nie jest częścią stosu katalogów (ale nadal jest pokazany za pomocą dirs). man 1 zshbuiltinsmówi:
pushd [ -qsLP ] [ arg ]
[…] Zmień bieżący katalog i wsuń stary bieżący katalog na stos katalogów. W pierwszej formie zmień bieżący katalog na arg. […]
Drukowanie dirstack( echo ${dirstack[@]}) i porównywanie go z wyjściem dirspowinno pokazać, że PWDnie jest on częścią `dirstack.
W obu powłokach dirsdrukuje obecny katalog roboczy jako pierwszy element. Również w obu powłokach element stosu katalogów z indeksem 1odnosi się do katalogu, który był aktualny przed ostatnim pushd. To dlatego, że w tablice zshsą zazwyczaj ponumerowane od 1, podczas gdy są one ponumerowane od 0w bash. Więc nie ma praktycznej różnicy
Jak wspomniano powyżej, to zachowanie można zmodyfikować w zsh.
Jeśli ustawisz AUTO_PUSHDopcję w zsh( setopt autopushd) cd somedirzachowuje się tak pushd somedir, poprzedni katalog jest automatycznie wypychany na stos katalogów. Prawdopodobnie dzieje się tak na twoim komputerze. Możesz uruchomić, setoptaby uzyskać listę opcji, które nie są ustawione domyślnie. Sprawdź, czy autopushdpojawia się na liście.
Ale to nie zmienia cd -się tak, aby zachowywać się jak popd. Zamiast tego po prostu wypycha $PWDna stos katalogów i zmienia katalog na $OLDPWD. Oznacza to, że wielokrotne wywoływanie cd -spowoduje wzrost stosu katalogów ( ($PWD $OLDPWD $PWD $OLDPWD $PWD …)). Jeśli faktycznie zachowuje się dokładnie tak, jak popdw twoim systemie, sugerowałbym, czy cdtak naprawdę jest on wbudowany ( whence -v cd); możliwe, że został zastąpiony przez alias lub funkcję.
Ponieważ stos katalogów rośnie dość szybko po AUTO_PUSHDwłączeniu, możesz ograniczyć jego rozmiar, ustawiając parametr DIRSTACKSIZEna żądany maksymalny rozmiar.
Można również zapobiec duplikatom, ustawiając tę PUSHD_IGNORE_DUPSopcję.
Więcej opcji znajdziesz w instrukcji .
cdustawia zmienną powłokiOLDPWDna poprzedni katalog icd -zostaje przetłumaczony nacd "$OLDPWD".