Zsh

Zsh
Logo Zsh
Logo programu
Ilustracja
Sesja powłoki Zsh
Autor Paul Falstad[1]
Pierwsze wydanie 1990
Aktualna wersja stabilna 5.9.1
(31 maja 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[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

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[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, 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)[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 -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[8]:

  • <[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ż

Przypisy

  1. a b Introduction to Zsh [online], zsh.sourceforge.io [dostęp 2026-02-07].
  2. Zsh Line Editor [online], zsh.sourceforge.io [dostęp 2026-02-07].
  3. Zsh Expansion [online], zsh.sourceforge.io [dostęp 2026-02-07].
  4. 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.).
  5. Kali Linux 2020.4 Release [online], Kali Linux, 18 listopada 2020 [dostęp 2026-02-07] (ang.).
  6. Zsh Modules [online], zsh.sourceforge.io [dostęp 2026-02-07].
  7. man zshoptions (zsh options) [online], manpages.org [dostęp 2026-02-07].
  8. Zsh Mailing Lists [online], zsh.sourceforge.io [dostęp 2026-02-07].

Linki zewnętrzne

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.
Kembali kehalaman sebelumnya