Apakah ada perbedaan antara perilaku pushd / popd di bash vs zsh? Tampaknya di zsh cd, cd-berperilaku persis sama dengan pushd / popd (yang menambahkan / muncul direktori secara otomatis ketika cd) sementara di bash cd tidak mempengaruhi tumpukan direktori.
Jika seseorang dapat memberi saya sebuah pointer, itu akan menjadi hebat.
bash
zsh
cd-command
pushd
dragonxlwang
sumber
sumber
cd
set variabel shellOLDPWD
ke direktori sebelumnya, dancd -
diterjemahkan kecd "$OLDPWD"
.pushd
juga mengesetOLDPWD
dirs
selalu memegang PWD sebagai elemen pertamaJawaban:
Tergantung. Di
zsh
Anda dapat mengkonfigurasicd
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 denganbash
:cd somedir
somedir
OLDPWD
PWD="somedir"
dirs
) dengansomedir
(jumlah elemen pada tumpukan tidak berubah).cd -
:$OLDPWD
PWD
danOLDPWD
PWD
pushd somedir
:somedir
OLDPWD
PWD="somedir"
somedir
ke tumpukan direktori (memperluasnya dengan satu elemen)popd
:OLDPWD
PWD
ke elemen teratas baru dari tumpukan direktoriCatatan: Apakah direktori kerja saat ini dianggap sebagai elemen tumpukan direktori berbeda antara
zsh
danbash
. Saya digunakanbash
sebagai referensi untuk daftar di atas.Dalam
bash
direktori kerja ini dianggap sebagai elemen teratas dari tumpukan direktori. Theman 1 bash
mengatakan:Mencetak
DIRSTACK
(echo ${dirstack[@]}
) mengonfirmasi bahwa elemen pertama identik dengan$PWD
.Dalam
zsh
direktori kerja sekarang bukan bagian dari tumpukan direktori (tetapi masih ditunjukkan dengandirs
).man 1 zshbuiltins
mengatakan:Mencetak
dirstack
(echo ${dirstack[@]}
) dan membandingkannya dengan outputdirs
harus menunjukkan bahwaPWD
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 indeks1
merujuk ke direktori yang saat ini sebelum yang terakhirpushd
. Itu karena array dalamzsh
biasanya diberi nomor dari1
, sedangkan mereka dinomori dari0
dalambash
. Jadi ada sedikit perbedaan praktisSeperti dikatakan di atas, perilaku ini dapat dimodifikasi di
zsh
.Jika Anda mengatur
AUTO_PUSHD
opsi dizsh
(setopt autopushd
)cd somedir
berperilaku sepertipushd somedir
, direktori sebelumnya didorong ke tumpukan direktori secara otomatis. Ini mungkin terjadi pada mesin Anda. Anda dapat menjalankansetopt
untuk mendapatkan daftar opsi yang tidak diatur dengan cara default. Lihat, apakahautopushd
muncul dalam daftar.Tapi ini tidak berubah
cd -
untuk berperilaku sepertipopd
. Sebaliknya itu hanya mendorong$PWD
ke tumpukan direktori, dan mengubah direktori menjadi$OLDPWD
. Itu berarti berulang kali meneleponcd -
sebenarnya akan menumbuhkan tumpukan direktori (($PWD $OLDPWD $PWD $OLDPWD $PWD …)
). Jika itu benar-benar berperilaku persis sepertipopd
pada sistem Anda, saya akan menyarankan jikacd
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 parameterDIRSTACKSIZE
ke ukuran maksimum yang diinginkan.Anda juga dapat mencegah duplikat dengan mengatur
PUSHD_IGNORE_DUPS
opsi.Untuk opsi lebih lanjut lihat manual .
sumber
dirs
?popd
tanpa perlu mengetikkan (atau bahkan tahu) path.