2

Я работаю через курс командной строки. У меня все хорошо, но теперь я попал в тупик от popd и pushd. Я читал аналогию со стопкой тарелок или блинов. Я до сих пор не понимаю, потому что я не могу визуализировать код, который идет после. Например:

pats-MacBook-Pro: временная версия $ pushd i/like/icecream

~/temp/i/like/icecream ~/temp

Если pushd похож на cd, то почему вторая строка показывает ~/temp в конце строки? Как эта часть вписывается в аналогию с «стопкой тарелок»?

Затем, если я наберу popd, он вернется в исходную папку ~/temp. Зачем?

Я очень ценю вашу помощь! Спасибо!

3 ответа3

2

pushd может принимать один аргумент (имя каталога), сохраняет текущий каталог в DIRSTACK и изменяет текущий рабочий каталог на данный каталог. Manpage далее объясняет:

Если команда pushd выполнена успешно, выполняется также dirs .

И dirs распечатывает запомненные на данный момент каталоги. popd - извлечь (удалить из стека) "самый верхний" запоминаемый каталог и cd в новый "самый верхний" запоминаемый каталог. После успешного popd снова выполняется команда dirs для печати текущего стека. Если вы выполните dirs в новой оболочке, вы увидите, что текущий каталог workind всегда содержится в переменной DIRSTACK - отсюда ваш ~/temp.

Пример: предположим, что у нас есть каталоги one , one/two и three в нашем домашнем каталоге:

~ $ pushd one   # change into one, remember current location
~/one ~
~/one $ pushd two   # change into two, remember current location
~/one/two ~/one ~   
~/one/two $ cd ../../three  # change into three, don't remember where we came from
~/three $ dirs  # show where we are and where we can get back to
~/three ~/one ~
~/three $ popd  # go back one step in the remembered directories
~/one ~
~/one $

Вы можете думать о командах pushd/popd как о способе «перейти в этот каталог, но помните, откуда мы пришли (pushd); делать что-то в новом каталоге; изменить каталог назад (popd). Это позволит также получить более ясным , если вы множественный pushd s подряда без popd Инг. Тогда аналогия с "стопкой тарелок" должна стать очевидной.

1

Чтобы сохранить вертикальное пространство на экране, pushd показывает стопку горизонтально, а новые элементы выдвигаются слева.

Вы начали с одного элемента в стеке, рабочего каталога ~/temp. Когда вы выполняете pushd i/like/icecream , pushd i/like/icecream в верхнюю часть стека, нажимая ~/temp вниз. Однако способ, которым pushd отображал результат, заключался в том, чтобы показать, что i/like/icecream был помещен в стек слева, перемещая ~/temp вправо. pushd также изменяет рабочий каталог на каталог, только что помещенный в стек, который был i/like/icecream.

popd извлекает стек, удаляя верхний элемент (i/like/icecream) и позволяя следующему элементу (~/temp) выскакивать на вершину стека, становясь новым рабочим каталогом.

popd , как и pushd , показывает стек на своей стороне, с верхом стека слева и низом стека справа.

Это может помочь вам визуализировать текущее состояние стека с помощью команды dirs -v , которая отображает стек вертикально.

1

Вначале мне тоже было сложно найти popd, но мне помогло следующее:

в основном для bash : вместо использования cd вы можете использовать pushd для смены каталогов, чтобы они складывались или, другими словами, сохранялись истории измененных каталогов.

pushd /home; pushd /var; pushd log

Чтобы увидеть стек (или историю), используйте dirs и для более удобной навигации (чтобы получить номера «записей стека»):

dirs -v

Выход:

me@myhost:/home$ dirs -v
 0  /home
 1  /var
 2  /tmp

Теперь используйте эти числа с cd и ~ like:

cd ~1

... так что вы можете перемещаться по "истории" каталогов (имеется в виду навигация в стеке)

Но теперь эти числа теперь переставлены, и позиция "0" изменится, поэтому просто дважды pushd каталог в верхнюю позицию (или используйте пустышку в позиции 0), например:

me@myhost:/home$ dirs -v
 0  /home
 1  /home
 2  /var
 3  /tmp

сейчас 1..3 сохранит там положение, я где-то читал, но больше не знаю, так что извините за то, что не дал кредит

(чтобы освободить текущий каталог из стека / удалить его из истории, используйте popd)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .