Zsh

Материал из llmdocs — справочник разработчика
Zsh
АвторПол Фальстад (Paul Falstad)
Первый выпуск1990
Типкомандная оболочка Unix
СовместимостьPOSIX sh (в режиме эмуляции), во многом Bash
ЛицензияMIT-подобная (Zsh License)
По умолчаниюmacOS Catalina (10.15) и новее, Kali Linux
Файлы настройки~/.zshenv, ~/.zprofile, ~/.zshrc, ~/.zlogin
Сайтzsh.org

Zsh (Z shell) — командная оболочка для Unix-подобных систем, расширяющая классический Bourne shell (sh). Zsh понимает почти все скрипты для Bash, но добавляет к ним развитое программируемое автодополнение, расширенный глоббинг (шаблоны имён файлов), исправление опечаток, общую историю между сессиями и систему тем и плагинов. С версии macOS Catalina (2019) zsh — оболочка по умолчанию на Mac.[3]

История

Первую версию написал в 1990 году Пол Фальстад, тогда студент Принстона. Название происходит от логина преподавателя Чжуна Шао (Zhong Shao) — zsh. Со временем проект перешёл к сообществу; разработку координирует группа мейнтейнеров, исходники и документация доступны на zsh.org.[1]

Широкую популярность zsh получил в 2010-х благодаря фреймворку Oh My Zsh (2009), который упростил установку тем и плагинов.[4] Переход Apple на zsh был связан с лицензией: Bash в macOS оставался на версии 3.2, последней под GPLv2, а более новые версии распространяются под GPLv3.

Отличия от Bash

Zsh не является строгим надмножеством Bash, но различия обычно заметны только в скриптах.[5]

Возможность Bash Zsh
Индексы массивов с 0 с 1 (по умолчанию)
Разбиение $var на слова да нет (без setopt SH_WORD_SPLIT)
Рекурсивный глоб **/ с shopt -s globstar встроен
Квалификаторы глоба нет *(.), *(/), *(om[1,5])
Правый промпт нет RPROMPT
Автодополнение bash-completion compsys, с меню и описаниями

Отсутствие разбиения переменных на слова — частый источник сюрпризов при переносе скриптов, но и защита от целого класса ошибок с пробелами в именах файлов. Для переносимых скриптов принято писать #!/bin/sh или #!/usr/bin/env bash, а zsh использовать как интерактивную оболочку.

Возможности

Глоббинг. Квалификаторы в скобках фильтруют файлы прямо в шаблоне: ls **/*.py(.m-7) — обычные файлы .py, изменённые за последнюю неделю, во всех подкаталогах; rm *(.L0) — пустые файлы. Это часто заменяет связку find и xargs.

Автодополнение. Система compsys знает аргументы тысяч команд (git, docker, kubectl, ssh-хосты из ~/.ssh/config), показывает меню со стрелками и подсказками. Включается строками:

autoload -Uz compinit && compinit
zstyle ':completion:*' menu select

История. Опции SHARE_HISTORY, HIST_IGNORE_DUPS, EXTENDED_HISTORY позволяют делить историю между окнами терминала, убирать дубли и хранить время выполнения команд.

Прочее. Автоматический cd по имени каталога (AUTO_CD), стек каталогов (pushd/popd, cd -<Tab>), коррекция опечаток (CORRECT), глобальные алиасы (alias -g G='| grep'), модульная загрузка функций через autoload.

Файлы настройки

Zsh читает конфигурацию в определённом порядке:[2]

  1. ~/.zshenv — всегда, для любых экземпляров (в том числе скриптов); подходит для переменных окружения вроде PATH.
  2. ~/.zprofile — для оболочек входа (login shell).
  3. ~/.zshrc — для интерактивных оболочек: алиасы, промпт, плагины.
  4. ~/.zlogin и ~/.zlogout — при входе и выходе.

Системные аналоги лежат в /etc/zsh/ или /etc/.

Фреймворки и плагины

  • Oh My Zsh — самый популярный фреймворк: сотни плагинов (git, docker, kubectl) и тем. Минус — замедляет запуск оболочки.
  • Prezto, zinit, antidote — более лёгкие менеджеры плагинов с ленивой загрузкой.
  • zsh-autosuggestions — подсказывает команду из истории серым текстом; zsh-syntax-highlighting — подсвечивает синтаксис по мере ввода.
  • Powerlevel10k и кроссплатформенный Starship — быстрые информативные промпты (ветка git, код возврата, версия языка).

Практика

# сменить оболочку на zsh
chsh -s "$(command -v zsh)"

# замерить скорость запуска
time zsh -i -c exit

# проверить, какая оболочка запущена
echo $ZSH_VERSION

Если запуск занимает больше 200–300 мс, обычно виноваты тяжёлые плагины или повторный compinit; профилировать можно модулем zmodload zsh/zprof.

См. также

Источники

  1. Zsh — официальный сайт
  2. Zsh Manual (zsh.sourceforge.io)
  3. Apple — Use zsh as the default shell on your Mac
  4. Oh My Zsh — репозиторий
  5. Zsh FAQ — How does zsh differ from bash