"Pushd / popd" - це така проста концепція, яка потребує певного розуміння, оскільки люди, як правило, навчають її, визначаючи ці команди як команди, що "маніпулюють стеком каталогів", що, на мою думку, бентежить.
Я дивлюся на це по-іншому:
pushd [папка_файлу] - перейде до [папки_файли] і задокументує призначення, яке є [ім'я_папки] у стеку dir, тоді як верхній каталог у стеці завжди буде поточним dir, в якому ви знаходитесь
popd - спочатку введе вас у запис каталогу, який знаходиться на вершині стека, та видалить його зі стека
dirs - надрукує стек dir (можна трактувати як dir Db, де крайній лівий запис - поточний каталог (у верхній частині стека)
Тож два найпопулярніші випадки використання:
Використовуйте випадок 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
Знову я можу задокументувати будь-який редактор, який я хочу, а потім перейти вручну до іншого dir, то я зможу легко повернутися до документально задокументованого dir, який я вставив у стек.
Використовуйте випадок 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
Ви навіть можете видалити певний запис із стека dir:
root@mypc:/main$ popd ~4
Сподіваємось, що використання слів "документування" або продумати стек dir як якийсь Db спрощує концепцію!
cd -
, псевдоніми для скороченняcd ..
тощо).