LINUX-BG   Адрес : http://www.linux-bg.org
Въведение в Z Shell
От: acidmax
Публикувана на: 17-10-2003
Адрес на статията: http://www.linux-bg.org/cgi-bin/y/index.pl?page=article&id=programs&key=355470176
Съдържание:
----------------------------------------------------
1. Обща информация.
2. Използване на автоматичното допълване на команди.
3. Допълване чрез меню.
4. Други възможности.
5. Конфигурационни файлове
6. Команден ред.
7. Финални думи.
8. Ресурси.
9. Примерен .zshrc конфигурационен файл.
-----------------------------------------------------



[1. Обща информация]

Съществува голямо разнообразие от shell-ове (командни интерпретатори за конзола). Някои са добри за скриптиране, други за интерактивна работа и точно zsh спада към вторите (което не му пречи същевременно да е добър за скриптиране). Демонстрирането на мощта на zsh оставя закоравелите bash потребители със отворена уста, така че реших да ви запозная накратко със възможностите му.

Ако нямате zsh инсталиран на машината си, можете да го вземете от http://www.zsh.org/ или от инсталационното CD на дистрибуцията ви.

Независимо от това колко мощен е zsh, той не е широко разпространен. Основната причина за това е, че той не е подразбиращия се shell за Линукс дистрибуциите. Тази чест се пада на GNU bash и не е изненадващо, че повечето Линукс потребители използват единствено него.

Един от проблемите при запознаване със zsh е че трудно да се реши откъде да се започне. Ръководството е достъпно на http://zsh.sunsite.dk/Doc/ , също така има и Ръководство на Потребителя, намиращо се на http://zsh.sunsite.dk/Guide/, но те са препълнени с информация и не е напълно ясно как да се използват едни от най-интересните функции на shell-а. За щастие, и bash и zsh взаимстват основните идеи от sh, така че прехвърлянето на вашата bash конфигурация на zsh не е трудно.



[2. Използване на автоматичното допълване на команди]

Zsh има удивително мощни възможности за допълване на команди с [Tab] но повечето потребители грешно предполагат, че това е нещо което отнема много време за конфигуриране и не си струва. Вярвате или не, необходими са само два реда във вашият .zshrc файл за да заредите цялата библиотека за допълване:

-- [~/.zshrc] -----------------------------
autoload -U compinit
compinit
-------------------------------------------

Фукнцията "compinit" задейства цялата система за допълване, като зарежда допълваща функция за всяко Линукс приложение което zsh може да стартира. Тъй като нямаме нужда да допълваме всяка команда в Линукс по време на сесията, трябва да оптимизираме времето за стартиране на zsh и използването на паметта. За да стане това, compinit декларира всяка функция за допълване да бъде автоматично зареждана (autoload). Autoload указва, че функцията съществува, но дефиницията и не бива прочетена, докато командата не бъде използвана. Всяка функция, дефинираща възможностите за допълване на дадена Линукс команда се намира във файл със името на командата, намиращ се в директория, указана от променливатa на обкръжението FPATH. Опцията "-U" на autoload указва, че за че за функцията compinit няма да се използват съкратени имена (aliases). Всъщност, при зареждане на compinit, autoload винаги използва "-U" заради възможни проблеми когато функция зависи от alias.

Крайният резултат от всичко това е, че клавиша Tab има отговор за всичко:
* ls -[Tab] ви дава списък със всички опции на ls;
* man ip[Tab] показва всички man страници, започващи със "ip";
* mutt -f=[Tab] преглежда директорията ~/Mail и връща списък със всички директории за да изберете;
* w3m [Tab] показва всички наскоро посетени адреси от браузъра (от файла history);

За финна настройка на автоматичното допълване можете да използвате средството "compinstall". То предоставя управляван чрез меню интерфейс към някои от по-екзотичните възможности на системата за допълване. Можете да настроите възможности като проверка на правописа, оцветяване на списъка с възможности, показани след натискане на [Tab], чувствителност към малки/големи букви и други.



[3. Допълване чрез меню]

Една от най-впечатляващите възможности на автоматичното допълване на zsh е избирането чрез меню измежду резултатите, показани след [Tab]. След като вече имате списъка, натискането още веднъж на [Tab] включва менюто в показаните резултати и можете да избирате със стрелките на клавиатурата. Някои ще кажат: Нали мога да се напиша още една-две букви и да се допълни желаното, вместо да се разхождам из менюта... Отговора на този разумен довод е, че можете да задавате при колко резултата да се появява менюто и така ако имате еднотипни по име файлове и укажете че при повече от 10 резултата искате меню, ще ви е по-лесно да изберете файла, който ви трябва. Нуждаете се от следните редове във .zshrc:

--- [~/.zshrc] --------------------------------------------
# зареждаме библиотеката за допълване с менюта
zmodload -i zsh/complist

# искам меню при две или повече възможности за допълване
zstyle ':completion:*' menu select=2

# това е интересно, затова е обяснено по-долу
bindkey -M menuselect '^x' accept-and-infer-next-history

# GNU ls цветове в резултатите от допълването
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
-----------------------------------------------------------

Редът "bindkey -M menuselect '^x' accept-and-infer-next-history" добавя една много удобна функция. Докато сте в менюто за избор и сте над директория, можете да натиснете Ctl+X и ще влезете в нея. Така имате малък файлов мениджър на ваше разположение. Още - по този начин можете да влизате в различни архиви (GNU tar, zip) и да разгледате съдържанието им. Можете също и да разкомпресирате части от тези архиви ако допълвате с меню "tar zxvf файл.tar.gz [Tab][Tab]".



[4. Други възможности]

Силата на zsh не е само в автоматичното допълване. Има над 150 опции, които се задават със setopt и са документирани в man страницата zshoptions.
Например, следният ред улеснява работата със директории:

setopt autocd autopushd \ pushdignoredups

Autocd ви позволява да напишете името на директорията, за да влезете в нея. След това, всеки път като влезете в директория, autopushd я добавя към временната памет за имена на директории, а pushdignoredups предотвратява наличието на дубликати там.

В резултат на това, след като се разходите малко из директориите, със командата "dirs -v" преглеждате съдържанието на паметта, примерно:

-------------------------------------
acidmax@support:~/> dirs -v
0 /var/log
1 /opt/kde
2 /etc/rc.d
3 /etc
4 /usr/bin
-------------------------------------

Ако искате да се върнете в /usr/bin , просто трябва да напишете "~4" и сте там.



[5. Конфигурационни файлове]

При стартирането си, zsh чете няколко конфигурационни файла. Кои ще са те зависи от начина по който е стартиран shell-a. Има два основни типа shell-ове - интерактивни и не-интерактивни. Последните четат командите си от файл, извикан или чрез "zsh файл" или чрез shebang реда в началото му - #!/bin/zsh.

Интерактивния shell получава команди от терминала, на който работи потребителя. Shell-а за влизане във системата е специален тип интерактивен shell - извиква се от програмата login.

Всеки от гореизброените типове shell използва специфична група от конфигурационни файлове. Всички промени, свързани с конфигурацията на zsh трябва да бъдат отразени в правилните файлове. Ето кои файлове се използват от всеки тип shell, подредени по реда на изпълнението си:

* Login shell: /etc/zshenv ; $ZDOTDIR/.zshenv ; /etc/zprofile ; $ZDOTDIR/.zprofile ; /etc/zshrc ; $ZDOTDIR/.zshrc ; /etc/zlogin ; $ZDOTDIR/.zlogin ;
* Интерактивен: /etc/zshenv ; $ZDOTDIR/.zshenv ; /etc/zshrc ; $ZDOTDIR/.zshrc ;
* Не-интерактивен: /etc/zshenv ; $ZDOTDIR/.zshenv ;

Ако не е дефинирана променливата на обкръжението $ZDOTDIR се използва $HOME, а zprofile (ksh-стил) и zlogin (csh-стил) са тук само по исторически причини. Тъй като zshenv се прочита при всяко стартиране на какъвто ида е тип shell, стремежа е размерът му да е минимален. Обикновенно се използва за дефиниране на променливите на обкръжението.



[6. Команден ред]

Командният ред е още нещо, което обикновенно се настройва по вкуса на потребителя. Ако сте свикнали да настройвате prompt-а със в bash със променливата $PS1 тук тя няма да работи, тъй като там се използват за разделители "\", а zsh използва "%". Налага се да пренапишете променливата в zsh-стил. Погледнете в секцията "Prompt extension" на man страницата zshmisc за повече информация.

Ако нямате намерение да модифицирате командния ред по ваш вкус, можете да пробвате готовите, които идват със zsh. Добавете към .zshrc следните редове:

--- [~/.zshrc] -----------------------
autoload -U promptinit
promptinit
prompt вид_на_командния_ред
--------------------------------------

Можете да видите вашите налични командни редове със командата "prompt -l", а ако искате да видите как изглеждат, използвайте "prompt -p". За да прегледате и модифицирате променливата PS1 (както и всяка друга променлива) напишете "vared PS1". Ето какво показва тя в моя случай (използвам готов prompt "suse"  :

--------------------------------------
acidmax@support:~/> vared PS1
%n@%m:%~/>
--------------------------------------

Курсорът е на долния ред и ви позволява лесно редактиране на prompt-а със стрелките.



[7. Финални думи]

Както видяхте, между bash i zsh има доста разлики. Въпреки това двата shell-а имат много общо. Голяма част от вашата bash конфигурация можете да прехвърлите на zsh без или със малко промени. Например съкратените имена на команди и декларирането на променливите на обкръжението са напълно съвместими. Все пак ако използвате някои от специфичните за bash функции, ще се наложи да прекарате известно време, прехвърляйки ги на zsh.

Ако успях да ви съблазня, стартирайте chsh и изберете zsh за ваш shell (не забравяйте да напишете пълния път до zsh). Следващия път когато влезете в системата, ще бъдете посрещнати от zsh prompt  .



[8. Ресурси]

* Домашна страница на проекта Z Shell: http://www.zsh.org/ (огледално копие на http://zsh.sunsite.dk/ ).
* Често Задавани Въпроси (FAQ): http://zsh.sunsite.dk/FAQ/
* Архив на пощенските списъци: http://www.zsh.org/mla/



[9. Примерен .zshrc конфигурационен файл]

--- [~/.zshrc] ---------------------------------------------

#!/bin/zsh

### Зареждане на функциите за допълване
autoload -U compinit
compinit


### Зареждане на функциите за промяна на командния ред
autoload -U promptinit
promptinit


### Тип на командния ред
prompt suse


### Настройки за допълване чрез меню
zmodload -i zsh/complist
zstyle ':completion:*' menu select=2
bindkey -M menuselect '^x' accept-and-infer-next-history
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}


### Други настройки
setopt ALWAYS_LAST_PROMPT # необходимо за допълването чрез меню
setopt NO_BEEP # спиране на досадните beeps
setopt NO_LIST_BEEP

---------------------------------------------------------------


<< Postfix - бърз, сигурен и лесен за управление | Lynx - сила, когато знаеш как да я ползваш ;) >>

Авторите на сайта, както и техните сътрудници запазват авторските права върху собствените си материали публикувани тук, но те са copyleft т.е. могат свободно да бъдат копирани и разпространявани с изискването изрично да се упоменава името на автора, както и да се публикува на видно място, че те са взети от оригиналния им URL-адрес на този сървър (http://www.linux-bg.org). Авторските права на преводните материали принадлежат на техните автори. Ако с публикуването тук на някакъв материал неволно са нарушени нечии права - след констатирането на този факт материалът ще бъде свален.

All trademarks, logos and copyrights mentioned on this site are the property of their respective owners.
Linux is copyright by Linus Torvalds.
© Линукс за българи ЕООД 2007
© Slavei Karadjov 1999 - 2006

All rights reserved.

Изпълнението отне: 0 wallclock secs ( 0.21 usr + 0.00 sys = 0.21 CPU)