Az alias mechanizmus

Az alias mechanizmus, amit a C shell és a Korn shell is nyújt a felhasználónak, igen hasznos eszköz olyankor, amikor általunk gyakran használt, bonyolultan leírható parancsszekvenciákra akarunk egy rövid névvel hivatkozni. Működési elvében az alias mechanizmusa a makrókra hasonlít leginkább; amint a shell egy aliasra bukkan, kifejti azt az alias definíciója alapján. Hasznos szolgálatokat tesznek az aliasok akkor is, ha valamilyen parancsot hajlamosak vagyunk rosszul gépelni, netán a DOS után nem áll rá a kezünk az ls-re és folyton a dir parancsot akarjuk végrehajtani - ilyenkor az alias használatával a probléma viszonylag könnyen megoldható.

Az érvényben lévő aliasokat úgy listázhatjuk ki, hogy paraméterek nélkül adjuk ki az alias parancsot:

hp 22: alias

h history

hp 23:

Új alias megadása hasonlóképpen történik,

alias név parancs

formában, ahol név az általunk választott alias, parancs pedig az a parancs vagy parancssorozat, amivé az aliast a shell kifejti.

Mind már létező parancsnévre létrehozhatunk aliast, mind új neveket adhatunk. Az elsőre egy példa, ha mondjuk a cd parancsot akarjuk "felbővíteni", és minden katalógusváltás után kiíratjuk a katalógusban lévő fájlokat:

hp 24: alias cd 'cd \!* ; ls'

hp 25: alias

cd cd !* ; ls

h history

hp 26: cd

FULL-INDEX file1 newfilee2 ravasz temp

akarmi newdir nf semmi text

file newfile nf1 sendmail.cf

hp 27:

A másik megoldásra gyakorlati példa lehet a dir nevű alias, ami a "csökönyös" DOS felhasználók életét könnyítheti meg:

hp 29: alias dir 'echo "Ugye ls-t akart mondani...?"; ls -l'

hp 30: dir

Ugye ls-t akart mondani...?

total 378

-rw-rw-rw- 1 demo guest 166262 Aug 23 20:29 FULL-INDEX

-rw-rw-rw- 1 demo guest 14 Aug 29 16:53 akarmi

-rw-rw-rw- 1 demo guest 530 Aug 29 16:46 file

-rw-r-xr-x 1 demo guest 18 Aug 23 20:42 file1

drwxrwxrwx 3 demo guest 1024 Aug 23 20:59 newdir

-rw-rw-rw- 1 demo guest 18 Aug 23 20:42 newfile

-rw-rw-rw- 1 demo guest 18 Aug 23 20:43 newfilee2

-rwxrwxrwx 1 demo guest 11 Aug 30 21:03 nf

-rwxrwxrwx 1 demo guest 14 Sep 2 09:51 nf1

-rw-rw-rw- 1 root sys 31 Sep 1 13:45 ravasz

-rw-rw-rw- 1 demo guest 13 Aug 29 16:53 semmi

lrwxrwxrwx 1 demo guest 20 Aug 23 23:14 sendmail.cf ->
/usr/lib/sendmail.cf

-rw-rw-rw- 1 demo guest 54 Aug 29 16:57 temp

-rw-rw-rw- 2 demo guest 18 Aug 23 20:59 text

hp 31:

Mindkét alias igényel némi magyarázatot. Általánosan elterjedt szokás, hogy az "alias-olt" parancsot vagy parancssorozatot szimpla idézőjelek közé zárják, elkerülendő hogy a shell behelyettesítéseket végezzen a tartalmán, vagy hogy a shell metakarakterek (esetünkben a kettőspont) zavart okozzanak. A felkiáltójel előtti backslash szerepe kevésbé magától értetődő. Ha nem szerepelne ott, akkor a C shell szokásos eseménybehelyettesítési mechanizmusa lépne életbe (az ugyanis a szimpla idézőjelet se "tiszteli"), s behelyettesítené az alias parancs előtti utolsó parancs argumentumait magába az alias definícióba - általában nem ez az, amit akarunk, mint az alábbi példa is mutatja:

hp 35: echo alma korte repa

alma korte repa

hp 36: alias cd 'cd !*; ls'

alias cd 'cd alma korte repa; ls'

hp 37:

Az esemény-behelyettesítési mechanizmus elől a backslash alkalmazása védi csak meg a felkiáltójel karaktert; ennek hatására a '!*' metakaraktereket csak az alias végrehajtásakor fogja majd a C shell kifejteni és behelyettesíteni, s mivel ekkor a még kifejletlen, alias végrehajtás nélküli cd parancs volt az "előző" parancs, a kifejtett alias annak a paramétereit fogja megkapni.

Az alias behelyettesítés

A C shell a parancsok önálló szavakra bontása után hajtja végre az aliasok kifejtését: a parancssor első szavát leellenőrzi, hogy nem szerepel-e az alias listában; ha igen, akkor behelyettesíti az illeszkedő alias definícióját az argumentum helyébe. Az így behelyettesített új parancssor első szavát megint összeveti a shell az alias listával, mindaddig, amíg talál illeszkedő aliasokat. A behelyettesített nevet a shell megjelöli, és ha a következő menetben ugyanez az alias kerül elő, akkor nem végzi el az aliaskifejtést, elkerülve a végtelen hurkokat. Emiatt működőképes az előbbiekben bemutatott cd alias is.

Két olyan megkötés van, amit az aliasok használatánál figyelembe kell vennünk: az egyik, hogy az alias foglalt név, tehát az alias szó maga nem szerepelhet aliasként. Az

alias alias akármi

tehát tilos, ha ilyen parancsot adunk ki, a shell hibaüzenetet ad. (Fordítva működik a dolog, tehát az alias parancsnak csinálhatunk új aliast, például az

alias a alias

legális, mellesleg igen gyakori megoldás, a kevésnél is kevesebbet gépelni akarók örömére, hasonlóan az

alias h history

parancshoz.)

A másik megkötés, hogy egy alias definíciójában maga az "aliasolt" név csak egyszer szerepelhet, többször nem. Ennek is az célja, hogy kiküszöböljék a végtelen hurkokat. Ennek megfelelően az

alias cmd 'cmd; cmd'

típusú szerkezet tiltott, ha ilyet definiáltunk, végrehajtáskor "Alias loop" hibaüzenetet ad a shell.

Alias törlése

Szükségünk lehet arra is, hogy egy aliast töröljünk, akár azért, mert nincs szükségünk rá, akár mert rosszul definiáltuk. Ezt az unalias paranccsal hajthatjuk végre:

hp 21: alias

h history

hp 22: unalias h

hp 23: alias

hp 24:

 

Tartalomjegyzék