sala@home:~$

Bash parancssori kiegészítés

A Linux operációs rendszer alatt leggyakrabban használt shell program a bash, az összetett program tudásának azonban többnyire csak töredékét használjuk.

Valószínűleg mindannyian használjuk a parancsok és filenevek kiegészítésének lehetőségét. Elég a parancs első betűit beírnunk és a

TAB

billentyűt leütnünk, és a shell megpróbálja kiegészíteni a parancsot. Ha csak egy parancs kezdődik a beírt betűkkel, akkor automatikusan kiegészítődik, ha több lehetséges kiegészítés is van, akkor a

TAB

újbóli lenyomása után megkapjuk a lehetséges parancsok listáját.

Ha a parancsot már beírtuk, akkor a

TAB

a filenevek kiegészítését segíti. Mivel parancssorban gyakran adunk filenevet paraméternek, ez a kiegészítési mód nagyon hasznos.

Vannak esetek, amikor nem szerencsés, hogy az összes file nevét figyelembe veszi a shell a kiegészítéskor. Ha az

acroread

vagy

xpdf

parancsokkal egy pdf dokumentumot szeretnénk megnézni, akkor sokkal jobb lenne, ha a kiegészítés csak a pdf kiterjesztéssel rendelkező file-okat venné figyelembe.

Szerencsére elég régóta (bash 2.04 béta verziójától kezdve) lehetőségünk van a kiegészítés átprogramozására a beépített

complete

utasítás segítségével.

complete -f -X '!*.pdf' acroread

Az utasítás hatására az

acroread

parancs után csak a pdf kiterjesztéssel rendelkező file-okat veszi figyelembe a shell. A

-f

opció jelöli, hogy a kiegészítésben a fileneveket kell figyelembe venni, a

-X

opció után azt kell megadnunk (egy mintával), melyeket nem akarunk a kiegészítés során használni. Ezért kellett a példában a negálást jelző felkiáltójelet használnunk, hiszen mi csak a *.pdf mintára illeszkedő fileneveket szeretnénk használni. Ha több kiterjesztést is szeretnénk engedélyezni, vagy több programhoz is ugyanazokat a kiterjesztéseket használni, akkor ezt is könnyen megtehetjük:

complete -f -X '!*.@(dvi|DVI)' dvips dviselect dvitype

Az utasítás hatására a

dvips

,

dviselect

és

dvitype

parancsok után csak a .dvi vagy .DVI kiterjesztéssel rendelkező file-okat veszi figyelembe a bash. A példában a kiegészítés során a filenevek listájából választhattunk. Vannak olyan esetek is, amikor nem file-okra van szükségünk, hanem például a felhasználók nevére. Ilyenkor a

-f

helyett más opciót kell használnunk. A következő táblázat a legfontosabb opciókat tartalmazza, a teljes listát a

man bash

segítségével ismerhetjük meg.

OpcióKiegészítés során figyelembe vett dolgok

-d

Alkönyvtárak

-f

Filenevek

-g

Csoportok

-u

Felhasználók nevei

-v

Shell változók

-W

Az opció után felsorolt szavak

 

Ha a

finger

,

su

,

usermod

,

userdel

,

passwd

parancsok után csak a felhasználók nevét szeretnénk használni, könnyen megtehetjük a következő paranccsal:

complete -u finger su usermod userdel passwd

Bár a fentiek alapján mindenki saját maga tudja programozni az automatikus kiegészítést, egyszerűbb letölteni egy olyan programot, ami megteszi ezt helyettünk. A bash-completion csomag több mint száz parancs (pl.

man, cvs, rpm, find, apt-get, ...

) automatikus kiegészítését programozza át. A fenti egyszerű példákat mind a csomagból vettem, a csomag természetesen sokkal bonyolultabb példákat is tartalmaz, olyanokat például, ahol a parancs korábbi paraméterétől is függ a kiegészítés.

Ha szeretnénk megnézni, miként működik a csomag, vagy szeretnénk esetleg kiegészíteni, akkor a

/etc/bash_completion

file-t illetve a /etc/bash_completion.d alkönyvtárat kell megnéznünk.