8.3.0 Bourne Again Shell (bash)

8.3.1 Променливи на средата

Линуксът е сложно животно, има много за следене, много малки детайли които влизат в действие при нормалната ви работа с програми(някои от които дори не се налага да подозирате, че съществуват). Никой не иска да преминава през купища настройки за всяка програма която използва: да и казва какъв вид терминал да ползва, хостнейма на компютъра, как трябва да изглежда промптът...

И така за да се справят с това, потребителите имат така наречената *околна среда*. Околната среда дефинира условията при които програмата ще работи и някои от тези дефиниции са променливи; потребителят може да ги измени и да си играе с тях, така както може само в Линукс системите. Почти всеки shell има променливи(ако не, то той не е много полезен). Тук ще разгледаме командите които bash ни предоставя за работа с неговите променливи.

set ще ви покаже всички променливи които са дефинирани в момента, както и техните стойности. Както повечето bash вградени команди, може да прави няколко други неща (с параметри); но ще оставим с това да ви запознае главната страница на bash(1). Пример 8-1 показва част от изхода на командата set, приложена на компютъра на един от авторите. Забележете променливата PATH(ПЪТ) с която се запознахме по-рано. Програмата във всяка от тези директории може да бъде стартирана просто с писането на името на файла.

Пример 8-1: Изхода на променливите с командата set

% set
PATH=/usr/local/lib/qt/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:
/usr/openwin/bin:/usr/games:.:/usr/local/ssh2/bin:/usr/local/ssh1/bin:
/usr/share/texmf/bin:/usr/local/sbin:/usr/sbin:/home/logan/bin
PIPESTATUS=([0]="0")
PPID=4978
PS1='\h:\w\$ '
PS2='> '
PS4='+ '
PWD=/home/logan
QTDIR=/usr/local/lib/qt
REMOTEHOST=ninja.tdn
SHELL=/bin/bash

% unset VARIABLE

unset ще премахне всички променливи които и зададете, унищожавайки и стойността и променливата; bash ще забрави че променливата е съществувала някога. (Не се тревожете. Ако не е нещо което специално сте дефинирали в тази сесия, то ще бъде забравено в следващата.)

% export VARIABLE=some_value

export е наистина полезена команда. Използвайки го, ви задавате променлива VARIABLE с стойност "някаква_стойност"; ако VARIABLE не е съществувала, сега вече съществува. Ако VARIABLE е съществувала сега има нова стойност, е изчезна. Това не е много хубаво, ако просто се опитвате да добавите директория в вашият PATH(ПЪТ). Ако е така то вероятно имате нужда от нещо подобно:

export PATH=$PATH:/some/new/directory

Забележете използването на $PATH; тогава вие задавате как точно bash да тълкува променливата (заменя я с стойността и), с поставянето на $ пред имаето на променливата. Примерно, echo $PATH ще покаже стойността на $PATH, в моя случей:

% echo $PATH
/usr/local/lib/qt/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:
/usr/openwin/bin:/usr/games:.:/usr/local/ssh2/bin:/usr/local/ssh1/bin:
/usr/share/texmf/bin:/usr/local/sbin:/usr/sbin:/home/logan/bin

8.3.2 Tab довършване

(ето още нещо готино)

  1. Команден интерфейс означава много писане.
  2. Писането е работа.
  3. Никой не обича работата.

От 3 и 2, можем да заключим (4) че никой не обича писането. За шастие bash ни спасява от (5) (никой не харесва командния интерфейс).

Как bash извършва този чудесен подвиг, питате вие? Като допълнение на Глобалните символи(wildcards) bash предлага tab довършване.

Tab довършването работи горе-долу така: Пишете името на файла,. Можеби е в вашият PATH, може би не. Всичко което трябва да направите е да напишето достатъчно от името на файла, че да бъде едтифициран само той. Тогава натискате teb бутона, bash ще се сети какво искате и ще довърши писането вместо вас!

Пример: /usr/src садържа 2 субдиректории: /usr/src/linux и /usr/src/sendmail. Искам да видя какво има в /usr/src/linux. За това пиша ls /usr/src/l и натискам TAB, и bash ми дава ls /usr/src/linux.

Сега да предположим че имаме 2 директории /usr/src/linux и /usr/src/linux-old; Ако напиша /usr/src/l и натисна TAB, bash ще попълни колкото може и ще ми даде /usr/src/linux. Мога да спра до тук или да натисна пак TAB и bash ще ми покаже лист на директориите който съвпадат с това което съм написал до тук.

От сега на татък, по-малко писане ( и от сега хората харесват командния интерфейст). Казах ви, че е готино.


Valid XHTML 1.0 Strict