Warto przejść na zsh do codziennego użytku? [Zamknięte]


192

Domyślną powłoką w Mac OS X jest bash, z której ogólnie jestem zadowolony. Po prostu biorę to za pewnik. Byłoby naprawdę miło, gdyby ukończył automatycznie więcej rzeczy i słyszałem o zshtym dobre rzeczy . Ale tak naprawdę nie mam ochoty spędzać godzin na majstrowaniu przy ustawieniach, aby nieznacznie poprawić wykorzystanie mojego wiersza poleceń, ponieważ moje życie w wierszu poleceń nie jest takie złe.

(Rozumiem, że bashmożna go również skonfigurować tak, aby autouzupełnianie przebiegało bardziej sprytnie. Nie jestem zainteresowany konfiguracją.)

Czy przejście na zsh, nawet w niewielkiej liczbie przypadków, ułatwi moje życie? A może jest to tylko lepsza powłoka, jeśli poświęcisz czas, aby dowiedzieć się, dlaczego jest lepsza? (Przykłady też byłyby fajne :))


@ Rodney Amato i @ Vulcan Eager podają dwa dobre powody, aby odpowiednio trzymać się bashi zmieniać zsh. Wygląda na to, że będę musiał zbadać oba! No cóż:)

Czy jest ktoś z opinią obu stron argumentu?


14
Ponieważ zsh jest (prawie) nadzbiorem bash, możesz zacząć od przejścia do zsh i używania go jak bash. Następnie możesz nauczyć się klejnotów zsh po trochu.
orip

Jeśli masz trochę dostosowania bash i często używasz powłoki wewnątrz emacsa, nie wydaje się to trywialne.
Wysłałem

Tylko rzeczą lubię o zsh jest to, że (przynajmniej na Ubuntu) będziesz musiał go skonfigurować samodzielnie (pod warunkiem pewnych rozsądnych domyślnych, które można później na majstrować przy zamiast niego) po raz pierwszy go uruchomić. Jeśli dasz sobie radę, zsh jest najlepszy!
zrajm

Odpowiedzi:


68

Do codziennego użytku prawdopodobnie lepiej jest trzymać się bash i po prostu instalować zakończenie bash.

Instalacja jest dość prosta, weź bash-uzupełnianie-20060301.tar.gz z http://www.caliban.org/bash/index.shtml#completion i rozpakuj go za pomocą

tar -xzvf bash-completion-20060301.tar.gz

następnie skopiuj plik bash_completion / bash_completion do / etc za pomocą

sudo cp bash_completion/bash_completion /etc

który poprosi cię o podanie hasła. Prawdopodobnie będziesz chciał utworzyć katalog /etc/bash_completion.d dla dodatkowych skryptów uzupełniających (na przykład mam tam skrypt ukończenia git).

Gdy to zrobisz, ostatnim krokiem jest upewnienie się, że plik .bash_profile w twoim katalogu domowym ma

if [ -f /etc/bash_completion ]; then
     . /etc/bash_completion 
fi

w nim, aby załadować plik ukończenia po zalogowaniu.

Aby to przetestować, po prostu otwórz nowy terminal i spróbuj wykonać cvs, a powinno wyświetlić opcje cvs na liście ukończeń.


Próbowałem powyższego, jednak później, gdy zaczynam bash, pojawia się 4 błąd „oczekiwany jeden operator” i 4 błędy „zbyt wiele argumentów”.
AnnanFay

12
Jeśli używasz homebrew na OSX, możesz uruchomić brew install bash-completion.
Nathan Villaescusa

3
Bash-Completion2 jest lepszy! W systemie OS X:brew tap homebrew/versions; brew install bash-completion2
Zearin

85

Osobiście uwielbiam Zsh.

Ogólnie rzecz biorąc, prawdopodobnie nie zauważysz różnicy między tym a bash, dopóki nie będziesz chciał szybko robić takich rzeczy jak rekurencyjne globowanie:

  • **/*.c na przykład.

Lub użyj aliasów sufiksów, aby powiązać określone programy z różnymi sufiksami, abyś mógł je „bezpośrednio wykonać”. Poniższy alias pozwala „uruchomić” plik źródłowy C w wierszu polecenia, po prostu wpisując ./my_program.c- co zadziała dokładnie tak, jak podczas wpisywania vim ./my_program.c. (Coś w rodzaju odpowiednika podwójnego kliknięcia ikony pliku).

  • alias -s c=vim

Lub wydrukuj nazwy zmodyfikowanych dzisiaj plików:

  • print *(e:age today now:)

Prawdopodobnie możesz zrobić wszystkie te rzeczy w bash, ale moje doświadczenie z Zsh jest takie, że jeśli jest coś, co chcę zrobić, prawdopodobnie znajdę to u miłośników Zsh . Uważam też, że książka „ From Bash to Z-Shell ” jest bardzo przydatna.

Zabawa umysłem zadziwiająco duża liczba opcji to także dobra zabawa!


1
Dwa pierwsze przykłady tutaj nic dla mnie nie znaczą (zwykły użytkownik bash rozważający przejście na zsh) - czy mógłbyś wyjaśnić, co oznacza „rekurencyjne globowanie”, lub co masz na myśli przez „powiązanie określonych progresji z różnymi sufiksami”?
aaronsnoswell

5
@aaronsnoswell: „Globowanie rekurencyjne” oznacza przeszukiwanie podkatalogu i wszystkich jego podkatalogów w poszukiwaniu plików, których nazwy pasują do określonego wzorca. Bash nie robi tego domyślnie; możesz findlub locateszukać rekurencyjnie. Ale kiedy pozwalasz wyszukiwaniu na inny program, tracisz granice między nazwami (chyba, że ​​jesteś ostrożny), a także masz dostęp do wewnętrznych możliwości globowania powłoki i po prostu musisz zrobić to, co zapewnia inny program, lub potokuj wyniki przez program taki jak grep, awklub sed(wszystkie dość złożone same w sobie).
cHao

6
W dzisiejszych czasach możesz ustawić globstaropcję bash, aby umożliwić wyszukiwanie rekurencyjne, jak wspomniano powyżej. Jednak na pewno nie było tak w przypadku, gdy napisano tę odpowiedź.
cHao

Dzięki glob_star_shortin zshmożesz teraz zrobić **.c, co jest interpretowane jako **/*.c.
PythonNut

Używam zsh 5.3i biorę command not found: agezprint *(e:age today now:)
Timo

38

Przełącz na zsh. Będziesz miał dostęp do:

  1. zmv: Możesz zrobić: zmv '(*).mp3' '$1.wma'dla tysięcy plików.
  2. zcalc: Niezwykle wygodny kalkulator, lepszy niż bc.
  3. zparseopts: Jednoliniowy do analizowania dowolnych złożonych opcji podanych w skrypcie.
  4. autopushd: Zawsze możesz zrobić popdpo, cdaby wrócić do poprzedniego katalogu.
  5. Obsługa zmiennoprzecinkowa. Jest potrzebny od czasu do czasu.
  6. Obsługa skrótów. Czasami są tylko kluczową cechą.

17
Przykładem zmv powinno być zmv '(*). Mp3' '$ 1.wma'. Popraw to, taka niedbała prezentacja może być myląca i frustrująca dla niedoświadczonych.
qed

5
@TravisBear autoload zcalc; zcalc(chociaż sam piszę tylko wtedy, pythongdy potrzebuję kalkulatora).
Francisco

9
„autopushd: Zawsze możesz zrobić popd po cd, aby wrócić do poprzedniego katalogu.” Czy to nie jest odpowiednik po prostu cd -?
minhaz1

4
zmvi zcalcnie są dostępne po wyjęciu z pudełka. Nie jest jasne, czy zmvto tylko zmiana nazwy plików; Myślałem, że mogłeś konwertować format. Nie wiem, co w ogóle oznacza obsługa „skrótów”. Ten post wydaje się być „użyteczny” tylko dla osób, które już znają Zsh.
mpen

1
@ Mark W tym przypadku „skrót” jest synonimem „tablicy asocjacyjnej”. bash4 został wydany zaledwie kilka miesięcy przed tą odpowiedzią.
chepner

13

Jeśli wszystko, czego chcesz używać ZSH, to lepsze zakończenie, konfiguracja jest dość łatwa. Umieść to w swoim ~ / .zshrc:

autoload -U zutil      # [1]
autoload -U compinit   # [2]
autoload -U complist   # [3]
compinit

Warto jednak sprawdzić wszystkie inne wspaniałe funkcje ZSH. Powyższy przykład da ci dość prosty monit z dobrym zakończeniem. Jeśli nie chcesz majstrować przy konfiguracjach, ale chcesz zobaczyć, co ZSH może dla Ciebie zrobić, Google dla „zshrc”, a na początek przygotujesz kilka gotowych konfiguracji.


3
Do jakich rzeczy będzie to uzupełnienie? Nie lubię losowo dodawać rzeczy, nie wiedząc, co to robi.
mpen

6

Zsh ma konfigurację GUI konsoli. Możesz go skonfigurować dość szybko i łatwo, bez konieczności majstrowania przy plikach konfiguracyjnych. Nie sądzę, że będziesz potrzebował dużo czasu, aby go skonfigurować, prawdopodobnie 10 sekund przy użyciu samych ustawień domyślnych, więc śmiało spróbuj.


10
Jak uzyskać dostęp do tego „GUI konsoli”?
mpen

Zazwyczaj jest to pierwsza rzecz, którą widzisz, gdy zshładujesz bez powiązanych plików kropkowych. Aby zdobyć go ręcznie, spróbujautoload -U +X zsh-newuser-install; zsh-newuser-install -f
Adam Katz

3

Staale mówi o programie podobnym do kreatora (CUI), który automatycznie uruchamia się przy pierwszym uruchomieniu zsh. Odpowiedz na kilka pytań, wyświetl / zmień ustawienia domyślne i skonfiguruj je dla siebie.

IBM developerWorks ma świetne zasoby dotyczące zsh.

Nie korzystałem z bardzo zaawansowanych funkcji i do tej pory nie spotkałem się z poważnymi różnicami, które powinny przeszkadzać komuś pochodzącemu z bash.

Kilka przykładów:

  • !? wzorzec <Tab> automatycznie uzupełni się do ostatniego polecenia w historii zgodnego wzorca. Bardzo przydatne.

  • Możesz skonfigurować monit w RHS. Jednym z zastosowań jest utrzymanie monitu o stałej szerokości po lewej stronie, aby wszystkie polecenia ładnie zrównały się podczas wyświetlania pwd (lub cokolwiek o zmiennej szerokości) jako monitu po prawej stronie.

  • Możesz przekierować dane wejściowe z wielu plików (jeszcze tego nie wypróbować): cat <plik1 <plik2 <plik3

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.