Съвети за Conquer и Conquer Terminal
Съдържание
Автор - Лукас Вестерман
След като завърших статиите за екрана, реших, че моите читатели ще се интересуват да разберат какво още могат да направят Bourne-Again Shell (Bash) или Z Shell (Zsh). Ще разгледам различните обвивки на Linux с кратко описание, но Zsh и Bash по-подробно, защото те са тези, които най-често срещам и са ми най-удобни за работа. Вие, читателю, ще имате достатъчно място да експериментирате с няколко различни черупки, за да се запознаете с техните възможности.
Ето списък с налични кожи:
Bourne Shell (sh) е стандартната обвивка на Unix. Не предоставя изключителни характеристики, различни от основните.
Almquist Shell (аш) - пренаписан под лиценза на BSD Bourne Shell. Възможности, както в предишния.
Bourne-Again Shell (bash) е стандартният интерпретатор на команди в дистрибуциите на Linux. Предлага разширен набор от функции на Bourne Shell. Написан като част от проекта GNU.
Debian Almquist Shell (тире) е модерна версия на Almquist за базирани на Debian Linux дистрибуции.
Korn Shell (ksh) е shell, написан от David Korn.
Z Shell (zsh) - счита се за най-„перфектната“ налична обвивка (предлага най-богатия набор от функции). Може да се опише като набор от функции на обвивката sh, ash, bash, csh, ksh и tcsh (TENEX C shell).
C Shell (csh) е шел, написан от Бил Джой. Основната му разлика от другите е сходството на синтаксиса с езика за програмиране C.
Този списък в никакъв случай не е изчерпателен, но изброява черупки, които, доколкото азЗнам, активно се разработва и използва от общността. Може би се чудите защо някой би искал да промени черупката по подразбиране. Основната причина да предпочитам Z Shell пред Bash е, че има някои хубави функции (по-добро автоматично довършване от Bash, по-добре оцветен синтаксис за низа на заявката, ляво/дясно разположение на низа на заявката и т.н.). Богатите възможности за използване на Linux в крайна сметка определят избора. Може би сте опитен C програмист и предпочитате обвивка с подобен синтаксис. В този случай вашият избор ще падне върху C Shell. Не искам да кажа, че една черупка е по-добра от друга само защото има характеристики, които другите нямат, и обратното. В тази статия обаче ще обясня как да конфигурирам Bourne-Again Shell и Z Shell, защото имам опит с тях и защото те изглеждат най-често срещаните.
Първото нещо, което искам да опиша, е как да инсталирате нов шел, как да го изпробвате и как да замените този по подразбиране. За да инсталирате желаната обвивка, просто използвайте инструментите apt-get. След инсталирането ще бъде достъпна съответната страница с ръководство, в която можете да намерите информация за местоположението на конфигурационния файл. Също така, вероятно ще искате да видите нов команден прозорец. Това може да се постигне чрез изпълнение на съответната команда (sh, ash, bash, zsh, csh, ksh и т.н.).*В този случай ще влезете в обвивката, без да заменяте тази по подразбиране. Обикновено препоръчвам да разгледате конфигурационния файл по подразбиране и да надграждате обвивката с локален конфигурационен файл, в случай че нещо се обърка. Също така ви съветвам да изберете типа низ на заявката в конзолата, преди да направите промени в конфигурационния файл. Много е просто: променетесъдържанието на променливата на средата "PS1", като използвате командния ред, докато не сте доволни от резултата, и едва след това копирайте крайния резултат в конфигурационния файл. Когато сте сигурни, че всичко е наред с конфигурационния файл и сте доволни от настройките, тогава можете да започнете да заменяте стандартната обвивка с нова (ако все още имате такова желание, разбира се). Това може да стане с команда като следната:
Разбира се, „/path/to/binary“ трябва да се замени с пътя към обвивката (например „/bin/bash“), а „$USER“ трябва да се замени с името на действителния потребителски акаунт, за който се променя обвивката. В случай, че не сте сигурни в наличието на необходимите (и разпознати от системата) черупки, можете да получите списък с тях, като използвате следната команда:
Може да се случи, че не всички налични обвивки ще бъдат показани, тъй като командата показва само тези, изброени в "/etc/shells", но като цяло пакетите актуализират този списък.
Може да попитате какво точно може да се промени в черупката и защо си струва да го направите. Ще ви кажа как можете да експортирате променливи на средата за използване в мениджъри на прозорци (openbox вместо Gnome, например), как да създавате псевдоними на команди за удобство, как да променяте външния вид на низа на заявката и как да добавяте функции към обвивката. Настройка на Z Shell
Ще се свържа с файла .zshrc за примери (давайки номера на редове за услугата "pastebin").
Ще започна с експортиране на променливи, тъй като е полезно да се знае и лесно да се направи. За да експортирате променлива, използвайте следния синтаксис:
Както в моя конфигурационен файл с номера 11, 15, 117, 82, 116, 131 и 132. Трябва, разбира се, да замените "$VARIABLE" с името на променливата (например "DE" или "OOO_FORCE_DESKTOP") и "стойност" с нейната стойност. Кавичките могат да бъдат пропуснати, акостойността се състои от една дума (както в моя файл). Последните два експорта в моята конфигурация са много полезни при използване на Openbox. Първият инсталира графичната среда на Gnome за "xdg-open" (програма, която открива приложения за файлове по техния тип). С други думи, за "xdg-open" и път на файл, Gnome ще отвори Nautilus, Xfce ще отвори Thunar и KDE ще отвори Konqueror. Второто експортиране е променливата "OOO_FORCE_DESKTOP", която ще каже на OpenOffice да използва темата GTK вместо темата QT, която е по подразбиране в среди, различни от Gnome.
Следващият полезен трик е да добавите псевдоними на команда към конфигурацията, което лесно ви позволява да използвате допълнителни аргументи за командата. Това ясно се вижда в ред 84, където дефинирах псевдонима "trayer" (по този начин скрих извикването на оригиналната команда), за да изпълня командата "trayer" с предварително зададени параметри. Ако трябва да извикате оригиналната команда (без да използвате псевдоним), използвайте следния синтаксис:
В моя случай командата ще изглежда като "\trayer". Това е подобно на начина, по който черупката обикновено указва определен знак, който трябва да се третира само като текст. Псевдонимът "ls" (ред 64), който използвам на всички мои *nix машини, е особено полезен за мен. Той осигурява по-информативен изход за съдържанието на директория.
И сега стигаме до най-интересния аспект в настройката на обвивката - настройката на низа за заявка. Ето как изглежда предпочитаният от мен низ за заявка:
Редовно актуализирам конфигурацията и копието в момента в услугата "pastebin" вече е с няколко промени. Но основното нововъведение е, че сега моят низ за заявка също показва часа. Ако погледнете конфигурацията, можетевижте две дефиниции на низове за заявки в блока if. Той проверява дали използвам програмата Screen и ако е така, низът на заявката също показва текущия номер на прозореца Screen пред потребителското име. Това ми позволява лесно да се ориентирам къде се намирам. Пълен списък с последователности за изход за Zsh е достъпен в страницата на ръководството на zshmisc. И ето списък с тези, които често използвам (взет от http://www.acm.uiuc.edu/workshops/zsh/prompt/escapes.html):
Литерални константи
%% - символ "%"%) - знак ")"
%d - работна директория ($PWD)
- $PWD, но прави две смени. Ако наименуваната директория "X" е префиксът на работната директория, тогава получаваме "
Х". Ако работната директория е началната директория ($HOME), тогава получаваме "
%c е последният компонент на променливата $PWD. Можете да въведете число след "%", за да посочите желания брой компоненти.
%C е същото като "%c" и "%.", с единствената разлика, че знакът "
' никога не се появява в име на директория.
Информация за хоста (име на компютър)
%M е пълното име на компютъра.
%m е името на компютъра до първата точка ("."). След "%" можете да посочите желания брой компоненти на името на компютъра.
Информация за текущото време
%t е текущият час в 12-часов формат am/pm.
%T е текущият час в 24-часов формат.
% * е текущото време в 24-часов формат със секунди.
Информация за текущата дата
%w е дата във формат "ден-дд".
%W — дата във формат mm/dd/yy.
%D — дата във формат "гг-мм-дд".
%D - стойността на "низ" се формира с помощта на функцията strftime. Налични са допълнителни кодове: "%f" показва деня от месеца,като "%e", но без предхождащи знаци за допълване, когато денят е едноцифрен; "%K"/"%L" съответства на "%k"/"%l", използвани за показване на часа (формати 24/12).
Допълнителна информация
%h — текущ номер на команда в историята.
%n е еквивалентен на $USERNAME.
%l е номерът на терминала (tty), където се намира потребителят.
%# - "#", ако обвивката работи с привилегии, в противен случай - "%". Привилегията в този случай се определя от това, че ефективният потребителски идентификатор на потребителя е нула или, ако функциите на POSIX.1e се поддържат, когато е зададен един от векторите на разрешения: Ефективно или Наследимо.
Zsh ви позволява да посочите някои стандартни цветове с техните имена (червено, циан и т.н.). Но също така може да се посочи в стила "\e[0;31m" (както е описано в раздела Bash).
Последната и вероятно най-полезна функция е добавянето на функции. Това се прави по същия начин както в Bash скриптовете, където синтаксисът за дефиниране на функция е "function_name() < #код>". В моя .zshrc файл има няколко функции: m4a, flvmp3, google и други. Както можете да видите, възможно е да се дефинират функции без дескриптора "функция", но кодът е по-четлив с него. Моят конфигурационен файл в никакъв случай не е пример за добър дизайн. В идеалния случай трябваше да поставя всички експорти, функции, псевдоними и т.н. в отделни блокове. Вместо това правя промени в реда, в който ми идват на ум, и резултатът е бъркотия. Може би някак ще се събера и ще го почистя (което се случва около веднъж годишно).
Настройване на Bourne-Again Shell
Експортирането и създаването на псевдоними в Bash се извършва по абсолютно същия начин, както в Zsh. Следва, чеза да научите как да направите това, трябва да се обърнете към първите две описания в раздела Z Shell Setup. Единствените несъответствия с Bash във файла .zshrc, за който имам предвид, е мястото, където се говори за свързване на клавиши (bindkeys) и „PROMPT“. Настройката на низ на заявка в Bash е подобна на тази в Zsh, с изключение на списъка с екраниращи последователности, които могат да се използват в Bash и как се държи променлива, когато заявка е разделена на два реда. Следва списък на последователности за избягване на Bash (взет от http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html):
\a е ASCII звуков сигнал (07).
\d е дата във формат "WeekDay Month Date" (например, "Sat May 1").
\D - "format" се предава на функцията strftime и резултатът се замества в низа на заявката. Празен формат ще генерира данни въз основа на настройките за локализация на системата. Изискват се фигурни скоби.
\e е ASCII "escape" знак (033).
\h е името на компютъра до първата точка (".").
\H е името на компютъра.
\j е броят на заданията, които обвивката изпълнява.
\l е основното име на шел терминала.
\n е нов ред.
\r - връщане на каретка.
\s — име на обвивката, основно име от "$0" (тази част от него след последния знак "/").
\t е текущият час в 24-часов формат „ЧЧ:ММ:СС“.
\T е текущият час в 12-часов формат "ЧЧ:ММ:СС".
\@ е текущото време в 12-часов формат "am/pm".
\A е текущият час в 24-часов формат "ЧЧ:ММ".
\u е потребителското име.
\v е версията на Bash (например 2.00).
\V — Версия на Bash, версия + ниво на корекция (напр. 2.00.0).
\w е текущата директория, като $HOME е заменено с тилда ("
\W е пълният път на текущата директория, замествайки $HOME с тилда.
\! е номерът на историята за тази команда.
\# е номерът на командата за тази команда.\$ - ако ефективният UID е "0", тогава се замества "#", в противен случай - "$".
\nnn е съответният знак за десетичното число "nnn".
\\ е обратна наклонена черта ("\").
\[ - стартира поредица от непечатаеми знаци, които могат да се използват за вграждане на екраниращи последователности в терминала в низа на заявката.
\] е краят на поредица от непечатаеми знаци.
За да създадете низ за заявка с няколко реда в Bash, просто вмъкнете последователност за екраниране на нов ред ("\n"), където искате да я прекъснете. Можете също така да промените "PS2" и по-късно, което ще се появи, когато стартирате многоредова команда (напр. "A" за цикъл). Съществуват съответни екраниращи последователности за управление на цветовете (http://wiki.archlinux.org/index.php/Color_Bash_Prompt#List_of_colors_for_prompt_and_Bash).
Можете да създавате променливи с цветови стойности и да ги използвате в конфигурационен файл. Ето как изглежда моят низ на заявка от Zsh в Bash (без дисплея на часа):