Ответ Кевина отличный. Я написал некоторые подробности о том, что происходит, на тот случай, если люди хотят лучше понять, почему их сценарий необходим для решения проблемы.
Причина, по которой pushd.
нарушает поведение cd -
станет очевидным, если мы углубимся в работу cd и стека каталогов. Давайте поместим несколько каталогов в стек:
$ mkdir dir1 dir2 dir3
$ pushd dir1
~/dir1 ~
$ pushd../dir2
~/dir2 ~/dir1 ~
$ pushd../dir3
~/dir3 ~/dir2 ~/dir1 ~
$ dirs -v
0 ~/dir3
1 ~/dir2
2 ~/dir1
3 ~
Теперь мы можем попробовать cd -
, чтобы вернуться к каталогу:
$ cd -
/home/username/dir2
$ dirs -v
0 ~/dir2
1 ~/dir2
2 ~/dir1
3 ~
Мы видим, что cd -
переместил нас обратно в предыдущий каталог, заменив stack ~ 0 на каталог, в который мы перешли. Мы можем вернуться назад с помощью cd -
снова:
$ cd -
/home/username/dir3
$ dirs -v
0 ~/dir3
1 ~/dir2
2 ~/dir1
3 ~
Обратите внимание, что мы перешли обратно в наш предыдущий каталог, даже если предыдущий каталог фактически не был указан в стеке каталогов. Это потому, что cd
использует переменную среды $ OLDPWD
для отслеживания предыдущего каталога:
$ echo $OLDPWD
/home/username/dir2
Если мы сделаем pushd.
мы поместим дополнительную копию текущего каталога в стек:
$ pushd .
~/dir3 ~/dir3 ~/dir2 ~/dir1 ~
$ dirs -v
0 ~/dir3
1 ~/dir3
2 ~/dir2
3 ~/dir1
4 ~
В дополнение к созданию дополнительной копии текущего каталога в стеке, pushd.
обновил $ OLDPWD
:
$echo $OLDPWD
/home/username/dir3
Итак, cd -
потерял свою полезную историю и теперь просто переместит вас в текущий каталог - ничего не достигнув.