A parancssor feldolgozása
A parancszáró RETURN karakter után a shell megpróbálja végrehajtható parancsokká bontani a beérkezett karaktersorozatot. Első lépésben a begépelt sort szavakra bontja. A shell szónak tekinti mindazon karakterek egymást követő sorozatát, amelyet “fehér karakterek” választanak el egymástól. A fehér karakterek közé tartozik a szóköz, a tabulátor és maga az újsor karakter. Ha tehát azt gépeljük be a shell promptnál, hogy
alma korte repa
akkor ezt a shell három szóra fogja bontani, alma lesz az első, korte a második, és repa a harmadik.
Fontos megemlíteni, mert tapasztalataink szerint a DOS felől érkezett felhasználók gyakran elfeledkeznek róla, hogy mindig kell legalább egy fehér karaktert ütni az egyes szavak közé, mert különben a shell nem az általunk szándékozott módon fogja értelmezni a parancsokat. Egynél több szóköz vagy tabulátor az esetek túlnyomó többségében nem okoz problémát, hiányuk viszont mindig, ezért már itt biztatjuk az olvasót, hogy használja nyugodtan a szóköz billentyűt, s a “CD\” jellegű DOS-os pongyolaságokról felejtkezzen el, legalábbis amíg UNIX-os gép terminálja előtt ül...
A szavakra bontott parancssorból az első szót fogja a shell a végrehajtandó parancs nevének tekinteni, az összes többit pedig argumentumnak, amelyeket (némi feldolgozás után) végrehajtáskor átad a parancsnak. Fenti példánkban tehát a végrehajtandó parancs az alma lesz, s argumentumként a korte és a repa szó adódik át: hogy ezekkel a program mit kezd, az már az ő dolga, a shell-t nem érinti.
Az argumentumok két csoportra bonthatóak, az opciókra és az egyéb paraméterekre. Az opciók révén egy program viselkedését tudjuk megváltoztatni, például az ls parancsot a -l opcióval rábírni arra, hogy hosszú formátumú listázást adjon. Az egyéb paraméterek rendszerint a fájlnevek, illetve esetlegesen az opciókhoz tartozó értékek.
A UNIX-ban a '-' karakter jelzi, hogy opciót adunk meg. Az opciók általában egy karakterből állnak, s ebben az esetben több is leírható egymás után, például az ls -l -t egyenértékű az ls -lt paranccsal. Az opciók megadásának mindazonáltal nincs egyértelműen kialakult és rögződött módja, így néha furcsaságokba ütközhet az ember: egyes programok például meglehetősen idegesen reagálnak, ha a felhasználó csoportosítva írja az opciókat, mások épp ellenkezőleg, az egyenként írtakat tekintik illegálisnak. Szerencsére mindez elég ritka, inkább csak a viszonylag régi programok egy részénél fordul elő.
Gyakran előfordul, hogy egy opció után számértéket vagy egy karakterstringet is meg kell adni, például az archiváló programnál a blokkméretet, editornál a scriptfájl nevét, stb. Itt sem egységes a gyakorlat, van olyan program, ahol az opcióbetűvel egybe kell írni a számértéket vagy fájlnevet (például a pr parancsnál a 80 karakteres sorszélesség beállítás pr -w80), máshol viszont az opcióhoz tartozó értéket külön szóba kell írni (például a tar parancsnál a blokkméretet a tar cb 20 formában lehet megadni). A közmegegyezés abba az irányba mutat, hogy az utóbbi megadás a jobb, annál is inkább, mert ebben az esetben a paramétereket váró opciókat is lehet egy csoportos opcióként megadni, ilyenkor az opcióbetűk utáni első paraméter az első olyan opcióhoz tartozik, amelyik értéket igényelt, a következő paraméter a másodikhoz, és így tovább. Egy példa: a
tar -cfvb /dev/rmt/0m 20 src
parancsban a -c opció nem igényel paramétert; a -f opcióhoz a /dev/rmt/0m fog tartozni, a -v megint csak nem igényel, a -b opcióhoz pedig a 20 érték tartozik; az utolsó paraméter, src pedig nem egy opcióhoz tartozó érték, hanem önmagában álló paraméter (példánkban ez az archiválandó könyvtár neve).
Időnként szükségünk lehet arra is, hogy a meghívott programnak egyértelműen jelezzük, vége az opciómegadásnak, most már kizárólag egyéb paraméterek következnek. Ilyen eset lehet például, amikor ilyen-olyan okból egy '-' karaktert szeretnénk paraméterként átadni; normál esetben a meghívott program ezt mindenképpen opciókezdő karakterként próbálja értelmezni, s elég nehezen lehet csak e kényszerképzetéről lebeszélni. Újabb verziójú parancsértelmezőkben a '--' (mínusz-mínusz) karakterszekvencia jelzi a shellnek, hogy a további argumentumokra nem kell opciófeldolgozást végrehajtania. Egy példa: ha véletlenül létrehoztunk egy -f nevű állományt, az rm -f paranccsal hiába is próbálkozunk kitörölni, mert rendszerünk opciónak veszi a -f argumentumot. Az rm -- -f megadás már egyértelművé és végrehajthatóvá teszi kívánságunkat.