Logo programu | |
Sesja powłoki Zsh | |
| Autor | Paul Falstad |
|---|---|
| Pierwsze wydanie | 1990 |
| Aktualna wersja stabilna | 5.9.2 (12 lipca 2026) [±] |
| 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), 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 .
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.
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).
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.
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:
(( )),ln, mkdir, mv, rm, rmdir, sync (szybsze niż wywoływanie zewnętrznych programów, lepsze w skryptach),stat() bez uruchamiania /usr/bin/stat; zwraca rozmiar, uprawnienia, czasy modyfikacji w zmiennych,sysopen, sysread, syswrite, systell, sysseek do zaawansowanej manipulacji plikami i I/O,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 wersjiWybrane 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.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.
Istnieją cztery listy dyskusyjne poświęcone Zsh: