Jak można szybko przełączać się między wieloma katalogami w celu administrowania systemem? Mam na myśli, że mogę używać pushd .
i popd
przełączać, ale co, jeśli chcę przechowywać wielokrotności i przełączać się między nimi, zamiast trwale wyrzucać je z dołu stosu?
bash
shell-script
administration
Volomike
źródło
źródło
$CDPATH
być może?cd -
po googlowaniu zainicjowanym z tego pytania.cd
wszędzie ręcznie. Było bolesne Używano jednak automatycznego uzupełniania z klawiszem Tab.Odpowiedzi:
Zastosowanie
pushd
a następnie specjalne nazwy katalogów w Twojej stosu katalogów:~1
,~2
, itd.Przykład:
Najskuteczniejszym sposobem użycia
pushd
w ten sposób jest załadowanie listy katalogów, a następnie dodanie jeszcze jednego katalogu, aby był twoim bieżącym katalogiem, a następnie możesz przeskakiwać między liczbami statycznymi bez wpływu na pozycję katalogów na stosie.Warto również zauważyć, że
cd -
zabierze Cię do ostatniego katalogu jesteś w. Tak będziecd ~-
.Przewaga
~-
nad właśnie-
jest to, że-
jest specyficznycd
, natomiast~-
jest rozszerzana przez powłokę w ten sam sposób, że~1
,~2
itp są. Jest to przydatne przy kopiowaniu pliku między bardzo długimi ścieżkami katalogu; na przykład:Powyższe jest równoważne z:
źródło
cd -
cd -
zachowuje się jak czwartyDROP DUP
, np. jeśli zaczyna się od katalogu a , przy stosie abcd , acd -
zmienia stos na bbcd . Być może tobash
jednak błąd, ponieważ sekundacd -
zmienia stos z powrotem na abcd . Z tego możemy wywnioskować, żecd -
oprócz zmiany stosu używa innej osobnej struktury danych do przechowywania poprzedniego katalogu.cd -
zastosowania$OLDPWD
i nic więcej.cd -
była to wcześniejsza funkcja bash , a potem dodali stos, ale bali się złamania starego kodu bardziej niż chcieli prostszego projektu. Korekta do poprzedniej,cd -
działa jak ForthOLDPWD @ SWAP OLDPWD ! DUP .
W przeciwieństwie docd foo
,cd -
wypisuje nazwę zamienionego katalogu.bash
„s wbudowanepushd
z+
i-
opcji można obrócić stos katalogów. Składnia może być nieco myląca, być może dlatego, że ten stos jest tablicą zerową . Te proste funkcje opakowania przełączają się między stosami katalogów:Test: ustaw stos czterech katalogów.
Teraz / tmp jest bieżącym katalogiem, a stos wygląda następująco:
Przejdź do następnego katalogu na stosie (i pokaż go) cztery razy:
Wynik:
Przejdź do poprzedniego katalogu na stosie (i pokaż go) cztery razy:
Wynik:
Uwaga na temat
cd -
: Odpowiedź Wildcard pomogła zilustrować, w jakicd -
sposób nie korzysta z tablicy $ DIRSTACK (używa zmiennej $ OLDPW ), więccd -
nie wpływa to na $ DIRSTACK , tak jak powinna polegać zamiana stosów. Aby to naprawić, oto prosta funkcja wymiany w oparciu o $ DIRSTACK :Test:
Wynik:
źródło
popd
, aby usunąć go bez zmiany katalogów, wykonajpopd -n
. Aby wyczyścić stos, wykonajdirs -c
. Szkoda, że projektanci bash zakopali takie przydatne funkcje w nieintuicyjnej składni. Zobaczman bash
poniżejpushd
,dirs
itpSugeruję zainstalowanie fasd . Daje to możliwość szybkiego przejścia do dowolnego katalogu, w którym już byłeś, wpisując tylko niewielką część jego nazwy.
Przykład: jeśli odwiedziłeś
/home/someName/scripts/
, możesz tam wskoczyć, piszącz scr
na przykład. Jest to o wiele wygodniejsze niż zapamiętywanie kolejności w stosie historii lub czegoś podobnego.źródło
Kiedy
cd
gdzieś Bash przechowuje stary katalog pracujących zmienną środowiskową,$OLDPWD
.Możesz wrócić do tego katalogu za pomocą
cd -
, co jest równoważne zcd "$OLDPWD"
.Możesz podskakiwać między katalogami w następujący sposób:
źródło
Napisałem skrypt o
xyzzy
tej nazwie :Używam tego, aby skopiować do
/usr/bin
folderu, a następniechmod a+x
na nim. Następnie edytuję~/.bashrc
plik konta root i użytkownika , aby na dole zamieścić następujące wiersze:„Xy” jest skróconą formą polecenia do szybszego pisania.
Następnie mogę zapisać bieżący katalog na liście za pomocą ...
... i powtórz w razie potrzeby. Po wypełnieniu tej listy katalogami, których potrzebuję, pozostają tam aż do ponownego uruchomienia komputera, ponieważ wtedy / tmp zostanie ponownie wyczyszczone. Następnie mogę wpisać ...
... aby wyświetlić listę aktualnie zapisanych katalogów. Aby przejść do katalogu, mam dwie możliwości. Jedną z opcji jest określenie ścieżki według indeksu (i jest to indeks oparty na 1) w następujący sposób:
... który przeszedłby do katalogu, który jest drugim elementem na liście. Lub mógłbym pominąć numer indeksu i po prostu zrobić:
... aby przechodził przez każdy katalog, tak jak potrzebuję. Aby uzyskać więcej poleceń, które możesz wykonać, wpisz:
Oczywiście praca jest przyjemniejsza dzięki głupim wypowiedziom echa, które dodałem.
Zauważ, że xyzzy jest odniesieniem do przygody tekstowej Collosal Cave , w której wpisanie xyzzy pozwoliłoby ci przełączać się między dwoma pokojami w grze, aby uniknąć gracji.
źródło
Używam małego skryptu o nazwie z [link] , który może również być interesujący, nawet jeśli nie robi dokładnie tego, o co prosiłeś.
źródło
Jest również
cd_func
od Petara Marinowa, to w zasadziecd
z historią do 10 wpisów: http://linuxgazette.net/109/misc/marinov/acd_func.htmlWystarczy użyć,
cd --
aby wyświetlić listę przeszłych do 10 katalogów, do którychcd
edytowałeś icd -N
(gdzieN
jest indeks pozycji), aby tam przejść.źródło
Najczęściej używam ZSH z profilem oh-my-zsh . Możesz wpisać w terminalu następujące dopasowanie:
Następnie możesz po prostu użyć strzałek (w górę i w dół), aby przejść przez całą historię powłoki, która pokazuje tylko te wpisy, które zaczynają się od powyższych znaków. Na przykład, jeśli przejdziesz do
/home/morfik/Desktop/
i/home/morfik/something/
, możesz bardzo szybko przełączać się między katalogami. Nie ma znaczenia, ile wpisów masz w historii powłoki, ale gdy masz ich dużo, po prostu użyj lepszego wyrażenia, tj.cd /home/morf
I tutaj naciskaj strzałki w górę / w dół na klawiaturze.Istnieje również inny sposób na osiągnięcie tego rozwiązania. W takim przypadku musisz użyć tmux i FZF . Następnie po prostu tworzysz skrót, na przykład ctrl-r, a gdy go naciśniesz, bieżące okno zostanie podzielone i zobaczysz:
Teraz możesz używać wyrażeń do przeszukiwania listy. Właśnie wpisałem
^cd /media
, co zwraca tylko wpisy zaczynające się od frazy. Oczywiście możesz po prostu wpisać,'cd 'home
aby dopasować polecenie, a także całą nazwę katalogu (nie ścieżkę, tylko nazwę):źródło
Możesz to osiągnąć za pomocą kilku aliasów w swoim
~/.bashrc
(lub równoważnym)Głównym celem jest niemal minimalne wpisywanie (np.
d5
Skoki do katalogu nr 5 w puli), aby przełączać się między katalogami w puli. Chcemy również ułatwić dodawanie / usuwanie katalogów do / z puli:Teraz za każdym razem, gdy wypychasz katalog na stosie, zostaje on dodany do puli numerowanej w pozycji 0 (bieżący katalog) i możesz przeskakiwać (przełączać katalogi), używając bardzo małej
d<N>
liczby znaków ( ), i możesz przeglądać swoją numerowaną bieżącą pulę w dowolnym czas po prostu wpisującd
.Kilka przykładów użycia tych aliasów:
Wyświetl numerowaną pulę katalogów (aktualny katalog to # 0)
Przełączaj między katalogami: użyj
d<N>
Dodaj nowy katalog do puli
Przeskocz jeszcze:
Usuń / pop górny (bieżący) katalog z puli
źródło
Jeśli masz zainstalowany iselect , możesz zrobić coś takiego:
To da Ci pełnoekranowe, oparte na ncurses, interaktywne menu nawigacyjne ze strzałkami do wyboru katalogu
cd
do.Jeśli nie używałeś
pushd
w bieżącej sesji powłoki, lista katalogów w menu zaczyna się od jednego wpisu, twojego bieżącego katalogu. Jeśli jest tylko jeden wpis, tendirselect
alias przejdziecd
do niego bez ekranu menu, więc skutecznie nic nie robi (poza tym, że niecd -
robi nic przydatnego)Aby dodać nowy katalog do listy, użyj
pushd dir
(lubpushd -n dir
dodaj katalog bezcd
-ing w tym samym czasie)Można wstępnie wypełnić
pushd
stos wykonując coś jak poniżej w twojej.bashrc
lub~/.bash_profile
:Możesz usunąć wpisy za pomocą
popd
lubpopd -n
.Zobacz
help pushd
,help popd
ihelp dirs
w bash, aby uzyskać więcej informacji. I oczywiścieman iselect
.BTW,
iselect
jest prawdopodobnie dostępny w paczce dla twojej dystrybucji. To jest dla Debiana i Ubuntu itp. I prawdopodobnie także dla innych.źródło
Jeśli masz 5 lub 10 katalogów, z których często korzystasz i niekoniecznie dbasz o ostatnio używane 5 lub 10 katalogów, skonfiguruj aliasy poleceń, takie jak
Kiedy więc chcę przejść do katalogu strony głównej Apache, piszę po prostu,
cdw
gdy odpowiedziałem w ekwiwalencie aliasu dla dowiązania symbolicznego? .źródło
Używam skoku, aby szybko zmienić katalog roboczy.
Aby dodać bieżący katalog:
Aby wyświetlić listę wszystkich zakładek:
na przykład:
Teraz możesz łatwo przejść do innego katalogu:
Obsługuje autouzupełnianie dla bash i zsh.
Edycja (w odpowiedzi na @Joe): plik binarny
jump-bin
jest przechowywany w/usr/local/bin
, a wraz ze skryptem integracji bash (na moim komputerze w/var/lib/gems/1.9.1/gems/jump-0.4.1/bash_integration/shell_driver
) znajduje się funkcja bash,jump
która wywołujejump-bin
.źródło
Używam
alias
do nawigacji. Jeśli masz kilka często używanych katalogów, po prostu ustaw aliasy. Na przykład,Więc po prostu
zabierze cię do
/etc
.źródło