Spis treści
Zsh
Logo programu | |
Sesja powłoki Zsh | |
| Autor | Paul Falstad[1] |
|---|---|
| Pierwsze wydanie | 1990 |
| Aktualna wersja stabilna | 5.9 |
| Język programowania | C |
| Platforma sprzętowa | Wieloplatformowość |
| System operacyjny | GNU |
| Rodzaj | Powłoka systemowa |
| Licencja | MIT |
| Strona internetowa | |
Zsh (Z shell) – uniksowa powłoka (ang. shell) 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[2]), wbudowaną korekcję pisowni, programowalne dopełnianie poleceń[3], funkcje (z automatycznym ładowaniem) oraz zaawansowaną historię poleceń. Zsh jest domyślną powłoką systemu macOS (od wersji Catalina[4] z 2019) i Kali Linux[5] (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 [1].
Podstawowa składnia
[edytuj | edytuj kod]Polecenia
[edytuj | edytuj kod]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
[edytuj | edytuj kod]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)
[edytuj | edytuj kod]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
[edytuj | edytuj kod]Niektóre opcjonalne części Zsh znajdują się w dedykowanych modułach, oddzielonych od rdzenia powłoki[6] – 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,sysseekdo 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
[edytuj | edytuj kod]Zsh w wersji 5.9 posiada prawie 200 parametrów startowych (opcji i flag)[7], 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-bjest 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,+owyłącza opcję; przydatne do tymczasowej zmiany zachowania),--help– wyświetla pomoc (składnięzshi 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-Dnie 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-xdla pełnego debugowania),-x(xtrace) – wyświetla każde polecenie przed wykonaniem z rozwiniętymi zmiennymi.
Pliki startowe/końcowe
[edytuj | edytuj kod]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
[edytuj | edytuj kod]Istnieją cztery listy dyskusyjne poświęcone Zsh[8]:
- <zsh-announce@math.gatech.edu>– informacje o nowych wersjach, większych zmianach oraz comiesięcznym FAQ – lista moderowana,
- <zsh-users@math.gatech.edu>– dyskusje użytkowników,
- <zsh-workers@math.gatech.edu> – zagadnienia dotyczące hackowania, rozwóju, zgłoszenia błędów i poprawki,
- <zsh-security@zsh.org> - prywatna lista mailingowa służąca do omawiania zgłoszeń mających wpływ na bezpieczeństwo.
Zobacz też
[edytuj | edytuj kod]Linki zewnętrzne
[edytuj | edytuj kod]- 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
Przypisy
[edytuj | edytuj kod]- ↑ a b Introduction to Zsh [online], zsh.sourceforge.io [dostęp 2026-02-07].
- ↑ Zsh Line Editor [online], zsh.sourceforge.io [dostęp 2026-02-07].
- ↑ Zsh Expansion [online], zsh.sourceforge.io [dostęp 2026-02-07].
- ↑ Tom Warren, Apple replaces bash with zsh as the default shell in macOS Catalina [online], The Verge, 4 czerwca 2019 [dostęp 2026-02-07] (ang.).
- ↑ Kali Linux 2020.4 Release [online], Kali Linux, 18 listopada 2020 [dostęp 2026-02-07] (ang.).
- ↑ Zsh Modules [online], zsh.sourceforge.io [dostęp 2026-02-07].
- ↑ man zshoptions (zsh options) [online], manpages.org [dostęp 2026-02-07].
- ↑ Zsh Mailing Lists [online], zsh.sourceforge.io [dostęp 2026-02-07].









