Jataka logo
Jataka Számítástechnikai Kft. Magyar English

A cikk eredetileg az azóta megszűnt Linuxmánia weboldalon jelent meg 2002-ben.


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
-dAlkönyvtárak
-fFilenevek
-gCsoportok
-uFelhasználók nevei
-vShell változók
-WAz 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.


2002-2004 © Jataka Kft.
mail@jataka.hu