Jako użytkownik Linuksa zawsze używałem bash, ponieważ był domyślny dla każdej używanej dystrybucji. Ludzie używający innych systemów uniksowych, takich jak BSD, wydają się używać znacznie innych powłok. Aby trochę się nauczyć, postanowiłem wypróbować Zsh.
Jako użytkownik bash:
- Jakie funkcje będę tęsknić?
- A na które należy uważać?
Odpowiedzi:
W tym temacie na innych stronach Stack Exchange było już sporo aktywności. O ile pamiętam (po latach temu²) przeszedłem z basha na zsh, to, że niczego mi nie umknęło. Dużo zyskałem; Oto, jak myślę, proste, specyficzne dla Zsh funkcje, których najczęściej używam:
Funkcja zsh, której najbardziej brakuje mi, gdy czasami używam bash, to autocd: w zsh wykonanie katalogu oznacza przejście do niego, pod warunkiem, że
autocd
włączysz tę opcję.Kolejną bardzo przydatną funkcją jest fantazyjne globbing. Te
hieroglifypostacie są trochę trudne do zapamiętania, ale bardzo wygodne (jak to często szybciej wyszukać je niż napisać odpowiednikfind
polecenia). Kilka prostszych przykładów:foo*~*.bak
= wszystkie dopasowaniafoo*
oprócz tych pasujących*.bak
foo*(.)
= tylko zwykłe dopasowanie plikówfoo*
foo*(/)
= tylko dopasowanie katalogówfoo*
foo*(-@)
= tylko zawieszenie dowiązań symbolicznychfoo*
foo*(om[1,10])
= 10 najnowszych plików dopasowaniefoo*
foo*(Lm+1)
= tylko pliki o wielkości> 1 MB = w katalogu i wszystkich podkatalogi rekurencyjnie⁴dir/**/foo*
foo*
dir
W przypadku fantazyjnych nazw
zmv
wbudowane może być przydatne. Na przykład, aby skopiować każdyfile
dofile.bak
:zmv -C '(*)(#q.)' '$1.bak'
Zarówno bash, jak i zsh mają system przyzwoitego ukończenia, który należy jawnie włączyć (
. /etc/bash_completion
lubautoload -U compinit; compinit
). Zsh's jest znacznie bardziej konfigurowalny i ogólnie bardziej elegancki.Jeśli uruchomisz zsh bez a
.zshrc
, uruchomi się interaktywne menu, które pozwala wybrać opcje konfiguracji. (Niektóre dystrybucje mogą to wyłączyć; w takim przypadku uruchomautoload zsh-newuser-install; zsh-newuser-install
.) Zalecam włączenie zalecanych opcji historii, włączenie uzupełniania („w nowym stylu”) i włączenie „wspólnych opcji powłoki” opróczbeep
. Później skonfiguruj więcej opcji w miarę ich odkrywania.² W tym czasie programowalne zakończenie było zabójczą funkcją zsh, ale bash nabył ją wkrótce.
⁴ Funkcje, które bash nabył tylko w wersji 4 (więc wciąż nie są dostępne w wielu systemach), są mniejszego typu.
źródło
autocd
funkcję omówioną powyżej. Włącz tę funkcję za pomocą poleceniashopt -s autocd
. Następnie funkcja działa zgodnie z opisem.where
polecenie, którego nie należy mylić zwhich
poleceniem.-exec
powłoką do takich rzeczy jak selekcjae
i potokiem do narzędzi takich jaksort
ised
do przepisywaniae
i sortowania). Oczywiście o wiele bardziej gadatliwie.Również domyślne uzupełnianie tabulatorów jest lepsze niż bash ... na przykład ...
~/.e.d
TAB rozwinie się do~/.emacs.d/
w zsh, bash po prostu wyda dźwięk.źródło
setopt
opcji używasz (jeśli w ogóle)?_-.
ustawiłem jako symbol wieloznaczny.zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
. Zobacz stackoverflow.com/q/7906078/311660zsh
pozwala edytować polecenie wieloliniowe (patrz edytor linii zsh ), bash nie. Jeśli spróbujesz wykonać tę samą sztuczkę (Ctrl-p
), bash pobierze ostatnie polecenie.źródło
Bash ma funkcję otwierania portów za pomocą
lub
Jednak jest on wyłączony w Debianie, ponieważ jest postrzegany jako przeszkoda (jeśli ścieżka faktycznie istnieje) i poza zakresem tego, co powinna zrobić powłoka. Więcej informacji [lista dyskusyjna debian]
źródło
Które - ulepszone w Zsh
which
Poleceń w bash ujawnia tylko położenie polecenia.W Zsh
which
ujawni definicjęalias
, źródłofunction
i lokalizację polecenia.Powiedzmy, że mieliśmy alias powłoki:
W Bash, gdybyśmy zapytali:
which gg
wynik byłby nieważnyW Zsh:
which gg
da nam ...Powiedzmy, że mieliśmy funkcję powłoki:
W Bash, gdybyśmy zapytali:
which hello
wynik byłby nieważny.W Zsh:
which hello
da nam ...źródło
type
(wbudowanego). I po prostu nitpick:which
to polecenie zewnętrzne, a nie wbudowane bash.zsh - kompletna powłoka
istnieje wiele, czytając
zshcontrib(1)
można wykryć dwie wersjeautoload
-abletetris
gier (drugi zncurses
) wzsh
konkurencji zemacs
, dla kompletności (jak opisano).=
Chciałbym wspomnieć o tym
=
słowie kluczowym, które może powodować podrażnieniecurl
(zazwyczaj zawierają?var=val
w sobie adresy URL ; aleunsetopt
myślę, że jest to możliwe):q file =less
(gentoo
) rozwiązuje problemq file $(which less)
=
rozwija się do pełnej ścieżki danego polecenia.inne gadżety
inne rzeczy, poza umysłem, to właściwy monit
RPS1=%d
(do wyświetlania$PWD
w dobrym stylu), Alt + H(run-help
tj.man
), Alt + ? (which-command
)vared
ized
(autoload
funkcja), podobny Alt + Xdo minibufora Emacsa do wykonywania widżetów bez wiązania ich, aliasy globalne i sufiksowe, rozszerzona historia śledzenia czas zakończenia polecenia-m
i-regex
dopasowujących, emulacja powłoki (np.csh
,ksh
zemulate
) orazautoload
run-help
z fragmentów plików dla wbudowanej ins.biadolenie
Myślę, że większość, jeśli nie wszystkie, funkcje zostały zaimplementowane dawno temu, a po przeczytaniu dzienników zmian nie wprowadzono żadnych większych zmian ani nowych dodatków do funkcji, co jest bardzo smutne (nic więcej do odkrycia i odkrycia).
bash
wydają się być bardziej rozproszone wreadline
(w przeciwieństwie dozle
) ignu history
w duchu linux; np. funkcje readline i skróty klawiszowe mogą być stosowane globalnie (tak jak są przechowywane w~/.inputrc
i/etc/inputrc
), jeśli nie zostaną zastąpione przez bashbind
.wniosek
Osobiście uważam
emacs
(zwłaszcza z perspektywy (obecnego?)emacs-nox
Smaku), że jest inspiracją dla wyjątkowego oprogramowania,zsh
itmux
wykonał bardzo dobrą robotę, będąc przykładem w takiej implementacji; dla osób doceniających jego wartość (do poziomu niepotrzebnego / zależnego odX
serwera). Powłoka uniksowa jest wystarczająco potężna, a jej ciągłość i spójność jest wystarczająca do prawidłowego przepływu pracy i wydajności (w całym przetwarzaniu).źródło