Değişir. Içinde dizin dizinindeki eski dizini otomatik olarak itmek için zsh
yapılandırabilirsiniz cd
, ancak bu varsayılan ayar değildir.
Bildiğim kadarıyla zsh
varsayı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
PWD
veOLDPWD
- 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"
somedir
dizin 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
PWD
dizin yığınının yeni üst öğesine ayarlanır
Not: Mevcut çalışma dizininin dizin yığının bir öğesi olarak kabul zsh
edilip edilmemesi ve arasında farklılık gösterir bash
. bash
Yukarı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 bash
diyor ki:
pushd [-n] [dir]
[…] dir
Üstteki dizin yığınına ekler ve yeni mevcut çalışma dizini cd
yerleş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 zshbuiltins
diyor:
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ı dirs
göstermelidir PWD
.
Her iki kabukta dirs
da 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 zsh
genellikle '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_PUSHD
seçeneği zsh
( setopt autopushd
) cd somedir
davranacağını gibi pushd somedir
, önceki dizin otomatik dizin depo üzerine itilir. Muhtemelen makinenizdeki durum budur. setopt
Varsayılan şekilde ayarlanmamış seçeneklerin bir listesini almak için çalıştırabilirsiniz . autopushd
Listede görünüp görünmediğine bakın .
Ancak bu, cd -
davranış gibi değişmez popd
. Bunun yerine sadece $PWD
dizin 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 popd
sisteminizdeki 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_PUSHD
etkinleştirildiğinde oldukça hızlı büyüyeceğinden , parametreyi DIRSTACKSIZE
istenen 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 .
cd
kabuk değişkeniniOLDPWD
önceki dizine ayarlar vecd -
çevrilircd "$OLDPWD"
.