Tergantung. Di zsh
Anda dapat mengkonfigurasi cd
untuk mendorong direktori lama pada tumpukan direktori secara otomatis, tetapi itu bukan pengaturan default.
Sejauh yang saya tahu zsh
dengan 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
PWD
danOLDPWD
- 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
somedir
ke 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
PWD
ke elemen teratas baru dari tumpukan direktori
Catatan: Apakah direktori kerja saat ini dianggap sebagai elemen tumpukan direktori berbeda antara zsh
dan bash
. Saya digunakan bash
sebagai referensi untuk daftar di atas.
Dalam bash
direktori kerja ini dianggap sebagai elemen teratas dari tumpukan direktori. The man 1 bash
mengatakan:
pushd [-n] [dir]
[…] Menambahkan dir
ke tumpukan direktori di bagian atas, menjadikannya direktori kerja baru saat ini seolah-olah telah disediakan sebagai argumen ke cd
builtin. [...]
Mencetak DIRSTACK
( echo ${dirstack[@]}
) mengonfirmasi bahwa elemen pertama identik dengan $PWD
.
Dalam zsh
direktori kerja sekarang bukan bagian dari tumpukan direktori (tetapi masih ditunjukkan dengan dirs
). man 1 zshbuiltins
mengatakan:
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 dirs
harus menunjukkan bahwa PWD
itu bukan bagian dari `dirstack.
Dalam kedua shell dirs
mencetak direktori yang berfungsi sekarang sebagai elemen pertama. Juga di kedua cangkang, elemen tumpukan direktori dengan indeks 1
merujuk ke direktori yang saat ini sebelum yang terakhir pushd
. Itu karena array dalam zsh
biasanya diberi nomor dari 1
, sedangkan mereka dinomori dari 0
dalam bash
. Jadi ada sedikit perbedaan praktis
Seperti dikatakan di atas, perilaku ini dapat dimodifikasi di zsh
.
Jika Anda mengatur AUTO_PUSHD
opsi di zsh
( setopt autopushd
) cd somedir
berperilaku seperti pushd somedir
, direktori sebelumnya didorong ke tumpukan direktori secara otomatis. Ini mungkin terjadi pada mesin Anda. Anda dapat menjalankan setopt
untuk mendapatkan daftar opsi yang tidak diatur dengan cara default. Lihat, apakah autopushd
muncul dalam daftar.
Tapi ini tidak berubah cd -
untuk berperilaku seperti popd
. Sebaliknya itu hanya mendorong $PWD
ke 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 popd
pada sistem Anda, saya akan menyarankan jika cd
sebenarnya adalah builtin ( whence -v cd
); mungkin saja diganti dengan alias atau fungsi.
Karena tumpukan direktori akan tumbuh lebih cepat dengan AUTO_PUSHD
diaktifkan, Anda dapat membatasi ukurannya dengan mengatur parameter DIRSTACKSIZE
ke ukuran maksimum yang diinginkan.
Anda juga dapat mencegah duplikat dengan mengatur PUSHD_IGNORE_DUPS
opsi.
Untuk opsi lebih lanjut lihat manual .
cd
set variabel shellOLDPWD
ke direktori sebelumnya, dancd -
diterjemahkan kecd "$OLDPWD"
.