Değişir. Içinde dizin dizinindeki eski dizini otomatik olarak itmek için zshyapılandırabilirsiniz cd, ancak bu varsayılan ayar değildir.
Bildiğim kadarıyla zshvarsayılan ayarları ile söyleyebilirim çok benzer davranır bash:
cd somedir
- dizini olarak değiştir
somedir
- orijinal dizini kaydet
OLDPWD
- Ayarlamak
PWD="somedir"
- dizin yığınının üst öğesini (ile gösterildiği gibi
dirs) somedir(yığındaki öğe sayısı değişmez) ile değiştirin.
cd -:
- dizini olarak değiştir
$OLDPWD
- takas değerleri
PWDveOLDPWD
- dizin yığınının üst öğesini yansıtacak şekilde değiştirmek (yeni)
PWD
pushd somedir:
- dizini olarak değiştir
somedir
- orijinal dizini kaydet
OLDPWD
- Ayarlamak
PWD="somedir"
somedirdizin yığınının üzerine itin (bir öğe genişleterek)
popd:
- orijinal dizini kaydet
OLDPWD
- dizin yığınının ilk öğesini kaldır
- dizini dizin yığınının yeni üst öğesine değiştir
PWDdizin yığınının yeni üst öğesine ayarlanır
Not: Mevcut çalışma dizininin dizin yığının bir öğesi olarak kabul zshedilip edilmemesi ve arasında farklılık gösterir bash. bashYukarıdaki listeler için referans olarak kullandım .
Olarak bash, bu çalışma dizini dizin yığının üst eleman olarak kabul edilmektedir. man 1 bashdiyor ki:
pushd [-n] [dir]
[…] dirÜstteki dizin yığınına ekler ve yeni mevcut çalışma dizini cdyerleşik olarak argüman olarak sağlanmış gibi yapar . [...]
Printing DIRSTACK( echo ${dirstack[@]}), ilk öğenin aynı olduğunu onaylar $PWD.
Olarak zsh, bu çalışma dizini dizin yığınının parçası (ama yine de gösterilen değildir dirs). man 1 zshbuiltinsdiyor:
pushd [ -qsLP ] [ arg ]
[…] Geçerli dizini değiştirin ve eski geçerli dizini dizin yığınına itin. İlk formda, geçerli dizini arg olarak değiştirin. [...]
Yazdırma dirstack( echo ${dirstack[@]}) ve çıktı ile karşılaştırılması dirstack'ın bir parçası olmadığını dirsgöstermelidir PWD.
Her iki kabukta dirsda mevcut çalışma dizinini ilk öğe olarak yazdırır. Ayrıca her iki kabukta, dizini içeren dizin yığını öğesi 1, sondan önceki geçerli dizine başvurur pushd. Bunun nedeni, içindeki diziler zshgenellikle 'den' 1, 'den 0' olarak numaralandırılır bash. Yani pratikte çok az fark var
Yukarıda belirtildiği gibi, bu davranış değiştirilebilir zsh.
Eğer ayarlarsanız AUTO_PUSHDseçeneği zsh( setopt autopushd) cd somedirdavranacağını gibi pushd somedir, önceki dizin otomatik dizin depo üzerine itilir. Muhtemelen makinenizdeki durum budur. setoptVarsayılan şekilde ayarlanmamış seçeneklerin bir listesini almak için çalıştırabilirsiniz . autopushdListede görünüp görünmediğine bakın .
Ancak bu, cd -davranış gibi değişmez popd. Bunun yerine sadece $PWDdizin yığınına iter ve dizini olarak değiştirir $OLDPWD. Bu, art arda çağırmanın cd -aslında dizin yığınını ( ($PWD $OLDPWD $PWD $OLDPWD $PWD …)) büyüteceği anlamına gelir . Aslında tam olarak popdsisteminizdeki gibi davranıyorsa cd, aslında builtin ( whence -v cd) olup olmadığını öneririm ; bir takma ad veya işlevle değiştirilmesi mümkündür.
Dizin yığını AUTO_PUSHDetkinleştirildiğinde oldukça hızlı büyüyeceğinden , parametreyi DIRSTACKSIZEistenen maksimum boyuta ayarlayarak boyutunu sınırlayabilirsiniz . Seçeneği
ayarlayarak kopyaları da engelleyebilirsiniz PUSHD_IGNORE_DUPS.
Daha fazla seçenek için kılavuza bakınız .
cdkabuk değişkeniniOLDPWDönceki dizine ayarlar vecd -çevrilircd "$OLDPWD".