3.9. Parancsértelmezők

A FreeBSD-ben hétköznapi munkánk legnagyobb részét a parancsértelmezőknek (shell) nevezett parancssoros felületen tudjuk elvégezni. A parancsértelmező fő feladata a beérkező parancsok elfogadása és végrehajtatása. Sok parancsértelmező ezenfelül rendelkezik beépített funkciókkal is, amelyek olyan hétköznapi feladatokban igyekeznek segíteni, mint például az állományok kezelése és tömeges elérése reguláris kifejezések használatával, a parancssor szerkesztése, parancsok makrózása és a környezeti változók használata. A FreeBSD alapból tartalmaz néhány parancsértelmezőt, ilyen például az sh, a Bourne Shell, és a tcsh, a továbbfejlesztett C-shell. Sok más parancsértelmező, mint például a zsh és bash is elérhető a FreeBSD Portgyűjteményéből.

De melyik parancsértelmezőt is válasszuk? Ez igazából ízlés kérdése. Ha inkább C programozók vagyunk, akkor valószínűleg egy olyan C-szerű shelllel tudunk kényelmesen dolgozni, amilyen például a tcsh. Ha viszont egy linuxos rendszert használtunk korábban vagy éppen még soha nem használtunk volna a UNIX® parancssorát, érdemes a bash-sel megpróbálkoznunk. A lényeg az, hogy minden parancsértelmezőnek vannak olyan egyedi jellemezői, amiért használatóak vagy éppen nem használatóak a munkánkban, ezért magunknak kell kiválasztani a nekünk megfelelőt.

A shellek egyik legáltalánosabb jellemzője az állományok neveinek kiegészítése. Miután begépeljük egy parancs vagy állománynév első néhány karakterét, a Tab billentyű lenyomásával megkérhetjük a parancsértelmezőt, hogy magától egészítse ki (“találja ki”) a fennmaradó részt. Nézzük erre egy példát. Tegyük fel, hogy van két állományunk, izemize és ize.mize, és szeretnénk letörölni az ize.mize nevűt. Ehhez a következőt kell begépelnünk: rm iz[Tab].[Tab].

Erre a parancsértelmező a következő parancsot írja ki: rm ize[SIPOLÁS].mize.

A [SIPOLÁS] itt a konzol sípjára vonatkozik, amellyel jelzi, hogy nem tudta teljesen kiegészíteni az állomány nevét, mivel egynél több is megfelel a megadott alaknak. Az izemize és az ize.mize is egyaránt az iz előtaggal kezdődik, azonban ebből a parancsértelmező csak az ize előtagot tudta kikövetkeztetni. Ha most begépelünk még egy . karaktert és újra megnyomjuk a Tab billentyűt, a parancsértelmező ezúttal képes lesz az állomány teljes nevét megállapítani.

A parancsértelmezők másik általános jellemzője a környezeti változók használata. A környezeti változók lényegében a parancsértelmező környezetéhez tárolt név-érték párok. Ezt a környezetet látja minden olyan program, amit a parancsértelmezőből meghívunk, és ezért tartalmazni is szokott sok ilyen beállítást. Íme a leggyakoribb környezeti változók felsorolása és rövid leírása:

VáltozóLeírás
USERA bejelentkezett felhasználó neve.
PATHVesszővel elválasztott könyvtárak, ahol a parancsértelmező a végrehajtható állományokat keresi.
DISPLAYAz aktuálisan használt X11 megjelenítő hálózati neve, amennyiben létezik ilyen.
SHELLA használt parancsértelmező.
TERMA felhasználó által használt terminál típusa. Ebből a terminál képességeit lehet megállapítani.
TERMCAPA terminálok adatbázisából származó, különböző terminálfunkciókhoz tartozó helyettesítő (escape) kódok.
OSTYPEAz operációs rendszer típusa, például FreeBSD.
MACHTYPEA rendszer alatt futó gép architektúrája.
EDITORA felhasználó által használt szövegszerkesztő.
PAGERA felhasználó által lapozásra használt program.
MANPATHVesszővel elválasztott könyvtárak, ahol a parancsértelmező a man oldalakat keresi.

A környezeti változók beállítása parancsértelmezőként valamennyire eltér. Például egy C-stílusú parancsértelmező, mint például a tcsh vagy a csh, a setenv paranccsal állítja a környezeti változókat. A Bourne-féle parancsértelmezők, mint például az sh vagy a bash, az export parancsot használják a környezeti változók beállítására. Például a csh vagy a tcsh használata során a következőképpen tudjuk be- vagy átállítani a EDITOR környezeti változó értékét /usr/local/bin/emacs-re:

% setenv EDITOR /usr/local/bin/emacs

Ugyanez a Bourne-féle parancsértelmezőkben:

% export EDITOR="/usr/local/bin/emacs"

A legtöbb parancsértelmezőben a nevük előtt szerepeltetett $ jel segítségével kérhetjük a környezeti változók értékének behelyettesítését a parancssorba. Ennek megfelelően az echo $TERM parancs kiíratja a TERM változó aktuális értékét, mivel ebbe a parancsértelmező már az echo meghívása előtt behelyettesíti a TERM értékét.

A parancsértelmezők számos speciális karaktert, ún. metakarakteret az adatok különleges reprezentációjaként kezelnek. Köztük a leggyakrabban használt a *, amely tetszőleges számú karaktert helyettesít egy állomány nevében. Az ilyen metakarakterek segítségével tudunk egyszerre több állományt is megnevezni. Például ha begépeljük az echo * parancsot, akkor majdnem ugyanazt kapjuk eredményül, mintha az ls parancsot adtuk volna ki, hiszen a parancsértelmező ilyenkor veszi az összes * metakarakterre illeszkedő állományt, és a kiíratásukhoz pedig rendre behelyettesíti ezeket a parancssorba az echo paramétereként.

Ha nem szeretnénk, hogy a parancsértelmező értelmezze a speciális karaktereket, akkor egy “backslash” (visszaper) (\) karaktert eléjük téve mindezt megakadályozhatjuk. Az echo $TERM parancs ugyebár kiíratja a terminálra vonatkozó környezeti változó beállítását, azonban a echo \$TERM változatlanul kiírja a $TERM szöveget.

3.9.1. A parancsértelmezőnk megváltoztatása

A parancsértelmezőnk legegyszerűbben a chsh parancs használatával változtatható meg. A chsh kiadása után elindítja az EDITOR környezeti változónak megfelelő szövegszerkesztőt, ha nem lenne ilyen, akkor alapértelmezés szerint a vi hívódik meg. Az így megnyitott állományban változtassuk meg kedvünk szerint a “Shell: ” kezdetű sort.

A chsh parancsnak megadhatjuk az -s opciót is, amin keresztül szövegszerkesztő használata nélkül be tudjuk állítani a parancsértelmezőt. Például ha a parancsértelmezőnket a bash-re akarjuk lecserélni, akkor ezt írjuk be:

% chsh -s /usr/local/bin/bash

Megjegyzés: A használni kívánt parancsértelmezőnek szerepelnie kell az /etc/shells állományban. Ha a kiválasztott parancsértelmezőt a Portgyűjteményből telepítettük fel, akkor az már minden bizonnyal bekerült oda. Ha viszont saját magunk raktuk volna fel, akkor ide is fel kell vennünk.

Például ha a bash-t manuálisan telepítettük és másoltuk a /usr/local/bin könyvtárba, akkor így kell eljárnunk:

# echo "/usr/local/bin/bash" >> /etc/shells

Majd próbálkozzunk újra a chsh paranccsal.

Ha kérdése van a FreeBSD-vel kapcsolatban, a következő címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon: <gabor@FreeBSD.org>.