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 parancsformá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.
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.
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: