3.9. Parancsértelmezők
Vissza | 3. fejezet - A UNIX alapjai | Előre

## 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
--- | ---
`USER` | A bejelentkezett felhasználó neve.
`PATH` | Vesszővel elválasztott könyvtárak, ahol a parancsértelmező a végrehajtható állományokat keresi.
`DISPLAY` | Az aktuálisan használt X11 megjelenítő hálózati neve, amennyiben létezik ilyen.
`SHELL` | A használt parancsértelmező.
`TERM` | A felhasználó által használt terminál típusa. Ebből a terminál képességeit lehet megállapítani.
`TERMCAP` | A terminálok adatbázisából származó, különböző terminálfunkciókhoz tartozó helyettesítő (escape) kódok.
`OSTYPE` | Az operációs rendszer típusa, például FreeBSD.
`MACHTYPE` | A rendszer alatt futó gép architektúrája.
`EDITOR` | A felhasználó által használt szövegszerkesztő.
`PAGER` | A felhasználó által lapozásra használt program.
`MANPATH` | Vessző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őnké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 az `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. metakaraktert 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.

Vissza | Fel | Előre
3.8. Démonok, jelzések és a futó programok leállítása | Főoldal | 3.10. Szövegszerkesztők

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