Це залежить. У 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".