Как установить zsh по умолчанию в linux

Обновлено: 30.06.2024

Bash (Bourne-again Shell) — командная оболочка/язык программирования проекта GNU. Название представляет собой отсылку к предшественнику, существовавшей некогда командной оболочке Борна (Bourne shell). Bash работает в большинстве UNIX-подобных операционных систем, в том числе и в GNU/Linux.

В Arch Linux Bash является командной оболочкой, используемой по умолчанию.

Contents

Запуск

Поведение Bash зависит от способа, каким он был запущен.

Если Bash был вызван в TTY в процессе работы команды login , демоном SSH или другим схожим образом, то он считается оболочкой входа (login shell). Этот режим также можно выбрать флагом -l / --login .

Bash считается интерактивной оболочкой (interactive shell), если его стандартные потоки ввода/вывода/ошибок подключены к терминалу (например, при запуске в эмуляторе терминала), причём запуск выполнялся без опции -c и не с неопциональным аргументом (вроде bash скрипт ). Все интерактивные оболочки при запуске считывают файлы /etc/bash.bashrc и

/.bashrc , а интерактивные оболочки входа — также /etc/profile и

Примечание: В Arch исполняемый файл /bin/sh (использовался в оболочке Борна) заменён символической ссылкой на /bin/bash . Если запустить Bash командой sh , то он будет вести себя маскимально приближенно к "настоящему" sh, в том числе и в смысле POSIX-совместимости.

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

В зависимости от способа запуска Bash считывает и исполняет определённый набор файлов. Подробнее см. раздел Bash Startup Files справочного руководства GNU Bash.

/.profile (в указанном порядке). Файл-образец /etc/skel/.bash_profile содержит также указание на исполнение файла

  • Оболочка входа будет неинтерактивной, если вызывается с флагом --login .
  • Интерактивные оболочки (не входа) не исполняют файл

Оболочка и переменные окружения

Поведение оболочки Bash и запущенных в ней программ зависит от переменных окружения. Переменные окружения хранят значения различных параметров оболочки, например, расположение каталогов с исполняемыми файлами или название используемого по умолчанию браузера. При запуске новой оболочки или сценария они наследуют переменные окружения родительского процесса, то есть начинают работу с набором переменных исходной оболочки [1].

Для создания переменной окружения необходимо экспортировать переменную оболочки:

или более кратко:

Переменные окружения принято перечислять в файлах

/.profile или /etc/profile , чтобы другие Bourne-совместимые оболочки могли их использовать.

Командная строка

Командная строка Bash работает под управлением библиотеки Readline. Readline позволяет использовать комбинации клавиш в стиле emacs и vi для взаимодействия с командной строкой, например, для перемещения назад и вперёд целыми словами, удаления слов и т.д. Кроме того, Readline отвечает за хранение истории выполненных команд, а также позволяет создавать макросы.

Автодополнение

Автодополнение (tab completion) — завершение вводимых команд по нажатию клавиши Tab (работает по умолчанию).

Одиночное нажатие

Дополнительные программы и опции

По умолчанию Bash позволяет дополнять команды, имена файлов и переменные. Пакет bash-completion добавляет автодополнение для наиболее распространённых команд и их опций, которые можно включить, считав и исполнив файл /usr/share/bash-completion/bash_completion (обычно считывается автоматически в /etc/bash.bashrc ). С пакетом bash-completion обычные завершения (вроде $ ls file.*<tab><tab> ) будут вести себя немного по-другому, вернуть старое поведение можно командой $ compopt -o bashdefault программа (подробнее см. [2] и [3]).

Настройки для команд

Примечание: Встроенная команда Bash complete может конфликтовать с bash-completion .

По умолчанию Bash помогает завершать только имена файлов, которые следуют за командой. Это можно перенастроить командой complete -c , чтобы дополнялись и определённые команды:

С флагами -cf завершаться будут и команды, и имена файлов после них:

Другие опции автодополнения можно найти в руководстве Bash.

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

Автодополнение истории

Или же, чтобы это работало во всех программах Readline:

Сокращение истории

Переменная HISTCONTROL позволяет предотвратить логирование некоторых команд. Например, чтобы одинаковые команды не попадали в историю, присвойте переменной следующее значение:

Если же задать значение erasedups , то дополнительно из истории будут удалены уже существующие дубликаты команд. Подробнее см. руководство Bash.

Отключение истории

Чтобы временно отключить историю, выполните:

После этого вводимые команды не будут сохраняться в $HISTFILE .

Теперь можно выполнять "чувствительные" в плане безопасности действия, вроде вычисления хэш-суммы пароля ( printf secret | sha256sum ) или работы с GPG ( gpg -eaF secret-pubkey.asc ), не опасаясь, что секретный ключ будет сохранён на диск.

Включить историю обратно можно командой

Чтобы отключить всю историю Bash:

После необходимо удалить старый файл истории (имейте в виду — команды ниже удалят его безвозвратно):

run-help из Zsh

В Zsh есть возможность вызывать справочное руководство для команды перед курсором по комбинации клавиш Alt+h . В Bash то же самое можно сделать с помощью привязки комбинации клавиш в Readline:

Предполагается, что вы используете (стандартный) режим редактирования Emacs.

Псевдонимы

alias (англ. псевдоним) — команда для замены одной строки на другую. Часто используется для сокращения системных команд до аббревиатур или для добавления стандартных аргументов к часто используемым командам.

Пользовательские псевдонимы хранятся в файле

/.bashrc , а системные (для всех пользователей) — в /etc/bash.bashrc . Примеры можно посмотреть в [4].

Функции Bash подробно описаны в Bash/Функции.

Советы и рекомендации

Настройка приглашения

Подстветка синтаксиса и подсказки

blesh-git AUR — редактор командной строки, который написан на чистом Bash и предназначен заменить Readline. Предлагает множество дополнительных возможностей вроде подстветки синтаксиса, подсказок, завершения команд с выпадающим меню, аббревиатур, режима редактирования Vim, хук-функций и т.д.

После установки необходимо считать и выполнить его в интерактивном сеансе. Настройки подробно объясняются в файле

/.blerc и wiki. Доступна также стабильная сборка blesh AUR .

Command not found

В pkgfile есть хук "command not found", который при вводе неизвестной команды автоматически ищет подходящий исполняемый файл в пакетах в официальных репозиториях.

Чтобы хук заработал, его необходимо считать и исполнить:

После этого при попытке запустить недоступную команду будет выведена следующая информация:

Существует альтернативный хук "command not found" в виде пакета command-not-found AUR , результат работы которого выглядит следующим образом:

Отключение комбинации Ctrl+z

Нажатие Ctrl+z в терминале ставит приложение на паузу или закрывает его. Отключить эту комбинацию клавиш можно следующим образом:

Если после этого во время работы adom AUR вы по ошибке вместо Shift+z нажмёте комбинацию Ctrl+z , то она будет проигнорирована и ничего не произойдёт.

Очистка экрана после выхода

Очистка экрана виртуального терминала после выхода:

Смена каталога при вводе пути

Bash может автоматически добавлять команду cd , если введён только путь к каталогу. Стандартное поведение:

Если же добавить в .bashrc строку

то произойдёт следующее:

Autojump

autojump-git AUR позволяет перемещаться по файловой системе с помощью поиска строк в базе данных с часто посещаемыми путями. Чтобы приложение заработало, после установки необходимо считать и выполнить файл /etc/profile.d/autojump.bash .

Запрет на перезапись файлов

Отключение перезаписи файлов с помощью перенаправления вывода на время текущего сеанса:

Команда set -C делает то же самое.

Сделать изменения постоянными:

Принудительно перезаписать файл при установленном noclobber :

Решение проблем

Перенос строк при изменении размера окна

При изменении размера окна эмулятора терминала Bash может не получить соответствующий сигнал. В результате выведенный текст будет переноситься некорректно и перекроет приглашение командной строки. Опция оболочки checkwinsize проверяет размер окна после каждой команды и при необходимости обновляет значения переменных LINES и COLUMNS .

Оболочка завершается даже с опцией ignoreeof

После задания опции ignoreeof вы можете обнаружить, что многократное нажатие Ctrl-d всё равно приводит к завершению процесса оболочки. Дело в том, что по умолчанию эта опция позволяет игнорировать только 10 нажатий данной комбинации клавиш (если быть точным — 10 ситуаций EOF) перед выходом из оболочки.

Задать большее значение можно переменной IGNOREEOF. Например:

Анализ сценария и поиск ошибок

Программа shellcheck проверяет сценарии Bash (и других командных оболочек) на предмет ошибок и предлагает возможные улучшения кода.

Я использую компьютеры моей школы и хотел бы использовать zsh вместо bash . Я хотел бы сделать его оболочкой по умолчанию, но я не могу выполнить команду, например, $ chsh -s $(which zsh) потому что у меня нет прав администратора.

Есть ли способ, которым я могу вставить что-то в мой .bashrc или что-то, что автоматически вызывает, zsh когда это открывается как обходной путь?

Чтобы уточнить, zsh уже установлен.

Да, просто добавьте zsh в .bashrc файл. Выйдите из системы и войдите и все готово! Прости за это. Но чтобы закончить вопрос, я просто поставил zsh на первую строчку? Размещение zsh в .bashrc заставит его всегда выполняться, даже если он bash вызывается явно. Лучше поместите это .bash_profile вместо этого. Вы можете установить zsh в качестве оболочки по умолчанию в настройках терминала (создать новый профиль).

Создайте .bash_profile в своем домашнем каталоге и добавьте эти строки:

Обновление: .profile может работать как общее решение, если оболочка по умолчанию не bash. Я не уверен, .profile что Zsh также может вызывать его, чтобы он стал избыточным, но мы можем сделать это безопасно с помощью простой проверки:

Мы также можем использовать which для получения динамического пути, zsh который зависит от значения $PATH :

Что если администратор Linux (root) изменит оболочку по умолчанию на что-то отличное от bash (но не на zsh), например ksh? Тогда .bash_profile не будет ссылки. Как насчет этого .profile вместо этого? @JoshuaHuber Последний тест, который я сделал, .profile не сработал. Также не .profile будет вызван Zsh ? Это может стать излишним. Пока еще не проверил это. (Обновление: теперь это сработало, не знаю, какую ошибку я допустил раньше.) Есть мысли о возможных недостатках использования .profile ? @konsolebox Bash использует только источники, .profile если .bash_profile они не существуют (если .bash_profile , конечно, вы не получили их вручную ). В частности, Баш источников первая один из файлов [ .bash_profile > .bash_login > .profile ] он находит. Он выглядит только .profile как функция совместимости POSIX (Bourne shell). @pyrocrasty Действительно. Как сказано в руководстве: «После прочтения этого файла он ищет

/ .profile в указанном порядке, а также читает и выполняет команды из первой, которая существует и доступна для чтения. «.

Он работал для настройки нового профиля терминала с помощью команды « Выполнить пользовательскую» вместо того, чтобы моя оболочка была изменена на zsh . .bash_profile и .profile не работал (файлы даже не выполнялись, Fedora 26 на университетском компьютере).

Обычно вы можете использовать chsh как пользователь без полномочий root. Но иногда он отключается, как правило, на сайтах, которые используют какую-либо форму сетевой базы данных пользователей, такую ​​как NIS и LDAP. Вместо этого может быть ypchsh (NIS) или chsh.ldap (LDAP).

chsh также, как правило, допускаются только некоторые утвержденные оболочки, как правило, те, которые перечислены в /etc/shells .

Если вы не можете использовать chsh или его варианты на своем сайте, тогда организуйте для вашей оболочки входа exec вашу любимую оболочку и установите SHELL переменную так, чтобы она указывала на вашу любимую оболочку.

Если ваш Логин оболочки sh , dash или ksh : файл , который нужно редактировать это

/.profile . Помните, что этот файл читается в начале интерактивного сеанса, а также некоторыми неинтерактивными сценариями запуска сеанса (например, для сеансов X11), поэтому вам нужно позаботиться: только вызов exec (который заменяет текущий процесс), когда текущий оболочка является интерактивной. За исключением оболочки Bourne ( /bin/sh для Solaris 10 и более ранних версий), вы можете сказать, что оболочка является интерактивной по наличию i в списке параметров ( $- ).

Если вы хотите, чтобы zsh прочитал ваш .zprofile , передайте -l опцию.

Если ваша оболочка входа в систему bash , вы можете продолжить, как указано выше. Или вы можете ввести эти команды

/.bash_profile . Большинство сценариев запуска сеанса только читают

/.profile и не читают

/.bash_profile , но я видел некоторые, которые запускаются в bash и read .bash_profile , поэтому даже там вы должны быть осторожны, чтобы не вызывать exec неинтерактивную оболочку.

Я считаю, что команда, chsh для этой цели. Хотя я не уверен, что все дистрибутивы Linux / Unix поддерживают это. Проверьте справочную страницу chsh .

Если вы не можете запустить, chsh потому что у вас нет прав администратора, поговорите с кем-то, кто имеет .

Скорее всего, вы не можете использовать его без chsh полномочий root, потому что система, которую вы используете, настроена так, что chsh она не будет работать, например, потому что система использует NIS или LDAP, а не только /etc/passwd файл. Или, возможно, администратор вашей системы просто хочет сохранить некоторый контроль.

Следует помнить еще одну вещь: иногда разные оболочки могут использовать одни и те же файлы запуска. Например, sh и bash может одновременно выполнять $HOME/.profile , и csh и tcsh может одновременно выполнять $HOME/.login и $HOME/.cshrc (хотя оболочки конкретные файлы запуска нравится .bashrc , .bash_profile и .tcshrc могут переопределять). Если ваша оболочка по умолчанию установлена /bin/csh и вы хотите ее использовать /bin/tcsh , обновление .login для вызова /bin/tcsh -l может создать бесконечный цикл. zsh случайно не bash запускаются специфичные файлы запуска, так что это не проблема для вас.

Большинство снарядов установить переменные , которые определяют , какую оболочку вы используете ( $BASH_VERSION , $tcsh , $ZSH_VERSION ). Если вы собираетесь написать код запуска, чтобы вызвать предпочитаемую оболочку, неплохо было бы заключить его в оболочку, if чтобы он выполнялся только в том случае, если эта оболочка еще не запущена. Используя код из ответа konsolebox :

(Добавленная сложность проверки, "$" а не просто "$ZSH_VERSION" возможность, которую вы сделали set -o unset , опция, которая приводит к ошибке ссылки на неопределенную переменную.)

Я могу придумать несколько сценариев.

zsh отсутствует /etc/shells , и OP желает использовать его без необходимости ввода zsh в командной строке. Возможные решения.

а) использовать трюки профиля, чтобы выполнить его при входе в систему. Это так же эффективно, как и реальная смена оболочки.

б) просить администратора , чтобы добавить zsh к /etc/shells так что вы можете chsh к нему

в) попросить администратора изменить вашу оболочку. это не разумно, потому что это лишит вас возможности ftp . Вы можете использовать только ftp если у вас есть оболочка в /etc/shells

пользователь хочет избежать ограниченной оболочки, скорее всего rbash или rsh .

Если .profile это редактируемый, его PATH можно расширить, отредактировав его. После /bin того, как вы попали в путь, вы можете начать bash изнутри rsh/rbash , получив доступ к chsh команде, чтобы позволить вам менять оболочки. Многие команды имеют экранирование оболочки, которое можно использовать для экранирования ограниченной оболочки и восстановления доступа к нему chsh .

chsh на самом деле не работает по какой-то другой причине. Решение а из возможности 1 также является ответом здесь.

Сценарий 2 является единственной причиной для фактического изменения оболочки по умолчанию (это слишком ограничительно).

Zsh является мощной современной оболочкой, которая работает как в интерактивном режиме, так и в качестве интерпретатора языка сценариев. Он совместим с bash (не по умолчанию, только в режиме emulate sh ), но имеет преимущества, такие как улучшенное завершение и подстановка.

Еще больше причин, по которым стоит использовать Zsh, перечислено в Zsh FAQ EN.

Contents

Установка

Перед установкой вы можете посмотреть, какая оболочка используется в данный момент:

Установите пакет zsh . Чтобы значительно расширить возможности автодополнения команд, установите также пакет zsh-completions .

Первоначальная настройка

Убедитесь, что Zsh был установлен правильно, выполнив следующую команду в терминале:

После этого вы должны увидеть скрипт zsh-newuser-install, который проведет вас через некоторые основные настройки. Если вы хотите пропустить первичную настройку, нажмите q . Если скрипт не запустился, вы можете вызвать его вручную:

Установка Zsh в качестве оболочки по умолчанию

Совет: При замене bash пользователь может перенести некоторые участки кода из

/.zshrc (например, приглашение командной строки и псевдонимы), а также из

Файлы Запуска/Завершения

Совет: Смотрите Руководство пользователя Z-Shell, информацию о интерактивном входе в оболочку, и что включать в Ваш автозапуск.
  • Если $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 по умолчанию в нем содержится одна строка, в которой источником является /etc/profile . /etc/profile Этот файл должен быть загружен всеми Bourne-совместимыми оболочками при входе в систему: он устанавливает $PATH и другие переменные окружения и специфичные для приложения ( /etc/profile.d/*.sh ) при входе в систему. $ZDOTDIR/.zprofile Используется для выполнения пользовательских команд при запуске, будет вызван при запуске как login shell. /etc/zsh/zshrc Используется для настройки интерактивной конфигурации оболочки и выполнения команд, будет вызван при запуске как interactive shell. $ZDOTDIR/.zshrc Используется для настройки интерактивной конфигурации пользователя и выполнения команд, будет вызван при запуске как interactive shell. /etc/zsh/zlogin Используется для выполнения команд при завершении прогресса инициализации, будет вызван при запуске как login shell. $ZDOTDIR/.zlogin Используется для выполнения пользовательских команд при завершении начального прогресса, будет вызван при запуске как login shell. $ZDOTDIR/.zlogout Будет получен, когда login shell завершится. /etc/zsh/zlogout Будет получен, когда login shell завершится.

Важно: Не рекомендуется заменять стандартную одну строку в /etc/zsh/zprofile с чем-то другим, это нарушит целостность других пакетов, которые предоставляют некоторые сценарии в /etc/profile.d .

Настройка Zsh

Хотя Zsh может использоваться “из коробки”, он настроен не так, как хотело бы большинство пользователей. Из-за наличия огромных возможностей настройки, доступных в Zsh, этот процесс может оказаться сложным и трудоемким.

Простой .zshrc

Ниже приведён пример файла настроек, который обеспечивает достойный набор опций по умолчанию, а также предоставляет примеры многих вариантов настройки Zsh. Для того, чтобы использовать этот пример, сохраните его в виде файла с именем .zshrc .

Совет: Чтобы применить изменения не завершая сеанс, выполните команду source

Вот простой .zshrc :

Настройка переменной $PATH

Информацию о настройке в zsh системных путей отдельно для каждого пользователя можно найти на странице проекта. Вкратце, добавьте в файл

/.zshenv следующие строки:

Автозавершение команд

Возможно, наиболее убедительной стороной Zsh является его передовые возможности автозавершения. Включите автозавершение в .zshrc . Добавив следующую строку в ваш

Настройки выше включают в себя также ssh/scp/sftp завершения хостов, но для того, чтобы эта функция работала, пользователи должны предотвратить SSH от хеширования хостов имён в

Важно: Это делает компьютер уязвимым для"Island-hopping" атак. В этом случае, закоментируйте следующую строку или установите значение

/.ssh/known_hosts где-то еще, так что ssh создаст новый с un-hashed хостами (ранее известные хосты, таким образом, будут утеряны). Для получения более подробной информации смотрите тут кэшированные-хосты.

Для автозавершения с использованием клавиши-стрелки, добавьте следующие строки в:

Для активации меню нажмите TAB дважды.

Для автозавершения командной строки для алиасов (псевдонимов), добавьте следующее:

Позволяем разворачивать сокращенный ввод, к примеру cd /u/sh в /usr/share

Обработчик неизвестных команд

В утилиту pkgfile входит Zsh скрипт, содержащий функцию command_not_found_handler . При вводе неизвестной команды функция автоматически осуществляет поиск в официальных репозиториях.

Чтобы включить хук, нужно его прочитать. Например, добавьте с файл .zshrc следующую строку:

Примечание: Чтобы это сработало, базу данных pkgfile нужно синхронизировать.

Игнорирование повторяющихся строк в истории

Чтобы игнорировать повторяющиеся строки в истории, используйте следующее:

Чтобы освободить историю от уже созданных дубликатов, запустите:

Команда ttyctl

[1] описывает ttyctl команды в Zsh. Это можно применить для "замораживания / размораживания" терминала. Многие программы изменяют состояние терминала, и часто не восстанавливают настройки терминала нормально при выходе. Чтобы избежать необходимости вручную сбрасывать терминал, используйте следующее:

Назначение клавиш

Zsh не использует Readline, вместо этого он использует свой собственный и более мощный ZLE. Т.е. не читает /etc/inputrc или

/.inputrc . Zle имеет emacs режим и vi режим. По умолчанию, он пытается взять клавиши emacs или vi из переменной среды $EDITOR . Если она пуста, то по умолчанию будет Emacs. Измните это bindkey -e или bindkey -v соответственно в режиме Emacs или режиме VI.

Назначение клавиш в оболочке

Настраиваем нормальное поведение клавиш (не как в vi и emacs). Для этого в

/.zshrc добавьте следующее:

Примечание: Рекомендуем сделать так, как указано в этом подразделе.

Назначение клавиши в ncurses

Bind a ncurses application to a keystoke, but it will not accept interaction. Use BUFFER variable to make it work. The following example lets users open ncmpcpp using Alt+\ :

Альтернативный путь назначения клавиш в 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 . Это может быть сделано путем добавления этих строк:

Доступные цветовые схемы можно перечислить с помощью команды:

Для просмотра всех доступных тем (с примерами), используйте команду:

Например, чтобы использовать цветовую схему bigfade , введите:

Чтобы использовать цветовую схему с заданным цветом (если доступен в теме), введите:

Настройка командной строки (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 - Начало и конец выделения жирным

Цвета

$fg[color] будет установлен цвет текста (значения, подставляемые вместо “color”, к примеру: red, green, blue, и т.д.. - по умолчанию установлены в любом формате до текста)

Команда Описание
%F [. ] %f фактически то же самое, что и предыдущий, но с меньшим набором. Можно также вставить префикс с номером F.
$fg_no_bold[color] будет использоваться не толстый текст с заданным цветом.
$fg_bold[color] будет использоваться толстый текст с заданным цветом.
$reset_color сбросит цвет текста, на цвет по умолчанию. Не сбрасывает толщину текста. Используйте %b для отмены утолщения. Saves typing if it's just %f though.
%K [. ] %k устанавливает цвет фона. Того же цвета, как цвет без текста полужирным. Prefixing with any single-digit number makes the bg black.
Возможные значения цвета
black или 0 red или 1
green или 2 yellow или 3
blue или 4 magenta или 5
cyan или 6 white или 7

Примечание: Утолщённый текст не обязательно использовать тогоже цвета что и обычный. Например, $fg['yellow'] выглядит коричневым или очень темно-желтым, в то время как $fg_bold['yellow'] выглядит ярче или как обычный жёлтый.

Цветной вывод команд

Раскрашивание вывода команд при помощи скрипта grc. Поставьте пакет grc (доступен для установки из репозитория [community]) И добавьте следующие строки в ваш

Пример

Это пример двустороннего промта:

А вот как оно будет отображаться:

Стек Каталогов

Zsh можно настроить, чтобы он помнил DIRSTACKSIZE (последние посещённые каталоги). Это пригодится для более быстрой работы с cd. Вам нужно добавить несколько строк, в файл настройки:

Для вывода стека директорий. Используйте cd -<NUM> чтобы вернуться к посещённому каталогу. Используйте автозавершение (нажав TAB ) после тире.

Примечание: Это не будет работать, если у вас открыто более одной сессии zsh, и использование cd , приведёт к конфликту в обоих ссессиях пишущих в тот же файл.

Команда Help

В отличие от bash, zsh не позволяет использовать встроенный в help команду для автодополнения. Чтобы использовать help в zsh, добавьте следующие строки в ваш

Подсветка синтаксиса как в Fish

Fish обеспечивает очень мощную подсветку синтаксиса. Для использования в zsh, вы можете установить zsh-syntax-highlighting из официального репозитория и обязательно добавьте в ваш

Примеры файла .zshrc

Фреймворки настроек

    управляемый сообществом, популярный фреймворк для настройки вашего Zsh. Он поставляется в комплекте с тонной полезных функций, помощников, плагинов, тем. (доступен в prezto-gitAUR ) настроенный фреймворк Zsh. Он поставляется с модулями, разумно расширяющих среду интерфейса командной строки (по умолчанию), псевдонимами (алиасами), функциями, атодополнением, и темами Prompt. (дступен в antigen-gitAUR ) - менеджер плагинов для zsh, вдохновлённый oh-my-zsh и vundle.

Автозапуск приложений

Примечание: $ZDOTDIR по умолчанию $HOME

Zsh всегда выполняет /etc/zsh/zshenv и $ZDOTDIR/.zshenv так что не раздувайте эти файлы.

При входе в оболочку, читаются команды из /etc/profile а потом $ZDOTDIR/.zprofile . Затем, если оболочка является интерактивной, команды читаются из /etc/zsh/zshrc а потом $ZDOTDIR/.zshrc . Наконец, если в оболочку выполнен вход, читаются /etc/zsh/zlogin и $ZDOTDIR/.zlogin .

Смотрите также секцию STARTUP/SHUTDOWN FILES в zsh(1) .

Постоянный rehash

Обычно compinit не находит новые исполняемые файлы в $PATH. Например после установки нового пакета, файлы в /usr/bin не сразу будут включены в автодополнение. Чтобы включить их в работу, выполните:

'rehash' может выполняться автоматически. Включите его в вашем zshrc :

Примечание: Эта фишка была найдена в PR для Oh My Zsh [2]

Функции

Zsh позволяет пользователю определять собственные функции, которые могут выполняться точно также как и обычные программы. Функции выполняются в том же процессе, что и вызвавшая их программа. При вызове функции аргументы передаются как позиционные параметры.

Распаковка архива

Чтобы распаковать архив не указывая тип распаковщика и его аркументы, а выполнив всего лишь команду вида ex имя_архива.bz2 Добавьте следующий код в

Упаковка в архив

Упаковка в архив командой pk 7z /что/мы/пакуем имя_файла.7z - при этом архив будет в Домашней папке.

Удаление

Измените оболочку по умолчанию перед удалением пакета zsh .

Важно: Несоблюдение процедуры ниже, может привести пользователя к невозможности получить доступ к рабочей оболочке .

Запустите следующую команду:

Где user - имя пользователя.

Используйте эту команду для каждого пользователя с установленной оболочкой zsh (в том числе и root при необходимости). После, удалите пакет zsh .

Кроме того, изменить оболочку по умолчанию обратно в Bash, можно редактируя /etc/passwd от root.

Важно: Настоятельно рекомендуется использовать vipw когда редактируете /etc/passwd это помогает предотвратить неверные записи и/или ошибки синтаксиса.

Например, изменить следующие:

Смотрите также

Рекомендуем обязательно обратится к следующим Русскоязычным статьям, для более полного и лучшего понимания.

Zsh is a powerful shell that operates as both an interactive shell and as a scripting language interpreter. While being compatible with the POSIX sh (not by default, only if issuing emulate sh ), it offers advantages such as improved tab completion and globbing.

The Zsh FAQ offers more reasons to use Zsh.

Contents

Installation

Before starting, users may want to see what shell is currently being used:

Install the zsh package. For additional completion definitions, install the zsh-completions package as well.

Initial configuration

Make sure that Zsh has been installed correctly by running the following in a terminal:

You should now see zsh-newuser-install, which will walk you through some basic configuration. If you want to skip this, press q . If you did not see it, you can invoke it manually with:

Note: Make sure your terminal's size is at least 72×15 otherwise zsh-newuser-install will not run.

Making Zsh your default shell

Tip: If replacing bash , users may want to move some code from

/.zshrc (e.g. the prompt and the aliases) and from

Startup/Shutdown files

  • See A User's Guide to the Z-Shell for explanation on interactive and login shells, and what to put in your startup files.
  • You could consider implementing a standard path for your Zsh configuration files.
  • If $ZDOTDIR is not set, $HOME is used instead.
  • If option RCS is unset in any of the files, no configuration files will be read after that file.
  • If option GLOBAL_RCS is unset in any of the files, no global configuration files ( /etc/zsh/* ) will be read after that file.

When starting, Zsh will read commands from the following files in this order by default, provided they exist.

  • /etc/zsh/zshenv Used for setting environment variables for all users; it should not contain commands that produce output or assume the shell is attached to a TTY. When this file exists it will always be read, this cannot be overridden.
  • $ZDOTDIR/.zshenv Used for setting user's environment variables; it should not contain commands that produce output or assume the shell is attached to a TTY. When this file exists it will always be read.
  • /etc/zsh/zprofile Used for executing commands at start for all users, will be read when starting as a login shell. Please note that on Arch Linux, by default it contains one line which sources /etc/profile . See warning below before wanting to remove that!
    • /etc/profile This file should be sourced by all POSIX sh-compatible shells upon login: it sets up $PATH and other environment variables and application-specific ( /etc/profile.d/*.sh ) settings upon login.
    Warning: Do not remove the default one line in /etc/zsh/zprofile , otherwise it will break the integrity of other packages which provide some scripts in /etc/profile.d/ .

    Configure Zsh

    Although Zsh is usable out of the box, it is almost certainly not set up the way most users would like to use it. But due to the sheer amount of customization available in Zsh, configuring Zsh can be a daunting and time-consuming experience.

    Simple .zshrc

    Included below is a sample configuration file. It provides a decent set of default options as well as giving examples of many ways that Zsh can be customized. In order to use this configuration save it as a file named .zshrc .

    Tip: Apply the changes without needing to logout and then back in by running source

    Here is a simple .zshrc :

    Configuring $PATH

    Zsh ties the PATH variable to a path array. They are automatically synchronized. This allows us to easily manipulate PATH by simply modifying the array. See A User's Guide to the Z-Shell for details.

    The line typeset -U PATH path , where the -U stands for unique, instructs the shell to discard duplicates from both $PATH and $path :

    Command completion

    Perhaps the most compelling feature of Zsh is its advanced autocompletion abilities. At the very least, enable autocompletion in .zshrc . To enable autocompletion, add the following to your

    The above configuration includes ssh/scp/sftp hostnames completion but in order for this feature to work, users must not enable ssh's hostname hashing (i.e. option HashKnownHosts in ssh client configuration).

    For autocompletion with an arrow-key driven interface, add the following to:

    To activate the menu, press Tab twice.

    For autocompletion of command line switches for aliases, add the following to:

    For enabling autocompletion of privileged environments in privileged commands (e.g. if you complete a command starting with sudo, completion scripts will also try to determine your completions with sudo), include:

    Warning: This will let Zsh completion scripts run commands with sudo privileges. You should not enable this if you use untrusted autocompletion scripts. Note: This special kind of context-aware completion is only available for a small number of commands.

    Key bindings

    Zsh does not use readline, instead it uses its own and more powerful Zsh Line Editor (ZLE). It does not read /etc/inputrc or

    /.inputrc . Read A closer look at the zsh line editor and creating custom widgets for an introduction to ZLE configuration.

    ZLE has an Emacs mode and a vi mode. If one of the VISUAL or EDITOR environment variables contain the string vi then vi mode will be used; otherwise, it will default to Emacs mode. Set the mode explicitly with bindkey -e or bindkey -v respectively for Emacs mode or vi mode.

    The recommended way to set key bindings in Zsh is by using string capabilities from terminfo(5) . For example[1][2]:

    History search

    To enable history search add these lines to .zshrc file:

    By doing this, only the past commands matching the current line up to the current cursor position will be shown when Up or Down keys are pressed.

    Shift, Alt, Ctrl and Meta modifiers

    xterm-compatible terminals can use extended key-definitions from user_caps(5) . Those are combinations of Shift , Alt , Ctrl and Meta together with Up , Down , Left , Right , PageUp , PageDown , Home , End or Del . Refer to the zkbd source for a list of recommended names for the modifier keys and key combinations.

    For example, for Ctrl+Left to move to the beginning of the previous word and Ctrl+Right to move to the beginning of the next word:

    Prompts

    Zsh offers the options of using a prompt theme or, for users who are dissatisfied with the themes (or want to expand their usefulness), the possibility to build a custom prompt.

    Prompt themes

    To use a theme, make sure that prompt theme system is set to autoload in .zshrc . This can be done by adding these lines to:

    Available prompt themes are listed by running the command:

    For example, to use the walters theme, enter:

    To preview all available themes, use this command:

    Manually installing prompt themes

    It is possible to install themes manually, without external configuration manager tools. For a local installation, first create a folder and add it to the fpath array, eg:

    Now create a symbolic link of your theme file in this folder:

    If instead you wish to install a theme globally, do:

    Now you should be able to activate it using:

    If everything works, you can edit your .zshrc accordingly.

    Adding prompt themes without a separate file for each one

    In addition to adding a prompt theme through its own file, it is possible to add themes from within another file (like your .zshrc ), eg:

    Customized prompt

    Additionally to a primary left-sided prompt PS1 ( PROMPT , prompt ) that is common to all shells, Zsh also supports a right-sided prompt RPS1 ( RPROMPT ). These two variables are the ones you will want to set to a custom value.

    Colors

    Most terminals support the following colors by name:

    Name Number
    black 0
    red 1
    green 2
    yellow 3
    blue 4
    magenta 5
    cyan 6
    white 7

    Color numbers 0–255 for terminal emulators compatible with xterm 256 colors can be found in the xterm-256color chart.

    With a correctly set TERM environment variable, the terminal's supported maximum number of colors can be found from the terminfo(5) database using echoti colors . In the case of 24-bit colors, also check the COLORTERM environment variable with print $COLORTERM . If it returns 24bit or truecolor then your terminal supports 16777216 (2 24 ) colors even if terminfo shows a smaller number.

    • The colors 0–15 may differ between terminal emulators and their used color schemes.
    • Many terminal emulators display bold with a brighter color.
    Example

    An example of a simple colorless prompt:

    How it will be displayed:

    This is an example of a two-sided prompt with color:

    And here is how it will be displayed:

    To use colors from the 16-255 range and 24-bit true color, you can use the number from 0 to 255 assigned to the wanted color and its hexadecimal color code, respectively:

    Sample .zshrc files

    • To get the same setup as the monthly ISO releases (which use Zsh by default), install grml-zsh-config . It includes the many tweaks and advanced optimizations from grml. - basic setup, with dynamic prompt and window title/hardinfo. - zshrc with multiple features, be sure to check out comments into it. Notable features: confirm function to ensure that user want to run poweroff, reboot or hibernate, support for GIT in prompt (done without vcsinfo), tab completion with menu, printing current executed command into window's title bar and more.

    Tips and tricks

    Autostart X at login

    Restore terminal settings after a program exits abnormally

    Many programs change the terminal state, and often do not restore terminal settings on exiting abnormally (e.g. when crashing or encountering SIGINT).

    This can typically be solved by executing reset(1) :

    The following sections describe ways to avoid the need to manually reset the terminal.

    The ttyctl command

    The ttyctl command can be used to "freeze/unfreeze" the terminal. To freeze the interactive shell on launch, use the following:

    Resetting the terminal with escape sequences

    Alternate linedrawing character set can screw up the terminal in a way which ttyctl cannot prevent.

    A simple solution is to output the escape sequences that reset the terminal from the precmd hook function, so that they are executed every time before the prompt is drawn. For example, using the escape sequence \e[0m\e(B\e)0\017\e[?5l\e7\e[0;0r\e8 :

    To test if it works, run:

    Remembering recent directories

    Dirstack

    Zsh can be configured to remember the DIRSTACKSIZE last visited folders. This can then be used to cd them very quickly. You need to add some lines to your configuration file:

    to print the dirstack. Use cd -<NUM> to go back to a visited folder. Use autocompletion after the dash. This proves very handy if using the autocompletion menu.

    Note: This will not work if you have more than one zsh session open, and attempt to cd , due to a conflict in both sessions writing to the same file.

    cdr allows you to change the working directory to a previous working directory from a list maintained automatically. It stores all entries in files that are maintained across sessions and (by default) between terminal emulators in the current session.

    zoxide

    zoxide is a smarter cd command that lets you navigate anywhere in just a few keystrokes. It remembers your frequently used directories and uses a scoring mechanism to guess where you want to go.

    Help command

    Unlike Bash, Zsh does not enable a built in help command, instead it provides run-help . By default run-help is an alias to man , it can be either executed manually by prepending it to a command or it can be invoked for the currently typed command with the keyboard shortcuts Alt+h or Esc h .

    Since by default it is just an alias to man, it will only work on external commands. To improve its functionality, so that it works on shell builtins and other shell features, you need to use the run-help function. See zshcontrib(1) for more information on the run-help and its assistant functions.

    First load the run-help function and then remove the existing run-help alias. For convenience help can be aliased to run-help . For example, add following to your zshrc :

    Assistant functions have to be enabled separately:

    For example, run-help git commit command will now open the man page git-commit(1) instead of git(1) .

    Persistent rehash

    Typically, compinit will not automatically find new executables in the $PATH . For example, after you install a new package, the files in /usr/bin/ would not be immediately or automatically included in the completion. Thus, to have these new executables included, one would run:

    This 'rehash' can be set to happen automatically.[3] Simply include the following in your zshrc :

    On-demand rehash

    As above, however pacman can be configured with hooks to automatically request a rehash , which does not incur the performance penalty of constant rehashing as above. To enable this, create the /etc/pacman.d/hooks directory, and a /var/cache/zsh directory, then create a hook file:

    This keeps the modification date of the file /var/cache/zsh/pacman consistent with the last time a package was installed, upgraded or removed. Then, zsh must be coaxed into rehashing its own command cache when it goes out of date, by adding to your

    If the precmd hook is triggered before /var/cache/zsh/pacman is updated, completion may not work until a new prompt is initiated. Running an empty command, e.g. pressing enter , should be sufficient.

    Alternative on-demand rehash using SIGUSR1

    As above, however the hook file looks like this:

    Warning: This sends SIGUSR1 to all running zsh instances. Note that the default behavior for SIGUSR1 is terminate so when you first configure this all running zsh instances of all users (including login shells) will terminate if they have not sourced the trap below.

    This method will instantly rehash all zsh instances, removing the need to press enter to trigger precmd .

    Bind key to ncurses application

    Bind a ncurses application to a keystroke, but it will not accept interaction. Use BUFFER variable to make it work. The following example lets users open ncmpcpp using Alt+\ :

    An alternate method, that will keep everything you entered in the line before calling application:

    File manager key binds

    Key binds like those used in graphic file managers may come handy. The first comes back in directory history ( Alt+Left ), the second let the user go to the parent directory ( Alt+Up ). They also display the directory content.

    xterm title

    If your terminal emulator supports it, you can set its title from Zsh. This allows dynamically changing the title to display relevant information about the shell state, for example showing the user name and current directory or the currently executing command.

    The xterm title is set with the xterm escape sequence \e]2; \a . For example:

    will set the title to

    By using print -P you can additionally take advantage of Zsh's prompt escapes.

    • Title printing can be split up in multiple commands as long as they are sequential. sends the xterm title to the hardstatus ( %h ). If you want to use Screen's string escapes (e.g. for colors) you should set the hardstatus with the \e_ \e\\ escape sequence. Otherwise, if string escapes are used in \e]2; \a , the terminal emulator will get a garbled title due to it being incapable of interpreting Screen's string escapes.
    • Do not use the -P option of print when printing variables to prevent them from being parsed as prompt escapes.
    • Use the q parameter expansion flag when printing variables to prevent them from being parsed as escape sequences.

    Terminal emulator tab title

    Some terminal emulators and multiplexers support setting the title of the tab. The escape sequences depend on the terminal:

    Terminal Escape sequences Description
    GNU Screen \ek \e\\ Screen's window title ( %t ).
    Konsole \e]30; \a Konsole's tab title.

    Shell environment detection

    See a repository about shell environment detection for tests to detect the shell environment. This includes login/interactive shell, Xorg session, TTY and SSH session.

    /dev/tcp equivalent: ztcp

    Use the zsh/net/tcp module:

    You can now establish TCP connections:

    Shortcut to exit shell on partial command line

    By default, Ctrl+d will not close your shell if the command line is filled, this fixes it:

    pacman -F "command not found" handler

    pacman includes functionality to search for packages containing a file. The following command-not-found handler will use pacman directly to search for matching packages when an unknown command is executed.

    Third-party extensions

    Configuration frameworks

    Note: Frameworks introduce a level of abstraction and complexity. They can, and often do, introduce undefined behavior. In case of shell breakage, the first debugging step should be to revert to the plain shell.

    Plugin managers

    Fish-like syntax highlighting and autosuggestions

    Fish provides very powerful shell syntax highlighting and autosuggestions. To use both in Zsh, you can install zsh-syntax-highlighting , zsh-autosuggestions , and finally source one or both of the provided scripts from your zshrc:

    pkgfile "command not found" handler

    pkgfile includes a Zsh script file that provides a command_not_found_handler function that will automatically search the pkgfile database when entering an unrecognized command.

    You need to source the script to enable it. For example:

    Uninstallation

    Change the default shell before removing the zsh package.

    Warning: Failure to follow the below procedure may result in users no longer having access to a working shell.

    Run following command:

    Use it for every user with zsh set as their login shell (including root if needed). When completed, the zsh package can be removed.

    Alternatively, change the default shell back to Bash by editing /etc/passwd as root.

    Читайте также: