Tergantung. Di zshAnda dapat mengkonfigurasi cduntuk mendorong direktori lama pada tumpukan direktori secara otomatis, tetapi itu bukan pengaturan default.
Sejauh yang saya tahu zshdengan pengaturan standar berperilaku sangat mirip dengan bash:
cd somedir
- ubah direktori menjadi
somedir
- simpan direktori asli di
OLDPWD
- set
PWD="somedir"
- ganti elemen atas tumpukan direktori (seperti yang ditunjukkan oleh
dirs) dengan somedir(jumlah elemen pada tumpukan tidak berubah).
cd -:
- ubah direktori menjadi
$OLDPWD
- nilai swap dari
PWDdanOLDPWD
- memodifikasi elemen atas tumpukan direktori untuk mencerminkan (yang baru)
PWD
pushd somedir:
- ubah direktori menjadi
somedir
- simpan direktori asli di
OLDPWD
- set
PWD="somedir"
- mendorong
somedirke tumpukan direktori (memperluasnya dengan satu elemen)
popd:
- simpan direktori asli di
OLDPWD
- hapus elemen pertama dari tumpukan direktori
- ubah direktori ke elemen teratas baru dari tumpukan direktori
- setel
PWDke elemen teratas baru dari tumpukan direktori
Catatan: Apakah direktori kerja saat ini dianggap sebagai elemen tumpukan direktori berbeda antara zshdan bash. Saya digunakan bashsebagai referensi untuk daftar di atas.
Dalam bashdirektori kerja ini dianggap sebagai elemen teratas dari tumpukan direktori. The man 1 bashmengatakan:
pushd [-n] [dir]
[…] Menambahkan dirke tumpukan direktori di bagian atas, menjadikannya direktori kerja baru saat ini seolah-olah telah disediakan sebagai argumen ke cdbuiltin. [...]
Mencetak DIRSTACK( echo ${dirstack[@]}) mengonfirmasi bahwa elemen pertama identik dengan $PWD.
Dalam zshdirektori kerja sekarang bukan bagian dari tumpukan direktori (tetapi masih ditunjukkan dengan dirs). man 1 zshbuiltinsmengatakan:
pushd [ -qsLP ] [ arg ]
[…] Ubah direktori saat ini, dan dorong direktori lama saat ini ke tumpukan direktori. Dalam bentuk pertama, ubah direktori saat ini menjadi arg. [...]
Mencetak dirstack( echo ${dirstack[@]}) dan membandingkannya dengan output dirsharus menunjukkan bahwa PWDitu bukan bagian dari `dirstack.
Dalam kedua shell dirsmencetak direktori yang berfungsi sekarang sebagai elemen pertama. Juga di kedua cangkang, elemen tumpukan direktori dengan indeks 1merujuk ke direktori yang saat ini sebelum yang terakhir pushd. Itu karena array dalam zshbiasanya diberi nomor dari 1, sedangkan mereka dinomori dari 0dalam bash. Jadi ada sedikit perbedaan praktis
Seperti dikatakan di atas, perilaku ini dapat dimodifikasi di zsh.
Jika Anda mengatur AUTO_PUSHDopsi di zsh( setopt autopushd) cd somedirberperilaku seperti pushd somedir, direktori sebelumnya didorong ke tumpukan direktori secara otomatis. Ini mungkin terjadi pada mesin Anda. Anda dapat menjalankan setoptuntuk mendapatkan daftar opsi yang tidak diatur dengan cara default. Lihat, apakah autopushdmuncul dalam daftar.
Tapi ini tidak berubah cd -untuk berperilaku seperti popd. Sebaliknya itu hanya mendorong $PWDke tumpukan direktori, dan mengubah direktori menjadi $OLDPWD. Itu berarti berulang kali menelepon cd -sebenarnya akan menumbuhkan tumpukan direktori ( ($PWD $OLDPWD $PWD $OLDPWD $PWD …)). Jika itu benar-benar berperilaku persis seperti popdpada sistem Anda, saya akan menyarankan jika cdsebenarnya adalah builtin ( whence -v cd); mungkin saja diganti dengan alias atau fungsi.
Karena tumpukan direktori akan tumbuh lebih cepat dengan AUTO_PUSHDdiaktifkan, Anda dapat membatasi ukurannya dengan mengatur parameter DIRSTACKSIZEke ukuran maksimum yang diinginkan.
Anda juga dapat mencegah duplikat dengan mengatur PUSHD_IGNORE_DUPSopsi.
Untuk opsi lebih lanjut lihat manual .
cdset variabel shellOLDPWDke direktori sebelumnya, dancd -diterjemahkan kecd "$OLDPWD".