Szybka nawigacja w katalogu w powłoce bash


119

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 .profileczęsto używanych katalogów i cddo nich przy użyciu tych zmiennych.

Ale czy jest na to inne rozwiązanie?


Przydałyby się również linki symboliczne. en.wikipedia.org/wiki/…
user606723

Odpowiedzi:


135

Jeśli przełączasz się między dwoma katalogami, możesz używać przycisków cd -do przechodzenia do przodu i do tyłu.


13
To, jak mi to umyka od tak dawna, jest tajemnicą. Dziękuję bardzo za tę doskonałą wskazówkę.
Pan Shickadance,

3
+1 Z pewnością jeden z moich ulubionych i taki, który jakoś wielu ekspertów „przegapiło”.
Michael Durrant

62

Jest zmienna powłoki CDPATHw bashi ksha cdpathw zsh:

CDPATH    The search path for the cd command. This is a colon-separated
          list of directories in which the shell looks for destination
          directories specified by the cd command.

Możesz więc ustawić w swoim ~ / .bashrc:

export CDPATH=/Project/Warnest:~/Dropbox/Projects/ds

Wtedy cd docsi cd testzabierze 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, CDPATHnadal będziemy się konsultować. Jeśli CDPATHbędzie zawierał więcej katalogów mających podkatalogi o podanej nazwie, użyty zostanie pierwszy).


16
Należy wspomnieć, że ogólnie rzecz biorąc, będziesz chciał, aby pierwszy wpis $CDPATHbył .(wpis jawny, tzn. :Również działa). W przeciwnym razie skończy się dziwne zachowanie, w którym CDPATHkatalogi mają pierwszeństwo przed katalogami w bieżącym katalogu roboczym, czego prawdopodobnie nie chcesz.
jw013

4
Robię prawie to samo, ale bez export. W ten sposób CDPATHnie jest eksportowany do skryptów o potencjalnie dziwnych lub szkodliwych skutkach. Zobacz tutaj, aby uzyskać więcej dyskusji i przykładów.
Telemachus

„bash i ksh i cdpath w zsh” ... i w tcsh (odpowiadając na to pytanie na Super User i znalazłem to podczas szukania podobnych odpowiedzi na SE).
Hennes

Myślę, że jest to określone przez POSIX. Przynajmniej cdodnosi się do POSIX for .
mikeserv

48

Coś innego, co możesz wypróbować, to narzędzie o nazwie autojump . Przechowuje bazę danych wywołań tego aliasu ( jdomyślnie) i próbuje podejmować inteligentne decyzje o tym, dokąd chcesz się udać. Na przykład, jeśli często wpisujesz:

j ~/Pictures

Możesz użyć następujących elementów, aby dostać się tam w mgnieniu oka:

j Pic

Jest dostępny z Debianem i Ubuntu i jest dołączany dla poszczególnych użytkowników w ~/.bashrclub ~/.zshrcdomyślnie.


5
Autojump jest prawdopodobnie najlepszym narzędziem do tego, budowanie bazy danych popularnych katalogów zajmuje trochę czasu, ale kiedy to zrobi, myślę, że przekonasz się, że nie możesz bez niego żyć. Wiem, że za każdym razem, gdy jestem na czyimś komputerze, czuję się kaleką.
quodlibetor

1
dzięki kocham to narzędzie! I chociaż cd -warto wiedzieć, jeśli jeszcze tego nie wiesz, myślę, że jest to znacznie lepsze rozwiązanie niż obecna najlepsza odpowiedź.
Użytkownik

Zainstalowano w całym systemie na jakich systemach?
ctrl-alt-delor

1
@richard Jest dostępny jako pakiet (np. apt-get install autojumpw 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 idziesz
nealmcb

Ważne jest, aby powiedzieć, source /usr/share/autojump/autojump.shnależy dodać do ~ / .bashrc dla autojump pracować .
Pablo A,

39

Jeśli jest to niewielka liczba katalogów, możesz użyć ich pushddo obracania między nimi:

# starting point
$ pwd
/Project/Warnest/docs
# add second dir and change to it
$ pushd ~/Dropbox/Projects/ds/test
~/Dropbox/Projects/ds/test /Project/Warnest/docs
# prove we're in the right place
$ pwd
~/Dropbox/Projects/ds/test
# swap directories
$ pushd
/Project/Warnest/docs ~/Dropbox/Projects/ds/test

w przeciwieństwie do tego cd -możesz używać tego z więcej niż dwoma katalogami


Zgodnie z sugestią Noacha, teraz używam tego:

function pd()
{
    if [[ $# -ge 1 ]];
    then
        choice="$1"
    else
        dirs -v
        echo -n "? "
        read choice
    fi
    if [[ -n $choice ]];
    then
        declare -i cnum="$choice"
        if [[ $cnum != $choice ]];
        then #choice is not numeric
            choice=$(dirs -v | grep $choice | tail -1 | awk '{print $1}')
            cnum="$choice"
            if [[ -z $choice || $cnum != $choice ]];
            then
                echo "$choice not found"
                return
            fi
        fi
        choice="+$choice"
    fi
    pushd $choice
}

przykładowe użycie:

# same as pushd +1
$ pd 1

# show a prompt, choose by number
$ pd
 0 ~/Dropbox/Projects/ds/test
 1 /Project/Warnest/docs
 2 /tmp
? 2
/tmp ~/Dropbox/Projects/ds/test /Project/Warnest/docs

# or choose by substring match
$ pd
 0 /tmp
 1 ~/Dropbox/Projects/ds/test
 2 /Project/Warnest/docs
? doc
/Project/Warnest/docs /tmp ~/Dropbox/Projects/ds/test

# substring without prompt
$ pd test
~/Dropbox/Projects/ds/test /Project/Warnest/docs /tmp

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ę.


6
Ooh, wiedziałem o pushdi popddo przejścia, ale nie to, że pushd może obracać to, co dotychczas używane ...
Izkata

14

Używam aliasw bashrc do robienia tych płyt.
Jak na przykład:

alias wdoc='cd ~/Project/Warnest/docs'
alias dstest='cd ~/Dropbox/Projects/ds/test'

czy bashrc to plik podobny do .profile? w którym muszę dodać te linie?
saiy2k

~/.bashrclub /etc/bash.bashrc. Nie korzystałem .profilewcześniej, więc nie znam relacji między nimi :-(
Felix Yan

Skrypty bashrc będą uruchamiane za każdym razem, gdy otwierasz terminal. profil przy starcie.

dodałem te linie do mojego .bash_profilei działa świetnie .. dzięki :)
saiy2k

Mam kilka konkretnych folderów projektów, do których regularnie chodzę, jest to najłatwiejszy sposób na ich skonfigurowanie i utrzymanie. Również dla mnie skutkuje to absolutną najmniejszą liczbą znaków wpisanych tutaj ze wszystkich rozwiązań. POCAŁUNEK! :-)
moodboom

11

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:

0  ~/Documents/onedir
1  ~/Music/anotherdir
2  ~/Music/thirddir
3  ~/etc/etc

Aby przejść, ~/Music/thirddirwystarczy 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 .


Ten sam skrypt został również opublikowany w Linux Gazette, numer 109, grudzień 2004 .
Serge Stroobandt,

@Dean Link prowadzi do teledysku i mówi, że Geocities zostało zamknięte.
somethingSomething

1
@somethingSomething Dodano alternatywne linki.
Dziekan

historia | grep cd
user2180794

10

Wypróbuj cdable_varsopcję powłoki w bash. Włączasz za pomocą shopt -s cdable_vars.

Następnie musisz ustawić swoje zmienne export dir1=/some/path. i na koniec cd dir1itp. Następnie możesz go włożyć, ~/.bashrcaby się przykleił.


10

Użyj „pushd -n ” (zakładając, że używasz bash).

Dodaj do swojego ~ / .bashrc:

pushd -n /Project/Warnest/docs/
pushd -n ~/Dropbox/Projects/ds/test/

następnie,

cd ~ jest twoim domem

cd ~1 jest ~/Dropbox/Projects/ds/test/

cd ~2 jest /Project/Warnest/docs/

Można użyć ~1, ~2etc w dokładnie taki sam sposób jak ~.


7

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:

alias dirs='dirs -v'
pd () 
{ 
    if [ "$1" ]; then
        pushd "${1/#[0-9]*/+$1}";
    else
        pushd;
    fi > /dev/null
}
  • Użyj pd(w skrócie pushd), aby przejść do nowego folderu, pamiętając, gdzie byłeś.
  • Użyj, dirsaby zobaczyć listę zapisanych katalogów.
  • Użyj, pd 3aby przejść do numeru 3.

Przykładowe użycie:

$ PS1='\w\$ '   ## just for demo purposes
~$ pd ~/Documents/data
~/Documents/data$ pd ../spec
~/Documents/spec$ pd ~/Dropbox/Public/
~/Dropbox/Public$ pd /tmp
/tmp$ pd /etc/defaults/
/etc/defaults$ dirs
 0  /etc/defaults
 1  /tmp
 2  ~/Dropbox/Public
 3  ~/Documents/spec
 4  ~/Documents/data
 5  ~
/etc/defaults$ pd 2
~/Dropbox/Public$ dirs
 0  ~/Dropbox/Public
 1  ~/Documents/spec
 2  ~/Documents/data
 3  ~
 4  /etc/defaults
 5  /tmp
~/Dropbox/Public$ pd 4
/etc/defaults$ dirs
 0  /etc/defaults
 1  /tmp
 2  ~/Dropbox/Public
 3  ~/Documents/spec
 4  ~/Documents/data
 5  ~
/etc/defaults$ pd 3
~/Documents/spec$ popd
~/Documents/data ~ /etc/defaults /tmp ~/Dropbox/Public
~/Documents/data$ 

6

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:

mkdir "$HOME/Bookmarks"
ln -s /tmp "$HOME/Bookmarks/testdir"

function ccd() { cd $(readlink "$HOME/Bookmarks/$1") ; }

ccd testdir && echo $PWD
# gives /tmp

tę funkcję ccd () trzeba wpisać w wierszu polecenia terminala lub gdzie indziej? czy możesz wyjaśnić?
saiy2k

1
@ saiy2k: przepraszam, tak. functionLinia 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.
Ulrich Schwarz

6

Możesz zrobić gorzej niż wypróbować j2 .

Z pliku README:

Spędzasz dużo czasu na cd-scenie wokół złożonego drzewa katalogów?

j śledzi, gdzie byłeś i ile czasu tam spędzasz, i zapewnia wygodny sposób na przejście do katalogów, których faktycznie używasz.

Używam go szeroko i polecam.


5

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ń.


Nie ma potrzeby zmiany na zsh dla uzupełniania TAB, ponieważ bash ma to samo. Dla innych funkcji może, ale nie dla tego.
Peer Stritzinger

1
@PeerStritzinger Bash wprowadził tego rodzaju funkcjonalność w BASH 4.0, ale w porównaniu z zsh, wciąż jest daleko w tyle. Powiedzenie „wszystko jedno” jest z pewnością błędne.
polemon

No cóż, Zsh jest übershellem, ale tylko dla uzupełnienia tabulacji nie ma potrzeby zmiany (pytanie zostało zadane dla bash). Poza tym bash 4.0 został wprowadzony około 3 lata temu ...
Peer Stritzinger

5

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+ Ri wpisując jakiś wzorzec. Ten wzór jest następnie dopasowywany do poprzednich pozycji w historii - może to być cdkomendy lub inne operacje - i sugestie są tworzone podczas pisania. Po prostu naciśnij Enter, aby ponownie uruchomić sugerowane polecenie. Nazywa się to reverse-search-historyw 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 Droplub Warozróżnić dwa wpisy historii cd ~/Dropbox/Projects/ds/test/i cd /Project/Warnest/docs/.


5

Używam również tych aliasów (dodaj je do ~ / .bashrc):

alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'

O wiele szybciej jest z nimi przejść do wyższego katalogu (ale rozwiązuje tylko połowę nawigacji).


1
Są to pomocne aliasy, ale nie jestem do końca pewien, czy będą pasować do potrzeb PO. Możesz rozważyć rozszerzenie swojej odpowiedzi, aby zasugerować, w jaki sposób mogą one być bezpośrednio pomocne w przypadku problemu PO.
HalosGhost

4

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_cdopcji

  • możesz rozwinąć skrócone ścieżki za pomocą Tabklucza ( /u/sh/pi<Tab>rozwija się do /usr/share/pixmaps; działa również dla nazw plików)

3
Bash 4 zyskał shopt -s autocd, więc nie jest już tylko dobrem zsh.
Gilles

4

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

# function to do `cd` using `xd`
# -g turns generalized directory search command processing on
# which improves the whole thing a bit
f() 
{
        cd `/usr/bin/xd -g $*`
}

możesz robić takie rzeczy jak:

# change to /var/log/a* (gives you a list to choose from)    
f vla
# to skip the list and go directly to /var/log/apache2
f vlapach

Zmień funkcję, aby f() { cd "$(xd -g "$@")"; }poprawnie obsługiwała odstępy między katalogami i spacjami w argumentach xd(prawdopodobnie nie potrzebujesz ścieżki). Jeśli nigdy nie używasz xdw inny sposób, możesz to zrobić alternatywnie xd() { cd "$(command xd -g "$@")"; }(alternatywnie użyj /usr/bin/xdzamiast command xd- zawsze możesz uruchomić, command xd …jeśli chcesz go ominąć).
Adam Katz

4

I tak nigdy nie powinieneś wpisywać pełnej ścieżki w powłoce. Zawsze możesz użyć:

soffice /P*/W*/*/mydoc*

zamiast

soffice /Project/Warnest/docs/mydoc.odt

1
To jak wypełnianie tabulatorów, ale gorsze pod każdym względem
Michał Mrożek

Nie możesz tego zrobić z uzupełnianiem tabulatorów przy użyciu odpowiedniego naciśnięcia klawisza, chyba że Project to tylko plik zaczynający się na P, itp. Ponadto musisz za każdym razem czekać na zakończenie, używając * nie musisz czekać.
gena2x

Myślę, że masz to do tyłu - nie możesz tego zrobić, 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-completew bash), i rozwiązuje się natychmiast w prostych przypadkach w ten sposób nie trzeba na to czekać
Michael Mrozek

Jeśli chodzi o „nie możesz tego zrobić” - możesz, spróbuj, tracisz cały punkt, jeśli uważasz, że nie możesz. Spróbuj echo / u * / b * / g ++
gena2x

1
Rozumiem, co masz na myśli, jest to szybsze, o ile masz pewność, że wpisałeś jednoznaczną ścieżkę, ale coś w rodzaju /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 nie uma nazwy g++. (Jako miły kompromis, w niektórych muszlach możesz użyć tabu, aby rozszerzać globusy w miejscu, w którym się znajdujesz)
Michael Mrozek

3

Istnieje również OLDPWDzmienna środowiskowa, która zgodnie z IEEE 1003.1 (POSIX) powinna być aktualizowana o poprzedni katalog roboczy za każdym razem, gdy cdzmienia katalog roboczy (dla ciekawskich wiersz 80244 na stronie 2506 IEEE 1003.1-2008).


3

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



3

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

cd ~; mkdir Soft; cd Soft
git clone https://github.com/frazenshtein/fastcd

Zainstaluj wymagane moduły

pip install --user urwid

Źródło pliku set.sh w swoim bashrc

echo -e "\nsource /home/$USER/Soft/fastcd/set.sh\n" >> ~/.bashrc

I zaktualizuj bashrc

source ~/.bashrc

Następnie wpisz „j” w konsoli


Jak to działa? Jeśli to aliasy, co to narzędzie robi dla Ciebie, czego nie możesz zrobić ręcznie edytując .bashrc?
G-Man,

Uruchamia demona, który rejestruje odwiedzone katalogi w ~ / .fastcd dla uruchomionych powłok (bash). „j” uruchamia narzędzie, które pokazuje ostatnio odwiedzane katalogi, z możliwością szybkiego cd. Aby utworzyć alias „j”, wymagana jest modyfikacja .bashrc. Więcej informacji można znaleźć w kodzie źródłowym
Sam Toliman

Dziękuję za szybką odpowiedź. Jest to rodzaj informacji, która powinna znaleźć się w odpowiedzi. Proszę edytować swoje odpowiedzi na uwzględnienie tej informacji.
G-Man,

3

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:

z docs
z ds

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.



2

Od wielu lat korzystam z własnego narzędzia CDhist . To aliasy polecenia cd i automatycznie utrzymuje stos katalogów.


2

Możesz użyć, exportaby przypisać ścieżki katalogu do zmiennych, a następnie odwołać się do nich.

export dir1=/Project/Warnest/docs/
export dir2= ~/Dropbox/Projects/ds/test/
cd $dir1
cd $dir2

Tak, wystarczy na kilka ulubionych reż. Nie trzeba instalować żadnych innych narzędzi. Wystarczy umieścić exportwyciągi w swoim ~/.bashrc, a one zawsze będą dostępne.
wisbucky

1

Kilka sugestii tutaj:

Najbardziej bezpośredni pomysł, dodam alias w pliku .profile

vi ~/.profile
alias dir1='cd /myhome/onedir'
alias dir2='cd /jimmy/anotherdir'

Następnie użyj $ dir1 lub dir2, can cd

Jeśli zawsze zmieniasz tylko dwa katalogi. używanie cd -spowoduje przełączanie między nimi.


1

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 ci nawiguj tam. Przełączaj się między oknami / katalogami za pomocą C-a nlub C-a p. Nazwij okna za pomocą C-a A. Następnie możesz wyświetlić listę swoich okien C-a "i nawigować za pomocą numeru lub nazwy okna. Ponieważ tak jest screen, możesz odłączyć się od sesji, oszczędzając miejsce do pracy i ponownie dołączyć później z tą samą konfiguracją.


1

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-cdtam narzędzie . Pozwoli ci to nawigować po ostatnio odwiedzanych folderach, a także zdefiniować Hotlistz wybranymi katalogami:

n-cd

n-cd można powiązać z kluczową kombinacją za pomocą:

zle -N znt-cd-widget

bindkey "^ T" znt-cd-widget


1

TL; DR

  1. Użyj Fishdo interaktywnej powłoki , które upoważniają natychmiast ( fish> zsh> bash).
  2. Zastosowanie POSIX/ Bashskryptó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:
    • automatyczne uzupełnianie: podstawowe;
    • rozszerzenie ścieżki: nie;
    • skrypty: doskonałe.
  • Zsh+ oh-my-zsh:
    • autouzupełnianie: dobre (cykliczne);
    • rozwinięcie ścieżki: tak ( cd /e/x1cd /etc/X11/);
    • skryptowanie: dobrze.
  • Fish+ oh-my-fish(bieżący) jest najlepszy od razu po wyjęciu z pudełka:
    • autouzupełnianie: opcje natywne i obsługiwane;
    • rozszerzenie ścieżki: tak;
    • skryptowanie: zbyt duża różnica w stosunku do kompatybilnego z POSIX.

Używaj znaczących aliasów

Każdą powłokę można rozszerzyć za pomocą, functiona aliasoto te, których używam, związane z twoim problemem (kompatybilne z POSIX):

back () {  # go to previous visited directory
        cd - || exit
}

up () {  # go to parent directory
        cd ..|| exit
}

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 mroeCDPATH .

Spotkaj się i czytaj


Kiedy wywołuje się funkcja powłoki exit, wychodzisz z powłoki interaktywnej. Te „sensowne aliasy” mogą po prostu być alias back='cd -'i alias 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)
Adam Katz

1

ancto 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:

anc a /Project/Warnest/docs/ ~/Dropbox/Projects/ds/test/

dodaje to oba katalogi do listy zakotwiczonych (pomyśl zakładki)

teraz, jeśli chcesz przeskoczyć /Project/Warnest/docs/z dowolnego miejsca w systemie:

anc Warn

a jeśli chcesz przejść do ~/Dropbox/Projects/ds/test/pisania:

anc ds test

Oprócz dopasowywania tekstu do ścieżek dodanych do zakładek anc ma wiele innych wygodnych sposobów na przechodzenie między katalogami.

anc i

uruchamia tryb interaktywny, który wyświetla wszystkie zakładki według numeru, więc wystarczy wpisać liczbę

Jeśli wpiszesz:

anc Pro[TAB]

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.