Zsh (Русский)
Zsh является мощной современной оболочкой, которая работает как в интерактивном режиме, так и в качестве интерпретатора языка сценариев. Он совместим с bash (не по умолчанию, только в режиме emulate sh), но имеет преимущества, такие как улучшенное завершение и подстановка.
Еще больше причин, по которым стоит использовать Zsh, перечислено в Zsh FAQ EN.
Установка
    
Перед установкой вы можете посмотреть, какая оболочка используется в данный момент:
$ echo $SHELL
Установите пакет zsh. Чтобы значительно расширить возможности автодополнения команд, установите также пакет zsh-completions.
Первоначальная настройка
    
Убедитесь, что Zsh был установлен правильно, выполнив следующую команду в терминале:
$ zsh
После этого вы должны увидеть скрипт zsh-newuser-install, который проведет вас через некоторые основные настройки. Если вы хотите пропустить первичную настройку, нажмите q. Если скрипт не запустился, вы можете вызвать его вручную:
$ zsh /usr/share/zsh/functions/Newuser/zsh-newuser-install -f
Установка Zsh в качестве оболочки по умолчанию
    
Смотрите раздел Командная оболочка#Выбор оболочки по умолчанию.
~/.bashrc в ~/.zshrc (например, приглашение командной строки и псевдонимы), а также из ~/.bash_profile в ~/.zprofile (например, код, который запускает оконную систему X)Файлы Запуска/Завершения
    
- Если $ZDOTDIRне определена, используется$HOMEпо умолчанию.
- Если опция RCSне установлена ни в одном из файлов, файлы конфигурации не будут получены после этого файла.
- Если опция GLOBAL_RCSне задана ни в одном из файлов, после этого файла не будут найдены глобальные конфигурационные файлы (/etc/zsh/*).
При запуске Zsh по умолчанию он будет загружать следующие файлы в этом порядке:
- /etc/zsh/zshenv
- Используется для установки общесистемных переменных environment variables (Русский); Он не должен содержать команд, которые производят вывод, или предполагает, что shell подключен к tty. Этот файл всегда будет источником, это нельзя переопределить.
- $ZDOTDIR/.zshenv
- Используется для установки переменных среды пользователя; Он не должен содержать команд, которые производят вывод, или предполагает, что shell подключен к tty. Этот файл всегда будет источником.
- /etc/zsh/zprofile
- Используется для выполнения команд при запуске, будет вызван при запуске как login shell. Обратите внимание, что в Arch Linux по умолчанию в нем содержится одна строка, в которой источником является .
- Этот файл должен быть загружен всеми Bourne-совместимыми оболочками при входе в систему: он устанавливает и другие переменные окружения и специфичные для приложения () при входе в систему.
 
- Используется для выполнения пользовательских команд при запуске, будет вызван при запуске как login shell.
- /etc/zsh/zshrc
- Используется для настройки интерактивной конфигурации оболочки и выполнения команд, будет вызван при запуске как interactive shell.
- $ZDOTDIR/.zshrc
- Используется для настройки интерактивной конфигурации пользователя и выполнения команд, будет вызван при запуске как interactive shell.
- Используется для выполнения команд при завершении прогресса инициализации, будет вызван при запуске как login shell.
- Используется для выполнения пользовательских команд при завершении начального прогресса, будет вызван при запуске как login shell.
- Будет получен, когда login shell завершится.
- Будет получен, когда login shell завершится.
Настройка Zsh
    
Хотя Zsh может использоваться “из коробки”, он настроен не так, как хотело бы большинство пользователей. Из-за наличия огромных возможностей настройки, доступных в Zsh, этот процесс может оказаться сложным и трудоемким.
Простой .zshrc
    
Ниже приведён пример файла настроек, который обеспечивает достойный набор опций по умолчанию, а также предоставляет примеры многих вариантов настройки Zsh. Для того, чтобы использовать этот пример, сохраните его в виде файла с именем .
Вот простой :
~/.zshrc
autoload -U compinit promptinit compinit promptinit # Эта настройка установит тему walters для приглашения командной строки prompt walters
Настройка переменной $PATH
    
Информацию о настройке в zsh системных путей отдельно для каждого пользователя можно найти на странице проекта. Вкратце, добавьте в файл ~/.zshenv следующие строки:
Смотрите также примечание в разделе #Фреймворки настроек.
Автозавершение команд
    
Возможно, наиболее убедительной стороной Zsh является его передовые возможности автозавершения. Включите автозавершение в . Добавив следующую строку в ваш :
Настройки выше включают в себя также ssh/scp/sftp завершения хостов, но для того, чтобы эта функция работала, пользователи должны предотвратить SSH от хеширования хостов имён в .
Для автозавершения с использованием клавиши-стрелки, добавьте следующие строки в:
- Для активации меню нажмите TAB дважды.
Для автозавершения командной строки для алиасов (псевдонимов), добавьте следующее:
Позволяем разворачивать сокращенный ввод, к примеру cd /u/sh в /usr/share
Обработчик неизвестных команд
    
В утилиту pkgfile входит Zsh скрипт, содержащий функцию command_not_found_handler. При вводе неизвестной команды функция автоматически осуществляет поиск в официальных репозиториях.
Чтобы включить хук, нужно его прочитать. Например, добавьте с файл следующую строку:
Игнорирование повторяющихся строк в истории
    
Чтобы игнорировать повторяющиеся строки в истории, используйте следующее:
Чтобы освободить историю от уже созданных дубликатов, запустите:
$ sort -t ";" -k 2 -u ~/.zsh_history | sort -o ~/.zsh_history
Команда ttyctl
    
описывает команды в Zsh. Это можно применить для "замораживания / размораживания" терминала. Многие программы изменяют состояние терминала, и часто не восстанавливают настройки терминала нормально при выходе. Чтобы избежать необходимости вручную сбрасывать терминал, используйте следующее:
Назначение клавиш
    
Zsh не использует Readline, вместо этого он использует свой собственный и более мощный ZLE. Т.е. не читает  или .
Zle имеет emacs режим и vi режим. По умолчанию, он пытается взять клавиши emacs или vi из переменной среды . Если она пуста, то по умолчанию будет Emacs. Измните это  или bindkey -v соответственно в режиме Emacs или режиме VI.
Смотрите также zshwiki: bindkeys.
Назначение клавиш в оболочке
    
Настраиваем нормальное поведение клавиш (не как в vi и emacs). Для этого в ~/.zshrc добавьте следующее:
[[ -n "${key[Home]}"     ]]  && bindkey  "${key[Home]}"     beginning-of-line
[[ -n "${key[End]}"      ]]  && bindkey  "${key[End]}"      end-of-line
[[ -n "${key[Insert]}"   ]]  && bindkey  "${key[Insert]}"   overwrite-mode
[[ -n "${key[Delete]}"   ]]  && bindkey  "${key[Delete]}"   delete-char
[[ -n "${key[Up]}"       ]]  && bindkey  "${key[Up]}"       up-line-or-history
[[ -n "${key[Down]}"     ]]  && bindkey  "${key[Down]}"     down-line-or-history
[[ -n "${key[Left]}"     ]]  && bindkey  "${key[Left]}"     backward-char
[[ -n "${key[Right]}"    ]]  && bindkey  "${key[Right]}"    forward-char
[[ -n "${key[PageUp]}"   ]]  && bindkey  "${key[PageUp]}"   beginning-of-buffer-or-history
[[ -n "${key[PageDown]}" ]]  && bindkey  "${key[PageDown]}" end-of-buffer-or-history
Назначение клавиши в ncurses
    
Привяжите приложение ncurses к keystoke, но оно не будет принимать взаимодействие. Используйте переменную , чтобы заставить его работать. Следующий пример позволяет пользователям открывать ncmpcpp, используя :
Альтернативный путь назначения клавиш в ncurses
    
Этот метод будет содержать всё, что вы ввели в строку перед вызовом приложения
Горячие клавиши в файловом менеджере
    
Могут пригодится настройки клавиш использующиеся в графическом файловом менеджере. Первая комбинация показывает историю каталогов (Alt + Left), вторая позволяет пользователю перейти в родительский каталог (Alt + Up). Они также отображают содержимое каталогов.
История поиска
    
Добавьте эти строки в .zshrc
Doing this, only past commands beginning with the current input would have been shown.
Настройка строки приглашения (PROMPT)
    
Существует быстрый и легкий способ создать цветное приглашение в Zsh. Убедитесь что prompt установлен в autoload в файле . Это может быть сделано путем добавления этих строк:
~/.zshrc
autoload -U promptinit promptinit
Доступные цветовые схемы можно перечислить с помощью команды:
$ prompt -l
Для просмотра всех доступных тем (с примерами), используйте команду:
$ prompt -p
Например, чтобы использовать цветовую схему , введите:
$ prompt bigfade
Чтобы использовать цветовую схему с заданным цветом (если доступен в теме), введите:
$ prompt elite2 blue
Настройка командной строки (PROMPT)
    
В отличие от bash zsh имеет два промта — левый и правый. Правый промт исчезает при вводе длинных команд, что делает его очень удобным для отображения не самой полезной информации, типа времени или текущего каталога. Промты настраиваются с помощью переменных PROMPT (левый) и RPROMPT (правый):
export PROMPT='%n@%m> ' export RPROMPT='[%~]'
Некоторые из специальных последовательностей, которые можно в них использовать: Последовательность - Описание %n - Имя пользователя %m - Имя компьютера (до первой точки) %M - Полное имя компьютера %~ - Путь к текущему каталогу относительно домашнего %d - Полный путь к текущей директории ($PWD) %T - Время в формате HH:MM %* - Время в формате HH:MM:SS %D - Дата в формате YY-MM-DD %B, %b - Начало и конец выделения жирным
По материалам этой статьи
Цвета
    
Zsh устанавливает цвета иначе, чем Bash. Добавьте до PROMPT= в  чтобы воспользоваться. Usually you will want to put these inside  so the cursor does not move.
будет установлен цвет текста (значения, подставляемые вместо “color”, к примеру: red, green, blue, и т.д.. - по умолчанию установлены в любом формате до текста)
| Команда | Описание | |
|---|---|---|
| фактически то же самое, что и предыдущий, но с меньшим набором. Можно также вставить префикс с номером F. | ||
| будет использоваться не толстый текст с заданным цветом. | ||
| будет использоваться толстый текст с заданным цветом. | ||
| $reset_color | сбросит цвет текста, на цвет по умолчанию. Не сбрасывает толщину текста. Используйте для отмены утолщения. Saves typing if it's just though. | |
| устанавливает цвет фона. Того же цвета, как цвет без текста полужирным. Prefixing with any single-digit number makes the bg black. | 
| Возможные значения цвета | |
|---|---|
| blackили | или | 
| greenили | или | 
| или | magentaили | 
| или | или | 
Цветной вывод команд
    
Раскрашивание вывода команд при помощи скрипта grc. Поставьте пакет grc (доступен для установки из репозитория [community]) И добавьте следующие строки в ваш
if [ -f /usr/bin/grc ]; then alias gcc="grc --colour=auto gcc" alias irclog="grc --colour=auto irclog" alias log="grc --colour=auto log" alias netstat="grc --colour=auto netstat" alias ping="grc --colour=auto ping" alias proftpd="grc --colour=auto proftpd" alias traceroute="grc --colour=auto traceroute" fi
Пример
    
Это пример двустороннего промта:
PROMPT="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg_no_bold[yellow]%}%1~ %{$reset_color%}%#"
RPROMPT="[%{$fg_no_bold[yellow]%}%?%{$reset_color%}]"
А вот как оно будет отображаться:
username@host ~ % [0]
Стек Каталогов
    
Zsh можно настроить, чтобы он помнил DIRSTACKSIZE (последние посещённые каталоги). Это пригодится для более быстрой работы с cd. Вам нужно добавить несколько строк, в файл настройки:
Теперь используйте
dirs -v
Для вывода стека директорий. Используйте чтобы вернуться к посещённому каталогу. Используйте автозавершение (нажав ) после тире.
cd, приведёт к конфликту в обоих ссессиях пишущих в тот же файл.Команда Help
    
В отличие от bash, zsh не позволяет использовать встроенный в команду для автодополнения. Чтобы использовать в zsh, добавьте следующие строки в ваш :
Подсветка синтаксиса как в Fish
    
Fish обеспечивает очень мощную подсветку синтаксиса. Для использования в zsh, вы можете установить из официального репозитория и обязательно добавьте в ваш строку:
Примеры файла .zshrc
    
- Пакет , доступный в официальном репозитории взятый с https://grml.org/zsh содержит zshrc файл, который включает в себя множество настроек для Zshell. Эта настройка используется по умолчанию для ежемесячного ISO релиза.
- Базовая настройка с динамической строкой приглашения (Prompt) и заголовком окна / Hardinfo => https://github.com/MrElendig/dotfiles-alice/blob/master/.zshrc;
- https://github.com/slashbeast/things/blob/master/configs/DOTzshrc - zshrc с несколькими функциями, - смотрите комментарии в файле. Известные особенности: подтверждение выключения, если пользователь запустил poweroff, а также запрос подтверждения на reboot или hibernate, поддержка GIT в Prompt (сделано без vcsinfo), завершение по TAB с меню, вывод текущей выполняемой команды в заголовке окна, и многое другое.
Фреймворки настроек
    
- oh-my-zsh управляемый сообществом, популярный фреймворк для настройки вашего Zsh. Он поставляется в комплекте с тонной полезных функций, помощников, плагинов, тем.
- Prezto - мгновенно прекрасный Zsh (доступен в prezto-gitAUR) настроенный фреймворк Zsh. Он поставляется с модулями, разумно расширяющих среду интерфейса командной строки (по умолчанию), псевдонимами (алиасами), функциями, атодополнением, и темами Prompt.
- Antigen (дступен в ) - менеджер плагинов для zsh, вдохновлённый oh-my-zsh и vundle.
Автозапуск приложений
    
Zsh всегда выполняет  и $ZDOTDIR/.zshenv так что не раздувайте эти файлы.
При входе в оболочку, читаются команды из /etc/profile а потом . Затем, если оболочка является интерактивной, команды читаются из /etc/zsh/zshrc а потом $ZDOTDIR/.zshrc. Наконец, если в оболочку выполнен вход, читаются  и .
Смотрите также секцию STARTUP/SHUTDOWN FILES в .
Постоянный rehash
    
Обычно compinit не находит новые исполняемые файлы в $PATH. Например после установки нового пакета, файлы в /usr/bin не сразу будут включены в автодополнение. Чтобы включить их в работу, выполните:
$ rehash
'rehash' может выполняться автоматически. Включите его в вашем :
Функции
    
Zsh позволяет пользователю определять собственные функции, которые могут выполняться точно также как и обычные программы. Функции выполняются в том же процессе, что и вызвавшая их программа. При вызове функции аргументы передаются как позиционные параметры.
Распаковка архива
    
Чтобы распаковать архив не указывая тип распаковщика и его аркументы, а выполнив всего лишь команду вида Добавьте следующий код в
ex () {
 if [ -f $1 ] ; then
   case $1 in
     *.tar.bz2) tar xvjf $1   ;;
     *.tar.gz)  tar xvzf $1   ;;
     *.tar.xz)  tar xvfJ $1   ;;
     *.bz2)     bunzip2 $1    ;;
     *.rar)     unrar x $1    ;;
     *.gz)      gunzip $1     ;;
     *.tar)     tar xvf $1    ;;
     *.tbz2)    tar xvjf $1   ;;
     *.tgz)     tar xvzf $1   ;;
     *.zip)     unzip $1      ;;
     *.Z)       uncompress $1 ;;
     *.7z)      7z x $1       ;;
     *)         echo "'$1' Не может быть распакован при помощи >ex<" ;;
   esac
 else
   echo "'$1' не является допустимым файлом"
 fi
}
Упаковка в архив
    
Упаковка в архив командой - при этом архив будет в Домашней папке.
pk () {
if [ $1 ] ; then
case $1 in
tbz)       tar cjvf $2.tar.bz2 $2      ;;
tgz)       tar czvf $2.tar.gz  $2       ;;
tar)      tar cpvf $2.tar  $2       ;;
bz2)    bzip $2 ;;
gz)        gzip -c -9 -n $2 > $2.gz ;;
zip)       zip -r $2.zip $2   ;;
7z)        7z a $2.7z $2    ;;
*)         echo "'$1' не может быть упакован с помощью pk()" ;;
esac
else
echo "'$1' не является допустимым файлом"
fi
}
Удаление
    
Измените оболочку по умолчанию перед удалением пакета zsh.
Запустите следующую команду:
$ chsh -s /bin/bash user
Где user - имя пользователя.
Используйте эту команду для каждого пользователя с установленной оболочкой zsh (в том числе и root при необходимости). После, удалите пакет zsh.
Кроме того, изменить оболочку по умолчанию обратно в Bash, можно редактируя от root.
Например, изменить следующие:
username:x:1000:1000:Full Name,,,:/home/username:/bin/zsh
На:
username:x:1000:1000:Full Name,,,:/home/username:/bin/bash
Смотрите также
    
Рекомендуем обязательно обратится к следующим Русскоязычным статьям, для более полного и лучшего понимания.
Статьи на Английском:
- A User's Guide to ZSH
- The Z Shell Manual (different format available here)
- Zsh FAQ
- zsh-lovers(1) (this is also available as in offical repository)
- Zsh Wiki
- Gentoo Wiki: Zsh/HOWTO
- Bash2Zsh Reference Card