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 a 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
kell megnéznünk vagy módosítanunk.
A csomag a legfrissebb bash verzióval (2.05a) működik, de akkor is
használható, ha a bash verziószáma 2.05, ebben az esetben a
-g kapcsolót nem ismeri a complete, ezért egy sort ki
kell kommentezni /etc/bash_completion-ból. Ha a bash
verziószáma 2.05-nél kisebb, akkor a csomag használata előtt bash
frissítése is javasolt.


