Це залежить. У zsh
ви можете налаштувати , cd
щоб натиснути на старий каталог на каталог стека автоматично, але це не за замовчуванням.
Наскільки я можу сказати, що zsh
з налаштуваннями за замовчуванням поводиться дуже схоже на bash
:
cd somedir
- змінити каталог на
somedir
- зберегти початковий каталог у
OLDPWD
- набір
PWD="somedir"
- замініть верхній елемент стека каталогів (як показано на
dirs
) somedir
(кількість елементів у стеку не змінюється).
cd -
:
- змінити каталог на
$OLDPWD
- значення swap
PWD
іOLDPWD
- змінити верхній елемент стека каталогів, щоб відобразити (новий)
PWD
pushd somedir
:
- змінити каталог на
somedir
- зберегти оригінальний каталог у
OLDPWD
- набір
PWD="somedir"
- натисніть
somedir
на стек каталогу (розширивши його на один елемент)
popd
:
- зберегти оригінальний каталог у
OLDPWD
- видаліть перший елемент стека каталогів
- змінити каталог на новий верхній елемент стека каталогів
- встановити
PWD
новий верхній елемент стека каталогу
Примітка: Чи вважається даний робочий каталог елементом стека каталогів, різниться між zsh
та і bash
. Я використовувався bash
як орієнтир для вищезазначених списків.
У bash
цьому робочому каталозі вважається верхнім елементом стека каталогів. man 1 bash
каже:
pushd [-n] [dir]
[…] Додає dir
до стека каталогів вгорі, роблячи його новим поточним робочим каталогом так, ніби він був поставлений як аргумент cd
вбудованому. […]
Друк DIRSTACK
( echo ${dirstack[@]}
) підтверджує, що перший елемент ідентичний $PWD
.
У zsh
теперішньому робочому каталозі не є частиною стека каталогів (але все ще показано з dirs
). man 1 zshbuiltins
каже:
pushd [ -qsLP ] [ arg ]
[…] Змініть поточний каталог і натисніть старий поточний каталог на стек каталогів. У першій формі змініть поточний каталог на arg. […]
Друк dirstack
( echo ${dirstack[@]}
) та порівняння його з вихідним сигналом dirs
має показувати, що PWD
це не частина `dirstack.
В обох оболонках dirs
друкується даний робочий каталог як перший елемент. Також в обох оболонках елемент стека каталогів з індексом 1
посилається на каталог, який був поточним до останнього pushd
. Це тому, що масиви в, zsh
як правило, пронумеровані від 1
, в той час як вони нумеруються від 0
в bash
. Тому практичної різниці мало
Як було сказано вище, цю поведінку можна змінити zsh
.
Якщо ви встановите, що AUTO_PUSHD
параметр в zsh
( setopt autopushd
) cd somedir
веде себе так pushd somedir
, як попередній каталог автоматично висувається на стек каталогів. Мабуть, це стосується вашої машини. Ви можете запустити, setopt
щоб отримати список параметрів, які не встановлені за замовчуванням. Дивіться, чи autopushd
відображається у списку.
Але це не модифікує cd -
себе таким чином popd
. Натомість він просто натискає $PWD
на стек каталогів і змінює каталог на $OLDPWD
. Це означає, що багаторазовий виклик cd -
фактично зросте стек каталогів ( ($PWD $OLDPWD $PWD $OLDPWD $PWD …)
). Якщо воно насправді поводиться точно так само, як popd
у вашій системі, я б підказав, чи cd
є насправді вбудований ( whence -v cd
); можливо, що його замінено на псевдонім або функцію.
Оскільки стек каталогів досить швидко зростатиме з AUTO_PUSHD
увімкненим, ви можете обмежити його розмір, встановивши параметр DIRSTACKSIZE
на потрібний максимальний розмір.
Ви також можете запобігти дублікати, встановивши PUSHD_IGNORE_DUPS
параметр.
Для отримання додаткових варіантів ознайомтеся з посібником .
cd
встановлення змінної оболонкиOLDPWD
в попередній каталог іcd -
отримує переклад наcd "$OLDPWD"
.