Chciałbym często przełączać się między katalogami, które znajdują się w całkowicie niezwiązanych ze sobą ścieżkach, na przykład /Project/Warnest/docs/
i ~/Dropbox/Projects/ds/test/
.
Ale nie chcę cd /[full-path]/
cały czas pisać . Czy są jakieś polecenia skrótów do przełączania się na wcześniej działające katalogi?
Jednym rozwiązaniem, o którym mogłem pomyśleć, jest dodanie zmiennych środowiskowych do bash
.profile
często używanych katalogów i cd
do nich przy użyciu tych zmiennych.
Ale czy jest na to inne rozwiązanie?
bash
shell
command-line
alias
cd-command
saiy2k
źródło
źródło
Odpowiedzi:
Jeśli przełączasz się między dwoma katalogami, możesz używać przycisków
cd -
do przechodzenia do przodu i do tyłu.źródło
Jest zmienna powłoki
CDPATH
wbash
iksh
acdpath
wzsh
:Możesz więc ustawić w swoim ~ / .bashrc:
Wtedy
cd docs
icd test
zabierze Cię do pierwszego znalezionego takiego katalogu. (Mam na myśli, że nawet jeśli katalog o tej samej nazwie będzie istniał w bieżącym katalogu,CDPATH
nadal będziemy się konsultować. JeśliCDPATH
będzie zawierał więcej katalogów mających podkatalogi o podanej nazwie, użyty zostanie pierwszy).źródło
$CDPATH
był.
(wpis jawny, tzn.:
Również działa). W przeciwnym razie skończy się dziwne zachowanie, w którymCDPATH
katalogi mają pierwszeństwo przed katalogami w bieżącym katalogu roboczym, czego prawdopodobnie nie chcesz.export
. W ten sposóbCDPATH
nie jest eksportowany do skryptów o potencjalnie dziwnych lub szkodliwych skutkach. Zobacz tutaj, aby uzyskać więcej dyskusji i przykładów.cd
odnosi się do POSIX for .Coś innego, co możesz wypróbować, to narzędzie o nazwie autojump . Przechowuje bazę danych wywołań tego aliasu (
j
domyślnie) i próbuje podejmować inteligentne decyzje o tym, dokąd chcesz się udać. Na przykład, jeśli często wpisujesz:Możesz użyć następujących elementów, aby dostać się tam w mgnieniu oka:
Jest dostępny z Debianem i Ubuntu i jest dołączany dla poszczególnych użytkowników w
~/.bashrc
lub~/.zshrc
domyślnie.źródło
cd -
warto wiedzieć, jeśli jeszcze tego nie wiesz, myślę, że jest to znacznie lepsze rozwiązanie niż obecna najlepsza odpowiedź.apt-get install autojump
w Ubuntu, ale także dla wielu innych, jak udokumentowano na ich stronie) do instalacji ogólnosystemowej, ale każdy użytkownik musi załadować go do środowiska powłoki, aby mógł zastąpić cd, aby śledzić gdzie idzieszsource /usr/share/autojump/autojump.sh
należy dodać do ~ / .bashrc dla autojump pracować .Jeśli jest to niewielka liczba katalogów, możesz użyć ich
pushd
do obracania między nimi:w przeciwieństwie do tego
cd -
możesz używać tego z więcej niż dwoma katalogamiZgodnie z sugestią Noacha, teraz używam tego:
przykładowe użycie:
itp. Oczywiście służy to tylko do obracania się w stosie i nie obsługuje dodawania nowych ścieżek - może powinienem zmienić jego nazwę.
źródło
pushd
ipopd
do przejścia, ale nie to, że pushd może obracać to, co dotychczas używane ...Używam
alias
w bashrc do robienia tych płyt.Jak na przykład:
źródło
~/.bashrc
lub/etc/bash.bashrc
. Nie korzystałem.profile
wcześniej, więc nie znam relacji między nimi :-(.bash_profile
i działa świetnie .. dzięki :)Znalazłem skrypt (zwykle o nazwie acd_funch.sh), który rozwiązał dla mnie ten problem. Dzięki temu możesz pisać,
cd --
aby zobaczyć 10 ostatnio używanych katalogów. Będzie to wyglądać mniej więcej tak:Aby przejść,
~/Music/thirddir
wystarczy wpisaćcd -2
Bibliografia
UWAGA: Skrypt został pierwotnie opublikowany w artykule z biuletynem linux, który jest dostępny tutaj: acd_func.sh - rozszerza płytę CD bash, aby przechowywać, wyświetlać i przeglądać historię odwiedzanych nazw katalogów .
źródło
Wypróbuj
cdable_vars
opcję powłoki w bash. Włączasz za pomocąshopt -s cdable_vars
.Następnie musisz ustawić swoje zmienne
export dir1=/some/path
. i na konieccd dir1
itp. Następnie możesz go włożyć,~/.bashrc
aby się przykleił.źródło
Użyj „pushd -n ” (zakładając, że używasz bash).
Dodaj do swojego ~ / .bashrc:
następnie,
cd ~
jest twoim domemcd ~1
jest~/Dropbox/Projects/ds/test/
cd ~2
jest/Project/Warnest/docs/
Można użyć
~1
,~2
etc w dokładnie taki sam sposób jak~
.źródło
Tutaj jest wiele dobrych sugestii. Które użyć zależy od tego, czy masz małą, stałą listę katalogów, które przełączasz, czy też szukasz bardziej ogólnego rozwiązania.
Jeśli jest to mała, stała lista, najłatwiejsze w użyciu byłoby ustawienie prostych aliasów (jak sugerował Felix Yan).
Jeśli szukasz bardziej uogólnionego rozwiązania (tj. Wielu różnych katalogów, zmieniających się w czasie), użyłbym pushd i popd (jak sugeruje Bezużyteczne). Osobiście uważam, że domyślny pushd / popd jest trudny w użyciu, zwłaszcza gdy zaczynasz przełączać się między wieloma folderami; napisałem jednak kilka poprawek, które znacznie mi ułatwiają. Dodaj następujące elementy do swojego bashrc:
pd
(w skróciepushd
), aby przejść do nowego folderu, pamiętając, gdzie byłeś.dirs
aby zobaczyć listę zapisanych katalogów.pd 3
aby przejść do numeru 3.Przykładowe użycie:
źródło
Następujące wydawały się działać w jednym przypadku, w którym testowałem, i możesz po prostu upuścić nazwy swoich katalogów jako dowiązania symboliczne w ~ / Bookmarks:
źródło
function
Linia przechodzi w swoim .bashrc (można go wpisać w terminalu, aby przetestować, ale to będzie już po zamknięciu tego okna), linie przed skonfigurować przypadek testowy „testdir” staje się nazwą/tmp
, a ostatnia linia to test sprawdzający, czy działa.Możesz zrobić gorzej niż wypróbować j2 .
Z pliku README:
Używam go szeroko i polecam.
źródło
Radziłbym używać zsh , tej powłoki jako bardzo dobrego uzupełnienia TAB dla katalogów, plików, a nawet opcji dla większości programów cli.
Używam tej powłoki od lat i tęskniłbym za funkcjonalnością, gdyby zniknęła. Pisanie skryptów w zsh jest również świetną zabawą, z dużą liczbą jedno-liniowych, które mogą ci pomóc na co dzień.
źródło
Z mojego doświadczenia wynika, że największym przyspieszeniem w nawigacji w powłoce jest użycie funkcji wyszukiwania historii. W Bash możesz wyszukiwać wstecz w historii poleceń, naciskając
Ctrl
+R
i wpisując jakiś wzorzec. Ten wzór jest następnie dopasowywany do poprzednich pozycji w historii - może to byćcd
komendy lub inne operacje - i sugestie są tworzone podczas pisania. Po prostu naciśnij Enter, aby ponownie uruchomić sugerowane polecenie. Nazywa się toreverse-search-history
w Bash i uwielbiam to. Oszczędza mi to wielu naciśnięć klawiszy i oszczędza moją pamięć wewnętrzną.To dobrze, ponieważ musisz tylko zapamiętać mniejszą część polecenia, na przykład
Drop
lubWa
rozróżnić dwa wpisy historiicd ~/Dropbox/Projects/ds/test/
icd /Project/Warnest/docs/
.źródło
Używam również tych aliasów (dodaj je do ~ / .bashrc):
O wiele szybciej jest z nimi przejść do wyższego katalogu (ale rozwiązuje tylko połowę nawigacji).
źródło
jeśli używasz zsh:
nie musisz pisać
cd
, po prostu wpisz ścieżkę do katalogu (/foo/bar/baz<Enter>
równa sięcd /foo/bar/baz<Enter>
)wymaga ustawienia
auto_cd
opcjiTab
klucza (/u/sh/pi<Tab>
rozwija się do/usr/share/pixmaps
; działa również dla nazw plików)źródło
shopt -s autocd
, więc nie jest już tylko dobrem zsh.Istnieje dość ładne narzędzie do szybkich zmian katalogu:
xd - eXtra szybki zmieniacz katalogów http://xd-home.sourceforge.net/xdman.html
trochę niewygodne jest to, że trzeba mapować go w profilu bash lub podobny, jak to tylko wyprowadza katalogu
możesz robić takie rzeczy jak:
źródło
f() { cd "$(xd -g "$@")"; }
poprawnie obsługiwała odstępy między katalogami i spacjami w argumentachxd
(prawdopodobnie nie potrzebujesz ścieżki). Jeśli nigdy nie używaszxd
w inny sposób, możesz to zrobić alternatywniexd() { cd "$(command xd -g "$@")"; }
(alternatywnie użyj/usr/bin/xd
zamiastcommand xd
- zawsze możesz uruchomić,command xd …
jeśli chcesz go ominąć).I tak nigdy nie powinieneś wpisywać pełnej ścieżki w powłoce. Zawsze możesz użyć:
zamiast
źródło
P*
chyba że Project jest jedynym plikiem zaczynającym się na P. Uzupełnianie tabulatora może się cyklicznie (domyślnie w większości powłok; musisz ponownie powiązać tabulacjęmenu-complete
w bash), i rozwiązuje się natychmiast w prostych przypadkach w ten sposób nie trzeba na to czekać/P*/W*/*/mydoc*
brzmienia brzmiałoby dobrze, dopóki pewnego dnia nie stworzysz innego pliku, który pasuje do tego globu, i nagle skończysz otwierając oba naraz./u*/*/g++
ma imponująco niewiele znaków, ale mam nadzieję, że nic innego w żadnym z podfolderów któregokolwiek z moich folderów głównych nieu
ma nazwyg++
. (Jako miły kompromis, w niektórych muszlach możesz użyć tabu, aby rozszerzać globusy w miejscu, w którym się znajdujesz)Istnieje również
OLDPWD
zmienna środowiskowa, która zgodnie z IEEE 1003.1 (POSIX) powinna być aktualizowana o poprzedni katalog roboczy za każdym razem, gdycd
zmienia katalog roboczy (dla ciekawskich wiersz 80244 na stronie 2506 IEEE 1003.1-2008).źródło
Istnieje również aplikacja „wcd” stworzona specjalnie w tym celu (również przeniesiona do Cygwina, ponieważ jestem na tym). Za jego pomocą możesz tworzyć skróty, zakładki katalogów. Obsługuje również dzikie karty. Czytanie strony podręcznika i dokumentów w / usr / share / wcd powinno bardzo pomóc.
http://manpages.ubuntu.com/manpages/hardy/man7/wcd.7.html
źródło
cdargs to najbardziej wydajne narzędzie do tworzenia zakładek do zakładek: http://www.youtube.com/watch?v=uWB2FIQlzZg
źródło
sudo apt-get cdargs
na ubuntu. BTW wideo na YouTube jest naprawdę złe, ale narzędzie jest świetne.Spróbuj fastcd ( https://github.com/frazenshtein/fastcd ) Ustawia hak, który rejestruje odwiedzone katalogi z bash. I ustawia skrypt jako alias „j”, który pokazuje ostatnio odwiedzane katalogi, z możliwością szybkiego cd (zacznij pisać, aby przefiltrować katalogi). Aby utworzyć alias „j”, wymagana jest modyfikacja .bashrc.
Zdobywanie narzędzia
Zainstaluj wymagane moduły
Źródło pliku set.sh w swoim bashrc
I zaktualizuj bashrc
Następnie wpisz „j” w konsoli
źródło
.bashrc
?Miałem to samo pytanie i najpierw znalazłem tę odpowiedź . Zainstalowałem narzędzie z ( https://github.com/rupa/z ).
To jest dokładnie to, czego szukasz, ponieważ z uczy się na podstawie poleceń cd i śledzi katalogi zgodnie z zasadą Frecency (częste i najnowsze). Więc po wykonaniu obu poleceń cd możesz zrobić coś takiego:
skakać do
/Project/Warnest/docs/
i~/Dropbox/Projects/ds/test/
odpowiednio. Argumenty z są wyrażeniami regularnymi, więc nie musisz nawet wpisywać pełnej nazwy folderu.źródło
Aktualizacja (2016): Teraz używam do tego FASD , co pozwala na wyszukiwanie rozmyte na podstawie twoich najnowszych katalogów.
Stworzyłem do tego narzędzie w Ruby. Pozwala używać plików YAML do deklarowania projektów.
Tutaj napisałem o tym mały artykuł: http://jrnv.nl/switching-projects-terminal-quickly/
Opublikowałem również źródło na GitHub: https://github.com/jeroenvisser101/project-switcher
źródło
Od wielu lat korzystam z własnego narzędzia CDhist . To aliasy polecenia cd i automatycznie utrzymuje stos katalogów.
źródło
Możesz użyć,
export
aby przypisać ścieżki katalogu do zmiennych, a następnie odwołać się do nich.źródło
export
wyciągi w swoim~/.bashrc
, a one zawsze będą dostępne.Kilka sugestii tutaj:
Najbardziej bezpośredni pomysł, dodam alias w pliku .profile
Następnie użyj
$ dir1
lubdir2
, can cdJeśli zawsze zmieniasz tylko dwa katalogi. używanie
cd -
spowoduje przełączanie między nimi.źródło
Rozwiązaniem, którego używam w tej sytuacji jest
screen
. Ekran startowy i utwórz okno dla każdego katalogu za pomocąC-a c
i nawiguj tam. Przełączaj się między oknami / katalogami za pomocąC-a n
lubC-a p
. Nazwij okna za pomocąC-a A
. Następnie możesz wyświetlić listę swoich okienC-a "
i nawigować za pomocą numeru lub nazwy okna. Ponieważ tak jestscreen
, możesz odłączyć się od sesji, oszczędzając miejsce do pracy i ponownie dołączyć później z tą samą konfiguracją.źródło
Wydaje się, że potrzebujesz w zasadzie pliku projektu dla twojego przepływu pracy. Z katalogami należącymi do twojej aktywności, jak w programistycznym IDE. Wypróbuj Narzędzia do nawigacji Zsh i dostępne
n-cd
tam narzędzie . Pozwoli ci to nawigować po ostatnio odwiedzanych folderach, a także zdefiniowaćHotlist
z wybranymi katalogami:n-cd
można powiązać z kluczową kombinacją za pomocą:źródło
TL; DR
Fish
do interaktywnej powłoki , które upoważniają natychmiast (fish
>zsh
>bash
).POSIX
/Bash
skryptów , które jest składnia najszerzej obsługiwane (POSIX
>Bash
>Zsh
>Fish
).Muszle
Po przetestowaniu różnych powłok tutaj jest moja opinia (w kolejności testowania / adopcji):
Bash
:Zsh
+oh-my-zsh
:cd /e/x1
→cd /etc/X11/
);Fish
+oh-my-fish
(bieżący) jest najlepszy od razu po wyjęciu z pudełka:Używaj znaczących aliasów
Każdą powłokę można rozszerzyć za pomocą,
function
aalias
oto te, których używam, związane z twoim problemem (kompatybilne z POSIX):Istnieją podstawowe, ale naprawdę znaczące, łatwe do zapamiętania i autouzupełniania.
Poznaj swoją muszlę
Skonfigurować
CDPATH
, aby dodać najczęściej używanych katalogów (np~/projects/
,/etc/init.d/
), dzięki czemu można szybko przechodzić do nich.Zobacz odpowiedź manatwork, aby uzyskać szczegółowe informacje na temat mroe
CDPATH
.Spotkaj się i czytaj
źródło
exit
, wychodzisz z powłoki interaktywnej. Te „sensowne aliasy” mogą po prostu byćalias back='cd -'
ialias up='cd ..'
- ale nie martw się, te polecenia nigdy nie zwrócą wartości false (żaden poprzedni katalog? Nie odeśle cię do domu! Już w katalogu głównym? To nie jest możliwe!) I dlatego nigdy nie wyjdziesz . Weź również pod uwagęalias back='cd $OLDPWD'
(zwróć uwagę na pojedyncze cudzysłowy), ponieważ nie będzie on miał żadnych danych wyjściowych (cd -
mówi ci, dokąd cię wysyła, co jest prawdopodobnie niepotrzebne, ponieważ twój monit zawiera te informacje)anc
to narzędzie linii cmd (skrót od anchor), które utrzymuje zakładki katalogów. (do tej pory testowane tylko z bash)W Twoim przypadku:
dodaje to oba katalogi do listy zakotwiczonych (pomyśl zakładki)
teraz, jeśli chcesz przeskoczyć
/Project/Warnest/docs/
z dowolnego miejsca w systemie:a jeśli chcesz przejść do
~/Dropbox/Projects/ds/test/
pisania:Oprócz dopasowywania tekstu do ścieżek dodanych do zakładek anc ma wiele innych wygodnych sposobów na przechodzenie między katalogami.
uruchamia tryb interaktywny, który wyświetla wszystkie zakładki według numeru, więc wystarczy wpisać liczbę
Jeśli wpiszesz:
zostanie wyświetlona lista pasująca do wszystkich zakładek (w twoim przypadku obie zakładki), którą możesz wybrać za pomocą klawiszy strzałek, jest to bardzo szybki i intuicyjny sposób.
Uzyskaj anc na stronie github projektu: https://github.com/tobimensch/anc
Istnieje również plik README z przykładowym użyciem.
Pełne ujawnienie: jestem autorem tego skryptu. Mam nadzieję, że niektórzy uznają to za przydatne.
źródło