Почему встроенным системам требуется дерево устройств, а на компьютерах нет?

Ответ Кевина отличный. Я написал некоторые подробности о том, что происходит, на тот случай, если люди хотят лучше понять, почему их сценарий необходим для решения проблемы.

Причина, по которой 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 - потерял свою полезную историю и теперь просто переместит вас в текущий каталог - ничего не достигнув.

8
04.01.2018, 12:48
0 ответов

Теги

Похожие вопросы