Pushd / popd - это такая простая концепция, которую мне потребовалось некоторое время, чтобы понять, так как люди склонны учить ее, определяя эти команды как команды, которые «манипулируют стеком каталогов», что, на мой взгляд, сбивает с толку.
Я смотрю на это по-другому:
pushd [имя_папки] - перейдет на [имя_папки] и задокументирует пункт назначения, который является [имя_папки] в стеке каталогов, в то время как верхний каталог в стеке всегда будет текущим каталогом, в котором вы находитесь.
popd - сначала перейдет в директорию записи, которая находится на вершине стека, а затем удалит ее из стека.
dirs - будет печатать стек dir (может рассматриваться как dir Db, где самая левая запись - это текущий каталог (вершина стека)
Итак, 2 самых популярных варианта использования:
Вариант использования 1: навигация с использованием pushd и popd
root@mypc:/main/$ ls
dir1 dir2 dir3 dir4
root@mypc:/main/$ dirs # prints the current stack
/main
root@mypc:/main/$ pushd dir1 # Will cd to dir1 and document dir1 in dir stack, stack is now:
/main/dir1 /main
root@mypc:/main/dir1$ # I am now in /main/dir1
root@mypc:/main/dir1$ # Now let's go wild and document whatever I want
root@mypc:/main/dir1$ pushd ../dir2
root@mypc:/main/dir2$ # Woo I am in /main/dir2
root@mypc:/main/dir2$ pushd ../dir3
root@mypc:/main/dir3$ # Woo I am in /main/dir3
root@mypc:/main/dir3$ pushd ../dir4
root@mypc:/main/dir4$ # Woo I am in /main/dir4
root@mypc:/main/dir4$ dirs # Now dir stack is:
/main/dir4 /main/dir3 /main/dir2 /main/dir1 /main
Допустим, я сделал выше, так как я хотел бы вернуться к тем папкам, которые я задокументировал!
Обратите внимание, что если я вручную cd, я буду влиять на запись верхнего стека dir (который всегда является текущим dir)
root@mypc:/main/dir4$ cd .. # Now dir stack is:
# (note that /main appear in the leftmost as well which is the top of the stack)
/main /main/dir3 /main/dir2 /main/dir1 /main
root@mypc:/main$
Давайте теперь перейдем назад:
root@mypc:/main$ popd
root@mypc:/main$ # Still in /main since it was at the top of the dir stack
root@mypc:/main$ dirs # Stack is now:
/main/dir3 /main/dir2 /main/dir1 /main
root@mypc:/main$ popd
root@mypc:/main/dir3$ popd # Woo in dir3 now, about to navigate to dir2
root@mypc:/main/dir2$ popd # Woo in dir2, about to navigate to dir1
root@mypc:/main/dir1$ dirs # Stack is now:
/main
Опять же, я могу задокументировать любой каталог, который я хочу, и затем вручную перейти к другому каталогу, после чего я смогу легко вернуться к документированному каталогу, который я вставил в стек.
Вариант использования 2: навигация с использованием числового индекса стека
Допустим, я нажал, используя pushd dir4 dir3 dir2 dir1, теперь запуск dir -v покажет:
root@mypc:/main$ dirs -v
0 /main/dir1 (this is the current dir you are in always)
1 /main/dir2
2 /main/dir3
3 /main/dir4
Теперь вы можете выполнить любую операцию Linux, которая включает каталоги, используя индекс стека:
root@mypc:/main$ cp ~2/temp.txt ~3/new_temp.txt # this will run in the background, something like:
# cp /main/dir2/temp.txt /main/dir3/new_temp.txt
Вы даже можете удалить конкретную запись из стека каталогов:
root@mypc:/main$ popd ~4
Надеюсь, что использование слов «документирование» или представление о стеке dir как о некотором Db упрощает эту концепцию!
cd -
, псевдонимы для сокращенияcd ..
и т. Д.).