$ pwd
/tmp/d1
$ dirs
/tmp/d1
$ pushd ../d2
/tmp/d2 /tmp/d1
$ popd
/tmp/d1
$ pwd
/tmp/d1
Похоже, что он pushd
всегда помещает текущий каталог, например, /tmp/d1
в стек, хотя я запускаю его как pushd ../d2
?
Обратите внимание, что:http://linux.101hacks.com/cd-command/dirs-pushd-popd/
Первый каталог вывода команды dir всегда является текущим каталогом, а не содержимым стека.
решение1
Нет pushd
не всегда выталкивает текущий каталог. Со bash
страницы man
:
pushd [-n] [+n] [-n]
pushd [-n] [dir]
Adds a directory to the top of the directory stack, or rotates
the stack, making the new top of the stack the current working
directory. With no arguments, exchanges the top two directo‐
ries and returns 0, unless the directory stack is empty.
.
.
dir Adds dir to the directory stack at the top, making it
the new current working directory.
Форма с каталогом pushd [dir]
не использует текущий каталог, если только этот каталог явно не указан в качестве аргумента.pushd somedir
решение2
Я использую zsh
и у него есть опция PUSHD_IGNORE_DUPS
: «Не помещать несколько копий одного и того же каталога в стек каталогов». Возможно, вам придется проверить параметры оболочки (мне zsh
это было нужно unsetopt pushdignoredups
).