Открыть сервис

Zsh

Zsh (Z shell) — это командная оболочка (shell) для Unix-подобных операционных систем, выполняющая функции интерпретатора команд и языка сценариев. Относится к классу так называемых оболочек Борна (Bourne shell), так как базируется на синтаксисе /bin/sh (Bourne shell) и является его расширенной версией. Zsh известна высокой степенью настраиваемости, мощной системой автодополнения ввода, поддержкой тем оформления (промптов) и расширенными возможностями для работы с историей команд.

История

Происхождение

Zsh была создана в 1990 году Полом Фалстадом (Paul Falstad), студентом Принстонского университета. Название оболочки происходит от имени преподавателя Чжун Шао (Zhong Shao), чей логин в университетской системе был «zsh». Первоначально Zsh была написана как расширение для оболочки sh, но вскоре стала самостоятельным проектом.

Развитие

В 1993 году разработку продолжил Золтан Худак (Zoltan Hudak), а затем, с 1995 года, Барт Шефер (Bart Schaefer) и другие участники. Ключевым этапом стало создание в 1999 году официального репозитория и системы управления версиями. В 2000-х годах Zsh получила широкое распространение благодаря сообществу пользователей macOS (после того как Apple сделала её оболочкой по умолчанию в macOS Catalina в 2019 году). В 2020 году Zsh стала оболочкой по умолчанию в Kali Linux, а также в некоторых дистрибутивах BSD.

Современное состояние

По состоянию на 2025 год Zsh остаётся одной из трёх наиболее популярных командных оболочек (наряду с Bash и Fish). Её развитие координируется сообществом через GitHub, а текущим мейнтейнером является Оливер Кинкель (Oliver Kinkel). Релизы выходят нерегулярно, но стабильная версия 5.8.1 была выпущена в 2021 году, а версия 5.9 — в 2022 году.

Ключевые особенности

Совместимость с Bourne shell

Zsh полностью совместима с синтаксисом POSIX sh, что позволяет выполнять большинство скриптов, написанных для Bash и sh, без изменений. Однако она имеет собственные расширения, которые могут нарушать совместимость.

Система автодополнения

Одной из сильных сторон Zsh является контекстно-зависимое автодополнение. При нажатии клавиши Tab оболочка анализирует текущую команду, её аргументы и тип файлов, предлагая релевантные варианты. Например, для команды ssh она может предложить список хостов из файла ~/.ssh/config, а для git — список веток и команд. Система автодополнения модульная: пользователь может подключать или отключать отдельные модули (например, compinit, bashcompinit).

Настройка промпта

Zsh позволяет гибко настраивать приглашение командной строки (prompt) с помощью специальных escape-последовательностей. Поддерживаются:

  • отображение текущей директории, имени пользователя, хоста;
  • цвета и стили текста (жирный, подчёркнутый);
  • отображение статуса последней команды (код возврата);
  • динамические элементы (например, время выполнения команды).

Популярные фреймворки для настройки промпта: Oh My Zsh, Powerlevel10k, Spaceship.

История команд

Zsh хранит историю введённых команд в файле (обычно ~/.zsh_history). Поддерживаются:

  • поиск по истории (Ctrl+R);
  • совместное использование истории между несколькими сессиями терминала;
  • настраиваемый лимит записей (по умолчанию 2000).

Глобальные псевдонимы и суффиксы

Zsh позволяет создавать псевдонимы, которые работают с любыми аргументами, а не только с командами. Например: ``zsh alias -g G='| grep' ` После этого команда ls G будет эквивалентна ls | grep`.

Также поддерживаются суффиксные псевдонимы, которые автоматически открывают файлы определённого типа в заданной программе: ``zsh alias -s pdf='evince' ` После этого ввод document.pdf` откроет файл в Evince.

Устройство и конфигурация

Файлы конфигурации

Zsh читает несколько конфигурационных файлов в определённом порядке:

  • .zshenv — выполняется при каждом запуске оболочки (включая неинтерактивные сессии);
  • .zprofile — выполняется при входе в систему (login shell);
  • .zshrc — выполняется для интерактивных оболочек (не login);
  • .zlogin — выполняется после .zprofile для login shell;
  • .zlogout — выполняется при выходе из login shell.

Пользователь может размещать настройки в любом из этих файлов, но стандартной практикой является помещение всех настроек в .zshrc.

Модули

Zsh имеет модульную архитектуру. Основные модули:

  • zsh/complete — система автодополнения;
  • zsh/history — управление историей;
  • zsh/zle — редактирование командной строки (Zsh Line Editor);
  • zsh/zftpFTP-клиент;
  • zsh/zprofпрофилирование производительности.

Модули подключаются через команду zmodload.

Фреймворки

Наиболее популярный фреймворк — Oh My Zsh (создан в 2009 году Робби Расселом). Он включает более 300 плагинов (для Git, Docker, Node.js, Python и др.) и более 140 тем оформления. Другие фреймворки: Prezto, Antigen, Zgen.

Применение

Для разработчиков

Zsh широко используется программистами и системными администраторами благодаря:

  • улучшенной навигации по файловой системе (например, cd - для перехода к предыдущей директории, cd ~- для списка последних директорий);
  • интеграции с системами контроля версий (Git, Mercurial, SVN) через плагины;
  • поддержке расширенных регулярных выражений и glob-паттернов (например, **/*.txt для поиска всех файлов .txt в поддиректориях).

Для пользователей macOS

С 2019 года Zsh является оболочкой по умолчанию в macOS. Это связано с тем, что Bash в macOS оставался на версии 3.2 (из-за лицензионных ограничений GPLv3), а Zsh распространяется под лицензией MIT, что позволяет Apple включать её без ограничений.

Для серверов

Zsh редко используется в качестве оболочки по умолчанию на серверах (из-за большего потребления памяти по сравнению с Bash), но может быть установлена как дополнительная оболочка для администраторов.

Сравнение с другими оболочками

ХарактеристикаZshBashFish
Совместимость с POSIXПолнаяПолнаяЧастичная
Система автодополненияКонтекстная, модульнаяБазоваяАвтоматическая, контекстная
Настройка промптаГибкая (через escape-последовательности)ОграниченнаяВстроенные темы
Скриптовый языкСовместим с sh, расширенияСовместим с shСобственный синтаксис
Потребление памятиСреднееНизкоеВысокое
ПопулярностьВысокая (разработчики, macOS)Очень высокая (серверы, Linux)Средняя (новички, macOS)

Недостатки и критика

  • Сложность конфигурации. Для новичков настройка Zsh может быть нетривиальной, особенно при использовании фреймворков (Oh My Zsh может замедлять запуск оболочки на 0.5–2 секунды).
  • Потребление ресурсов. Zsh загружает больше модулей и плагинов, чем Bash, что может быть заметно на слабых системах.
  • Совместимость скриптов. Некоторые расширения Zsh (например, [[ ]] с дополнительными операторами) не работают в Bash, что может вызвать проблемы при переносе скриптов.
  • Фрагментация сообщества. Существует множество фреймворков и плагинов, что иногда приводит к конфликтам версий и несовместимости.

Интересные факты

  • Название «Zsh» произносится как «зед-шэлл» (по-американски) или «зет-шэлл» (по-британски).
  • Zsh поддерживает «расширенную историю» — возможность видеть, когда была выполнена каждая команда (с точностью до секунды).
  • В Zsh можно настроить автоматическое исправление опечаток в командах (например, sl исправится на ls).
  • Фреймворк Oh My Zsh имеет более 100 000 звёзд на GitHub (по состоянию на 2025 год).

Источники

  1. Falstad, P. (1990). «Zsh: A New Shell». Princeton University.
  2. Zsh Development Team. «Zsh Manual». Официальная документация.
  3. Robbins, R. (2009). «Oh My Zsh: A Community-Driven Framework». GitHub.
  4. Apple Inc. (2019). «macOS Catalina Release Notes: Default Shell Change».
  5. Kinkel, O. (2022). «Zsh 5.9 Release Notes». GitHub.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →