Современная интерактивная командная оболочка Unux zsh
(Z shell) — расширенный аналог bash
и скриптовый интерпретатор.
Содержание
Особенности
Основные полезные особенности zsh
:
- программируемое автодополнение, которое помогает пользователям вводить как команды, так и их аргументы, со встроенной поддержкой нескольких сотен команд;
- разделение истории команд между всеми запущенными экземплярами оболочки;
- расширенное дополнение названий файлов, что позволяет указать файл без необходимости запускать внешние программы, наподобие
find
; - расширенная поддержка переменных и массивов;
- редактирование многострочных команд в едином буфере;
- коррекция опечаток;
- наличие различных режимов совместимости (то есть, можно использовать
zsh
вместоbash
при запуске, как/bin/sh
); - модифицируемые приглашения (prompts), включающие возможность расположить приглашение справа и настроить автоскрытие при наборе длинных команд.
Установка zsh
В Ubuntu
oleg@mobile:~:$ sudo apt zsh
В Arch Linux
oleg@mobile:~:$ sudo pacman -S zsh
разрешение зависимостей...
проверка конфликтов...
Пакеты (1) zsh-5.9-4
Будет загружено: 2,23 MiB
Будет установлено: 6,62 MiB
:: Приступить к установке? [Y/n] y
:: Получение пакетов...
zsh-5.9-4-x86_64 2,2 MiB 721 KiB/s 00:03 [###############################################] 100%
(1/1) проверка ключей [###############################################] 100%
(1/1) проверка целостности пакета [###############################################] 100%
(1/1) загрузка файлов пакетов [###############################################] 100%
(1/1) проверка конфликтов файлов [###############################################] 100%
(1/1) проверка доступного места [###############################################] 100%
:: Обработка изменений пакета...
(1/1) установка zsh [###############################################] 100%
:: Запуск post-transaction hooks...
(1/1) Arming ConditionNeedsUpdate...
oleg@mobile:~:$
Установка Oh My Zsh!
Платформа для управления вашей конфигурацией zsh
. Включает более 180 дополнительных плагинов и более 120 тем.
В Arch Linux
oleg@mobile:~:$ yay -S oh-my-zsh-git
AUR Explicit (1): oh-my-zsh-git-r6192.be4a95297-1
:: PKGBUILD up to date, skipping download: oh-my-zsh-git
1 oh-my-zsh-git (файлы сборки существуют)
...
==> Завершена сборка пакета oh-my-zsh-git r7057.e11d81303-1 (Вс 26 ноя 2023 16:35:51)
==> Очистка...
загрузка пакетов...
разрешение зависимостей...
проверка конфликтов...
Пакеты (1) oh-my-zsh-git-r7057.e11d81303-1
Будет установлено: 5,21 MiB
:: Приступить к установке? [Y/n] y
(1/1) проверка ключей [###############################################] 100%
(1/1) проверка целостности пакета [###############################################] 100%
(1/1) загрузка файлов пакетов [###############################################] 100%
(1/1) проверка конфликтов файлов [###############################################] 100%
(1/1) проверка доступного места [###############################################] 100%
:: Обработка изменений пакета...
(1/1) установка oh-my-zsh-git [###############################################] 100%
You have to execute 'cp /usr/share/oh-my-zsh/zshrc ~/.zshrc' to use it.
Дополнительные зависимости для 'oh-my-zsh-git'
ruby: for some plugin functionality [установлено]
python: for some plugin functionality [установлено]
oh-my-zsh-powerline-theme-git: great theme
bullet-train-oh-my-zsh-theme-git: better powerline theme
git: most themes use git (highly recommended but still optional) [установлено]
:: Запуск post-transaction hooks...
(1/1) Arming ConditionNeedsUpdate...
oleg@mobile:~:$
Синтаксис
$ zsh [<опции>] [<аргумент> ...]
Опции
Специальные опции
--help
Показать эту справку, затем выйти
--version
Показать номер версии
zsh
, затем выйти-b
обрабатывать конечные опции
-c
Принять первый аргумент как команду для выполнения
-o OPTION
Установить опцию по имени
Обычные варианты перечислены.
Опцию можно включить с помощью -o OPTION
, --OPTION
, +o no_OPTION
или +-no-OPTION
.
Опцию можно отключить с помощью -o no_OPTION
, --no-OPTION
, +o OPTION
или +-OPTION
.
Опции перечислены ниже только в форме --OPTION
или --no-OPTION
.
Именованные опции
--aliases
--aliasfuncdef
--allexport
--alwayslastprompt
--alwaystoend
--appendcreate
--appendhistory
--autocd
--autocontinue
--autolist
--automenu
--autonamedirs
--autoparamkeys
--autoparamslash
--autopushd
--autoremoveslash
--autoresume
--badpattern
--banghist
--bareglobqual
--bashautolist
--bashrematch
--beep
--bgnice
--braceccl
--bsdecho
--caseglob
--casematch
--casepaths
--cbases
--cdablevars
--cdsilent
--chasedots
--chaselinks
--checkjobs
--checkrunningjobs
--clobber
--clobberempty
--combiningchars
--completealiases
--completeinword
--continueonerror
--correct
--correctall
--cprecedences
--cshjunkiehistory
--cshjunkieloops
--cshjunkiequotes
--cshnullcmd
--cshnullglob
--debugbeforecmd
--dvorak
--emacs
--equals
--errexit
--errreturn
--evallineno
--exec
--extendedglob
--extendedhistory
--flowcontrol
--forcefloat
--functionargzero
--glob
--globalexport
--globalrcs
--globassign
--globcomplete
--globdots
--globstarshort
--globsubst
--hashcmds
--hashdirs
--hashexecutablesonly
--hashlistall
--histallowclobber
--histbeep
--histexpiredupsfirst
--histfcntllock
--histfindnodups
--histignorealldups
--histignoredups
--histignorespace
--histlexwords
--histnofunctions
--histnostore
--histreduceblanks
--histsavebycopy
--histsavenodups
--histsubstpattern
--histverify
--hup
--ignorebraces
--ignoreclosebraces
--ignoreeof
--incappendhistory
--incappendhistorytime
--interactive
--interactivecomments
--ksharrays
--kshautoload
--kshglob
--kshoptionprint
--kshtypeset
--kshzerosubscript
--listambiguous
--listbeep
--listpacked
--listrowsfirst
--listtypes
--localloops
--localoptions
--localpatterns
--localtraps
--login
--longlistjobs
--magicequalsubst
--mailwarning
--markdirs
--menucomplete
--monitor
--multibyte
--multifuncdef
--multios
--nomatch
--notify
--nullglob
--numericglobsort
--octalzeroes
--overstrike
--pathdirs
--pathscript
--pipefail
--posixaliases
--posixargzero
--posixbuiltins
--posixcd
--posixidentifiers
--posixjobs
--posixstrings
--posixtraps
--printeightbit
--printexitvalue
--privileged
--promptbang
--promptcr
--promptpercent
--promptsp
--promptsubst
--pushdignoredups
--pushdminus
--pushdsilent
--pushdtohome
--rcexpandparam
--rcquotes
--rcs
--recexact
--rematchpcre
--restricted
--rmstarsilent
--rmstarwait
--sharehistory
--shfileexpansion
--shglob
--shinstdin
--shnullcmd
--shoptionletters
--shortloops
--shortrepeat
--shwordsplit
--singlecommand
--singlelinezle
--sourcetrace
--sunkeyboardhack
--transientrprompt
--trapsasync
--typesetsilent
--typesettounset
--unset
--verbose
--vi
--warncreateglobal
--warnnestedvar
--xtrace
--zle
Псевдонимы опций
--braceexpand equivalent to --no-ignorebraces
--dotglob equivalent to --globdots
--hashall equivalent to --hashcmds
--histappend equivalent to --appendcreate
--histexpand equivalent to --badpattern
--log equivalent to --no-histnofunctions
--mailwarn equivalent to --mailwarning
--onecmd equivalent to --singlecommand
--physical equivalent to --cdsilent
--promptvars equivalent to --promptsubst
--stdin equivalent to --shinstdin
--trackall equivalent to --hashcmds
Варианты символов
-0 equivalent to --completeinword
-1 equivalent to --printexitvalue
-2 equivalent to --no-autoresume
-3 equivalent to --no-nomatch
-4 equivalent to --globdots
-5 equivalent to --notify
-6 equivalent to --beep
-7 equivalent to --ignoreeof
-8 equivalent to --markdirs
-9 equivalent to --autocontinue
-B equivalent to --no-bashrematch
-C equivalent to --no-checkjobs
-D equivalent to --pushdtohome
-E equivalent to --pushdsilent
-F equivalent to --no-glob
-G equivalent to --nullglob
-H equivalent to --rmstarsilent
-I equivalent to --ignorebraces
-J equivalent to --appendhistory
-K equivalent to --no-badpattern
-L equivalent to --sunkeyboardhack
-M equivalent to --singlelinezle
-N equivalent to --autoparamslash
-O equivalent to --continueonerror
-P equivalent to --rcexpandparam
-Q equivalent to --pathdirs
-R equivalent to --longlistjobs
-S equivalent to --recexact
-T equivalent to --cbases
-U equivalent to --mailwarning
-V equivalent to --no-promptcr
-W equivalent to --autoremoveslash
-X equivalent to --listtypes
-Y equivalent to --menucomplete
-Z equivalent to --zle
-a equivalent to --allexport
-d equivalent to --no-globalrcs
-e equivalent to --errexit
-f equivalent to --no-rcs
-g equivalent to --histignorespace
-h equivalent to --histignoredups
-i equivalent to --interactive
-k equivalent to --interactivecomments
-l equivalent to --login
-m equivalent to --monitor
-n equivalent to --no-exec
-p equivalent to --privileged
-r equivalent to --restricted
-s equivalent to --shinstdin
-t equivalent to --singlecommand
-u equivalent to --no-unset
-v equivalent to --verbose
-w equivalent to --cdsilent
-x equivalent to --xtrace
-y equivalent to --shwordsplit
Настройка zsh в Linux
Установлен ли zsh
Для проверки выполняем следующую команду:
oleg@mobile:~:$ zsh --version
zsh 5.9 (x86_64-pc-linux-gnu)
oleg@mobile:~:$
Терминал по умолчанию
Для установки этой командной оболочки по умолчанию выполним следующую команду:
oleg@mobile:~:$ chsh -s $(which zsh)
Изменение шелла для oleg.
Пароль:
Шелл изменён.
oleg@mobile:~:$
Выходим из системы и входим заново для использования новой дефолтной оболочки.
Проверяем:
oleg@mobile:~:$ echo $SHELL
/bin/bash
oleg@mobile:~:$
При первичной установке оболочки zsh
оболочка предложит сделать определённые настройки:
This is the Z Shell configuration function for new users,
zsh-newuser-install.
You are seeing this message because you have no zsh startup files
(the files .zshenv, .zprofile, .zshrc, .zlogin in the directory
~). This function can help you with a few settings that should
make your use of the shell easier.
You can:
(q) Quit and do nothing. The function will be run again next time.
(0) Exit, creating the file ~/.zshrc containing just a comment.
That will prevent this function being run again.
(1) Continue to the main menu.
--- Type one of the keys in parentheses ---
При желании отложить настройки нажимаем q.
Результат:
mobile%
При нажатии на 0 будет создан конфигурационный файл ~/.zshrc
, содержащий только комментарий и повторного запуска этой функции больше не произойдёт.
При нажатии на 1 будет выполнен переход в Главное меню:
Please pick one of the following options:
(1) Configure settings for history, i.e. command lines remembered
and saved by the shell. (Recommended.)
(2) Configure the new completion system. (Recommended.)
(3) Configure how keys behave when editing command lines. (Recommended.)
(4) Pick some of the more common shell options. These are simple "on"
or "off" switches controlling the shell's features.
(0) Exit, creating a blank ~/.zshrc file.
(a) Abort all settings and start from scratch. Note this will overwrite
any settings from zsh-newuser-install already in the startup file.
It will not alter any of your other settings, however.
(q) Quit and do nothing else. The function will be run again next time.
--- Type one of the keys in parentheses ---
Заключение
В Linux терминальная оболочка zsh
является очень гибкой и удобной рабочей средой. Если вы значительную часть времени работаете в консоли и пользуетесь Vim, то время, потраченное на изучение и настройку оболочки, обязательно окупится в дальнейшем.