pushd
, popd
I dirs
są builtins powłoki, które pozwalają manipulować stos katalogów . Można tego użyć do zmiany katalogów, ale powrotu do katalogu, z którego przyszedłeś.
Na przykład
uruchom z następującymi katalogami:
$ ls
dir1 dir2 dir3
pushd do dir1
$ pushd dir1
~/somedir/dir1 ~/somedir
$ dirs
~/somedir/dir1 ~/somedir
dirs
polecenie potwierdza, że mamy teraz na stosie 2 katalogi. dir1
i oryginalny reż somedir
.
pushd do ../dir3 (ponieważ teraz jesteśmy w środku dir1
)
$ pushd ../dir3
~/somedir/dir3 ~/somedir/dir1 ~/somedir
$ dirs
~/somedir/dir3 ~/somedir/dir1 ~/somedir
$ pwd
/home/saml/somedir/dir3
dirs
pokazuje, że mamy teraz 3 katalogi na stosie. dir3
, dir1
i somedir
. Zwróć uwagę na kierunek. Każdy nowy katalog jest dodawany po lewej stronie. Kiedy zaczniemy wyrzucać katalogi, będą one również przychodzić z lewej strony.
ręcznie zmień katalogi na ../dir2
$ cd ../dir2
$ pwd
/home/saml/somedir/dir2
$ dirs
~/somedir/dir2 ~/somedir/dir1 ~/somedir
Teraz zacznij otwierać katalogi
$ popd
~/somedir/dir1 ~/somedir
$ pwd
/home/saml/somedir/dir1
Zauważ, że wróciliśmy do dir1
.
Pop ponownie ...
$ popd
~/somedir
$ pwd
/home/saml/somedir
I wracamy do punktu wyjścia, somedir
.
Może się trochę mylić, ale na szczycie stosu znajduje się katalog, w którym aktualnie się znajdujesz. Stąd, kiedy wrócimy do somedir
, chociaż dirs
pokazuje to:
$ dirs
~/somedir
Nasz stos jest właściwie pusty.
$ popd
bash: popd: directory stack empty
cd -
, aliasy dla skróceniacd ..
itp.).pushd
&popd
w skryptach b / c ratują mnie od konieczności pamiętania, skąd pochodzę, zawsze mogę po prostupopd
wrócić z miejsca, z którego przyszedłem. Zazwyczaj robię to,popd >/dev/null 2>&1
żeby to uciszyć. Używam cd- codziennie w mojej powłoce. Istnieje kilka innych wskazówek, oszczędzając czas w tym artykule, a także: thegeekstuff.com/2008/10/... .cd -
śledzi tylko ostatni katalog, wyobrażam sobie, że możliwe są problemy, jeśli wywołasz funkcję, która również zmienia katalog wewnętrznie. w takim przypadku funkcja zakończy się resetowaniem - do bieżącego katalogu, a nie katalogu, do którego chcesz wrócić. pushd / popd jest najbezpieczniejszą metodą. Uwaga: nie przetestowałem mojej teorii.~/somedir/dir3
pierwszegopopd
?Istnieje bardzo przydatny przypadek użycia
pushd
ipopd
polecenia do pracy z kilkoma folderami jednocześnie.Możesz bardzo łatwo poruszać się po stosie, ponieważ jest on wyliczony. Oznacza to, że możesz mieć do dyspozycji kilka folderów roboczych podczas pracy.
Zobacz prosty przykład poniżej.
Najpierw stwórzmy przykładową strukturę folderów.
Następnie możesz dodać wszystkie swoje foldery do stosu:
Możesz to sprawdzić:
Aby bezpiecznie nawigować, musisz dwukrotnie dodać ostatni (zero) folder, ponieważ zawsze będzie on przepisany:
Teraz możesz przeskakiwać przez te foldery i pracować ze stosem jak z aliasami dla folderów. Myślę, że następująca część jest oczywista:
Dodatkową wskazówką jest utworzenie aliasu dla
dirs -v
.Na przykład:
źródło
dirs -c
Jednym prostym przypadkiem użycia stosu plików katalogów, czego nie można zrobić za pomocą samego dysku CD, jest:
pushd .
dodaje bieżący katalog XX dodirs
stosu. Następnie możesz poruszać się za pomocącd
, a aby powrócić do XX, po prostu rób topopd
niezależnie od tego, jak „daleko” jesteś w drzewie katalogów (możesz przeskakiwać wiele poziomów, na boki itp.). Szczególnie przydatne w skryptach bash.źródło
pushd
/popd
praca niezależna odcd
, możesz użyć ich jako bardziej stabilnej zakładki niżcd -
.pushd
ipopd
pozwala manipulować katalogami na stosie.Kiedy jesteś
pushd
katalogiem, umieszczasz bieżący katalog na stosie i zmieniasz katalog na katalog określony jako parametr.popd
pozwoli ci wrócić do katalogu na stosie.Jeśli powtórzysz, przejście do katalogu zostanie zachowane i będziesz mógł wrócić do zapisanych katalogów w odwrotnej kolejności niż te, w których je zapisałeś.
źródło
dla bash , w zasadzie: zamiast korzystać z cd można
pushd
zmienić katalogi, z praktycznym zastosowaniem: historia odwiedzanych katalogów jest zapisywana (poprawnie: ułożona w stos) i można przełączać się między nimiAby zobaczyć użycie stosu
dirs
i ułatwić nawigację (aby uzyskać numery „wpisów stosu”, użyj:Wynik:
Teraz wykorzystać te numery ze
cd
i~
tak:Ale te liczby są teraz przestawiane i pozycja „0” ulegnie zmianie, więc wystarczy
pushd
dwa razy katalog do najwyższej pozycji (lub użyć manekina na pozycji 0), np .:teraz 1..3 utrzyma pozycję
(aby zwolnić bieżący katalog ze stosu / usunąć go z historii
popd
)źródło
Jednym praktycznym zastosowaniem, które znalazłem, jest przełączanie się między katalogami za pomocą pushd i popd.
Załóżmy, że mamy dwa katalogi dir1 i dir2, a ja muszę ciągle się między nimi przełączać z jakiegoś powodu xyz.
Obecnie jestem w somedir, który ma dwa katalogi
dir1
idir2
:Teraz przełączam się na
dir1
Teraz dodam
dir1
do stosu i przejdę dodir2
Jak widać, teraz mam
dir2
idir1
na stosie, a obecnie jestem w grzedir2
.Teraz, aby przełączyć się z powrotem
dir1
, uruchomiępushd || popd
.Voila, jestem w katalogu 1 i mam katalog 1 i katalog 2 na stosie. Aby ponownie przełączyć na katalog 2, uruchom ponownie
pushd || popd
To prosty sposób przełączania się między katalogami. Teraz możesz wiedzieć, dlaczego muszę przełączać się między katalogami? Cóż, jednym z przypadków użycia jest to, że kiedy pracuję nad aplikacją internetową, mam plik make w jednym katalogu, a pliki dziennika w innym katalogu. Często podczas debugowania aplikacji muszę przełączać się między katalogiem dziennika, aby sprawdzić najnowsze dzienniki, a następnie wrócić do katalogu make, aby wprowadzić zmiany i zbudować aplikację.
źródło
pushd
ipopd
ponadcd -
?” Wyraźnie nie odpowiedziałeś na to pytanie, ponieważ dokładnie opisujesz, cocd -
robi. (2) Jaki jest sens powiedzeniapushd || popd
? Tak, wiem, żecmdA || cmdB
to oznacza ucieczkę,cmdA
a jeśli się nie powiedzie, wtedy biegnijcmdB
. Pytam, co dobrego robi w tym kontekście.pushd
bez argumentów oznacza „zamień dwa górne elementy na stosie katalogów”; kończy się niepowodzeniem, jeśli bieżący katalog jest jedynym elementem na stosie katalogów. W takim przypadkupopd
również się nie powiedzie.pushd
ipopd
.pushd || popd
w celu przełączania się między katalogami:pushd
bez argumentów robi to tylko.cd -
jawnie istnieje wyłącznie w celu powrotu do ostatniego katalogu. Dodatkowo, pytanie dotyczyło przewagipushd
nadcd -
, podczas gdy ta odpowiedź wyraźnie ma tylko wadę: więcej pisania.|| popd
przełącznika? Proszę wytłumacz. (Czy to nie wystarczy?)cd -
aby przełączać się między dwoma katalogami. Dodatkowocd
bez żadnych argumentów wraca do twojego katalogu domowego.Mówiąc najprościej - gdy trzeba nawigować między więcej niż 2 katalogami, zwykle kilka razy tam iz powrotem, ponieważ
cd -
po prostu nie da się tego zrobić za pomocą niczego poza 2 folderami.Na przykład, zamiast na przykład wymyślać poprzednie długie ścieżki, patrząc na historię bufora lub wypełnianie długich ścieżek tabulatorami, po prostu układasz ważne w górę i, jeśli to konieczne, wygodnie do nich przechodzisz według ich liczby. Obracanie między złożonymi strukturami katalogów i długimi ścieżkami staje się płynne i szybkie.
Wbudowane funkcje pozwalają również na zmianę kolejności stosu lub wyskakiwanie katalogów, których już nie potrzebujesz, zapewniając elastyczność w przepływie pracy.
Układanie katalogów może być również stosowane w skryptach podobnie do operacji obejmujących kilka katalogów.
źródło
Użycie dirs / popd / pushd uznałem za nieco niewygodne. Wymyśliłem swoje osobiste rozwiązanie w tcsh, dodając następujący kod do .alias
w ten sposób aliasowałem na przykład „p”. aby zapisać bieżący działający katalog do pliku ~ / .mydir. i „cd”. aby odzyskać ten katalog, kiedykolwiek i gdziekolwiek chcę. „del.” usuwa odpowiedni plik; "Dom." ustawia katalog na katalog domowy (odpowiednik cd; p.); „cdl” wyświetla listę zapisanych katalogów. Pamiętaj, że jeśli używasz ~ / Dropbox / .mydir $ b (lub innej usługi w chmurze, takiej jak np. OwnCloud) zamiast ~ / .mydir $ b, możesz w inteligentny sposób korzystać z preferowanych katalogów na różnych kontach i komputerach.
źródło
pomaga mi przeskakiwać między katalogami do ostatnio używanych w moim terminalu. :-) Mam nadzieję, że to pomaga w użyciu pushd raczej popd i używam cd ~ stackednumber
źródło
Używanie
cd
icd -
pozwala przełączać się między tylko dwoma ostatnio używanymi katalogami. Rozmiar „zestawu roboczego katalogu” wynosi dwa.Za pomocą
pushd
możesz przechowywać dowolnie dużą liczbę katalogów w zestawie roboczym.Używam
pushd
raczej czasu niżcd
. Po zbudowaniu stosu aktywnych katalogówpushd directory_name
możesz przeskakiwać między nimi przez cały dzieńpushd ~#
.Używam
popd
rzadko, tylko wtedy, gdy chcę usunąć katalog ze stosu, gdy wiem, że skończyłem używać tego katalogu.Przejdź do katalogu i usuń go ze stosu:
Pozostań w bieżącym katalogu i usuń inny katalog ze stosu:
W efekcie powstaje styl pracy podobny do otwierania wielu okien lub kart terminali (po jednym dla każdego katalogu, w którym aktywnie pracujesz), ale wszystko w jednym terminalu. Oszczędza to ekran nieruchomości, a ponieważ ścieżki katalogowe są dostępne w jednej powłoce, możesz wykonywać następujące czynności:
Przykłady:
W
tcsh
(ale niebash
) możesz nawet zapisać stos katalogów do pliku i przywrócić go później.Zapisać:
Przywracać:
W przeciwnym razie po prostu zamień
~
wbash
przykładach na,=
aby użyć wtcsh
.źródło
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
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)
Przejdźmy teraz do tyłu:
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:
Teraz możesz wykonać dowolną operację Linuksa, która obejmuje katalogi za pomocą indeksu stosu:
Możesz nawet usunąć konkretny wpis ze stosu katalogów:
Mam nadzieję, że użycie słów „dokumentowanie” lub pomyśl o stosie dir jako pewnego rodzaju Db upraszcza tę koncepcję!
źródło