Pushd / popd jest tak prostą koncepcją, której zrozumienie zajęło mi trochę czasu, ponieważ ludzie zwykle uczą go, definiując te polecenia jako polecenia „manipulujące stosem katalogów”, co moim zdaniem jest mylące.
Patrzę na to w inny sposób:
pushd [nazwa_folderu] - przeniesie cd do [nazwa_folderu] i udokumentuje miejsce docelowe, którym jest [nazwa_folderu] na stosie katalogów, podczas gdy najwyższy katalog na stosie będzie zawsze bieżącym katalogiem, w którym się znajdujesz
popd - najpierw przeniesie cię do rekordu katalogu znajdującego się na szczycie stosu, a następnie usunie go ze stosu
dirs - wydrukuje stos dir (może być traktowany jako dir Db, gdzie pozycja skrajnie lewa to katalog bieżący (góra stosu)
Tak więc 2 najpopularniejsze przypadki użycia to:
Przypadek użycia 1: Nawigacja za pomocą pushd i 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
Powiedzmy, że zrobiłem powyższe, ponieważ chciałbym wrócić do tych folderów, które udokumentowałem!
Zauważ, że jeśli ręcznie cd, wpłynę na górny wpis stosu katalogu (który zawsze jest bieżącym katalogiem)
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$
Przejdźmy teraz do tyłu:
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
Ponownie mogę udokumentować dowolny katalog, a następnie ręcznie przejść do innego katalogu, dzięki czemu będę mógł łatwo wrócić do udokumentowanego katalogu, który wstawiłem do stosu.
Przypadek użycia 2: Nawigacja za pomocą numerycznego indeksu stosu
Powiedzmy, że pchnąłem za pomocą pushd dir4 dir3 dir2 dir1, teraz uruchomione dir -v pokaże:
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
Teraz możesz wykonać dowolną operację Linuksa, która obejmuje katalogi za pomocą indeksu stosu:
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
Możesz nawet usunąć konkretny wpis ze stosu katalogów:
root@mypc:/main$ popd ~4
Mam nadzieję, że użycie słów „dokumentowanie” lub pomyśl o stosie dir jako pewnego rodzaju Db upraszcza tę koncepcję!
cd -
, aliasy dla skróceniacd ..
itp.).