Это кажется этим pushd
и popd
не работают как ожидалось (выталкивающий последний продвинутый каталог), но он выталкивает первый каталог и после второго popd
это переходит к корневому каталогу.
user@ubuntu:~$ pushd /tmp/dir1
/tmp/dir1 ~
user@ubuntu:/tmp/dir1$ pushd /tmp/dir2
/tmp/dir2 /tmp/dir1 ~
user@ubuntu:/tmp/dir2$ cd ..
user@ubuntu:/tmp$ popd
/tmp/dir1 ~
user@ubuntu:/tmp/dir1$ popd
~
Какая-либо причина этого?
Использование Ubuntu 16.04 LTS в плеере VMware Workstation 12
Это переходит к корневому каталогу после последнего поп, потому что Вы были в своем корневом каталоге, когда Вы продвинули /tmp/dir1
на этот стек. ~
Ваш корневой каталог. Эта часть:
user@ubuntu:~$ pushd /tmp/dir1
/tmp/dir1 ~
А именно, когда стопка каталога пуста, она добавляет текущий рабочий каталог к дну стека.
Вот пример от /etc
:
bash-4.3$ cd /etc
bash-4.3$ pushd /usr
/usr /etc
popd
поведение является также правильным, оно действительно удаляло самый старый продвинутый каталог, но Вы также пропустили часть, что оно переходит к новому главному каталогу после того, как старое было удалено. Прочитайте руководство снова:
popd [-n] [+n] [-n] Удаляет записи из стопки каталога. Без аргументов, удаляет главный каталог из стека и выполняет CD к новому главному каталогу.
Таким образом в Вашем случае со стеком /tmp/dir2 /tmp/dir1 ~
, сначала popd
удаленный /tmp/dir2
. Таким образом, какова новая вершина стека? /tmp/dir1
, таким образом, это будет также работать cd /tmp/dir1
.
Наблюдайте:
bash-4.3$ pwd
/etc
bash-4.3$ pushd /bin
/bin /etc
bash-4.3$ pushd /usr
/usr /bin /etc
bash-4.3$ pushd /sys
/sys /usr /bin /etc
bash-4.3$ popd
/usr /bin /etc
bash-4.3$ pwd
/usr