Zsh (Z shell) – uniksowa powłoka () nadająca się zarówno do interaktywnej pracy z systemem, jak i do wykonywania skryptów. Spośród standardowych powłok Zsh najbardziej przypomina Korn shell, ale zawiera wiele ulepszeń. Zsh posiada m.in. edycję wiersza poleceń (zle – Zsh Line Editor), wbudowaną korekcję pisowni, programowalne dopełnianie poleceń, funkcje (z automatycznym ładowaniem) oraz zaawansowaną historię poleceń. Zsh jest domyślną powłoką systemu macOS (od wersji Catalina z 2019) i Kali Linux (od 2020).
Zsh został napisany w 1990 przez Paula Falstada. Obecnie Zsh jest utrzymywany przez członków listy dyskusyjnej zsh-workers, koordynatorem projektu jest Peter Stephenson .
Podstawowa składnia
Polecenia W wierszu poleceń pierwsze słowo to polecenie do wykonania, a pozostałe słowa, jeśli występują, to argumenty polecenia. Jeśli podano nazwę polecenia, przypisania parametrów modyfikują środowisko polecenia podczas jego wykonywania. Wartością prostego polecenia jest jego kod wyjścia (0 jeśli polecenie zakończyło się poprawnie, ≥ 1 dla różnych błędów). Na przykład print -- foo to proste polecenie (print) z dwoma parametrami: opcją -- i argumentem foo.
Potoki Potok to albo proste polecenie, albo sekwencja dwóch lub więcej prostych poleceń, gdzie każde polecenie jest oddzielone od następnego znakiem | lub |&. W przypadku, gdy polecenia są rozdzielone znakiem „|”, standardowe wyjście pierwszego polecenia jest połączone ze standardowym wejściem następnego. |& to skrót od 2>&1 |, który łączy zarówno standardowe wyjście, jak i standardowy błąd polecenia ze standardowym wejściem następnego. Wartością potoku jest wartość ostatniego polecenia, chyba że potok jest poprzedzony znakiem !. W takim przypadku wartość jest logiczną odwrotnością wartości ostatniego polecenia. Na przykład print foo | sed 's/foo/bar/' to potok, w którym wyjście („foo” plus znak nowej linii) pierwszego polecenia (print) zostanie przekazane do wejścia drugiego (sed).
Listy poleceń (sublist) Lista poleceń może być pojedynczym potokiem lub kilkoma potokami połączonymi operatorami && albo ||. Jeśli dwa potoki są rozdzielone znakiem && (koniunkcja), drugi potok jest wykonywany tylko wtedy, gdy pierwszy zakończy się powodzeniem (zwróci status zerowy). Jeśli dwa potoki są rozdzielone znakiem || (alternatywa), drugi jest wykonywany tylko wtedy, gdy pierwszy zakończy się niepowodzeniem (zwróci status różny od zera). Oba operatory mają równy priorytet i są lewostronnie asocjacyjne. Wartością listy poleceń jest wartość ostatniego wykonanego potoku. Na przykład:
sudo dmesg | grep -qi panic && print -- Był 'panic' || print -- Nie było 'panic'
to lista poleceń składająca się z trzech potoków, przy czym drugi potok zostanie wykonane wtedy i tylko wtedy, gdy polecenie grep zwróci status zerowy, w przeciwnym wypadku zostanie wykonany odstani potok.
Moduły Niektóre opcjonalne części Zsh znajdują się w dedykowanych modułach, oddzielonych od rdzenia powłoki – każdy z tych modułów może być połączony z powłoką w czasie kompilacji lub może być dynamicznie łączony podczas działania powłoki.
Wybrane moduły: zle (Zsh Line Editor) – rdzeń edycji linii poleceń, umożliwiający pracę w warstwie interaktywnej: dostarcza wszystkie funkcje wiązania klawiszy (binding), widgety edycyjne, tryby vi/emacs, complist (Completion Listing Extensions) – rozszerza system uzupełniania o menu wyboru, kolorowanie listy dopasowań, nawigację strzałkami, parameter (Parameter Module) – dostęp do wewnętrznych parametrów shella przez specjalne tablice asocjacyjne: $parameters, $functions, $aliases, $options; niezbędny do introspekcji i debugowania, mathfunc (Mathematical Functions) – zaawansowane funkcje matematyczne (sin, cos, log, exp, sqrt, pow, itp.) dostępne w wyrażeniach (( )), datetime (Date and Time Functions) – funkcja do formatowania dat/czasu, przydatna w skryptach backupowych, logowaniu, znacznikach czasu, files (File Operations) – wbudowane polecenia dla operacji na plikach: ln, mkdir, mv, rm, rmdir, sync (szybsze niż wywoływanie zewnętrznych programów, lepsze w skryptach), stat (File Statistics) – dostęp do informacji o plikach stat() bez uruchamiania /usr/bin/stat; zwraca rozmiar, uprawnienia, czasy modyfikacji w zmiennych, system (System Interface) – niskopoziomowe wywołania systemowe: sysopen, sysread, syswrite, systell, sysseek do zaawansowanej manipulacji plikami i I/O, pcre (Perl-Compatible Regular Expressions) – wsparcie dla PCRE zamiast podstawowych regex (znacznie potężniejsze dopasowania wzorców, lookahead/lookbehind), zprof (Profiler) – profilowanie czasu ładowania .zshrc i funkcji; kluczowy dla optymalizacji wydajności shella.
Parametry startowe Zsh w wersji 5.9 posiada prawie 200 parametrów startowych (opcji i flag), kilkadziesiąt z nich posiada jednoznakowy skrót. Jeżeli flaga -s nie została podana, a został podany jakiś argument to pierwszy argument uznawany jest za ścieżkę skryptu, który ma zostać wykonany. Pozostałe argumenty są traktowane jako parametry pozycyjne.
Parametry startowe (opcje specjalne): -b – koniec przetwarzania opcji, tożsame z -- (wszystko po -b jest traktowane jako argumenty, nie opcje, co pozwala przekazać ciągi zaczynające się od - jako normalne argumenty; rzadko używane w praktyce), -c ciąg poleceń – wykonuje podany ciąg poleceń zamiast normalnej powłoki (np. zsh -c 'echo $ZSH_VERSION'), -o – ustawienie opcji setopt (włącza konkretną opcję przed załadowaniem .zshrc, może być użyte wielokrotnie: -o opt1 +o opt2 -o opt3, +o wyłącza opcję; przydatne do tymczasowej zmiany zachowania), --help – wyświetla pomoc (składnię zsh i listę opcji), --version – wyświetla numer wersji
Wybrane opcje: -4 (globdots) – * dopasowuje również pliki ukryte (np .file), -5 (notify) – natychmiastowe powiadomienie o zakończeniu zadań w tle, -7 (ignoreeof) – Ctrl-D nie zamyka shella (zapobiega przypadkowemu wylogowaniu), -e (errexit) – shell kończy się przy pierwszym błędzie (exit code ≠ 0; krytyczne dla bezpiecznych skryptów), -f (no-rcs) – pomija ładowanie plików startowych (jak .zshrc), uruchamiając czystą powłokę, -G (nullglob) – wzorce bez dopasowań zamiast błędu dają pustą listę, -h (histignoredups) – ignoruje kolejne identyczne polecenia w historii (redukuje szum w historii), -i (interactive) – wymusza tryb interaktywny, nawet jeśli wejście nie jest podłączone do terminala, -l (login) – uruchamia powłokę jako login shell, ładując pliki /etc/zprofile i ~/.zprofile, -m (monitor) – włącza monitorowanie zleceń pracy (job control), -n (no-exec) – parsuje skrypt ale nie wykonuje poleceń (narzędzie do sprawdzania składni, tzw. dry-run), -s (shinstdin) – wczytuj polecenia ze standardowego wejścia, -u (no-unset) – odwołanie do niezdefiniowanej zmiennej powoduje błąd (zapobiega cichym błędom w skryptach), -v (verbose) – wyświetla linie skryptu jak są czytane, przed parsowaniem (używane z -x dla pełnego debugowania), -x (xtrace) – wyświetla każde polecenie przed wykonaniem z rozwiniętymi zmiennymi.
Pliki startowe/końcowe Polecenia są najpierw czytane z /etc/zshenv. Jeżeli opcja RCS nie jest ustawiona w /etc/zshenv, wszystkie pozostałe pliki startowe są pomijane. W przeciwnym wypadku polecenia są czytane z $ZDOTDIR/.zshenv. Jeżeli powłoka jest powłoką zameldowania (loginową), polecenia są czytane z /etc/zprofile, a następnie z $ZDOTDIR/.zprofile. Następnie, jeżeli powłoka jest interaktywna, polecenia są czytane z /etc/zshrc i $ZDOTDIR/.zshrc. Na koniec, jeżeli powłoka jest powłoką zameldowania, czytane są pliki /etc/zlogin i $ZDOTDIR/.zlogin.
Jeżeli zmienna $ZDOTDIR nie jest ustawiona, używana jest zmienna $HOME. Wymienione powyżej pliki z katalogu /etc, w zależności od systemu, mogą znajdować się w innym katalogu.
Listy dyskusyjne Istnieją cztery listy dyskusyjne poświęcone Zsh: <[email protected]>– informacje o nowych wersjach, większych zmianach oraz comiesięcznym FAQ – lista moderowana, <[email protected]>– dyskusje użytkowników, <[email protected]> – zagadnienia dotyczące hackowania, rozwóju, zgłoszenia błędów i poprawki, <[email protected]> - prywatna lista mailingowa służąca do omawiania zgłoszeń mających wpływ na bezpieczeństwo.
Zobacz też Powłoka Bash (bash) Powłoka Fish Powłoka Bourne’a (Sh) Powłoka C (Csh) Powłoka Korna (Ksh)
Przypisy
Linki zewnętrzne Podręcznik użytkownika A User's Guide to the Z-Shell The Zsh Manual Strona domowa Zsh Oh My Zsh – tworzony przez społeczność framework dla Zsh
Kategoria:Powłoki systemowe UNIX Kategoria:Oprogramowanie na licencji MIT Kategoria:Otwarte oprogramowanie