Komandnyj yazyk C-shell Proizvodstvenno-vnedrencheskij kooperativ "I N T E R F E J S" Dialogovaya Edinaya Mobil'naya Operacionnaya Sistema Demos/P 2.1 Komandnyj yazyk C-shell Moskva 1988 ANNOTACIYA Opisyvaetsya interpretator komandnogo yazyka C-shell. Opisany elementy yazyka, operator I struktura programm na C- shell, a takzhe vstroennye vozmozhnosti. 1. Komandnyj yazyk C-shell Vzaimodejstvie pol'zovatelya i operacionnoj sistemy osu- shchestvlyaet interpretator komand - programma svyazi mezhdu pol'- zovatelem i operacionnoj sistemoj. Osnovnaya funkciya interp- retatora - sozdanie processov, vypolnyayushchih zadanie (odnu i bolee komand) pol'zovatelya, sformulirovannoe v vide predlo- zhenij (komandnyh strok) nekotorogo formalizovannogo yazyka - yazyka vzaimodejstviya s operacionnoj sistemoj. Takoj yazyk nazyvayut komandnym. Komandnyj yazyk pozvolyaet vypolnyat' razlichnye zadaniya pol'zovatelya i upravlyat' rabotoj operacionnoj sistemy. Pol'zovateli DEMOS ispol'zuyut neskol'ko standartnyh komandnyh yazykov, odnako avtory reshili ogranichit'sya podrob- nym opisaniem naibolee razvitogo i populyarnogo iz nih - komandnogo yazyka C-shell []. C-shell - yazyk upravleniya zadaniyami so svojstvami uni- versal'nogo yazyka programmirovaniya. Sovmeshchenie svojstv yazyka upravleniya zadaniyami i universal'nogo yazyka programmi- rovaniya delaet C-shell vo mnogom shozhim kak s universal'nymi algoritmicheskimi yazykami, tak i s naibolee razvitymi komand- nymi yazykami. |to otrazheno v samom nazvanii yazyka C-shell: C - ot imeni universal'nogo yazyka programmirovaniya Si i shell - yazyk vzaimodejstviya pol'zovatelya s sistemoj (buk- val'no "obolochka"). V kachestve programmy svyazi mezhdu pol'- zovatelem i operacionnoj sistemoj ispol'zuetsya interpretator csh, prednaznachennyj dlya razbora i vypolneniya predlozhenij na yazyke C-shell. Interpretator csh rabotaet v dvuh rezhimah: interaktivnom i neinteraktivnom. V interaktivnom rezhime pol'zovatel' formuliruet zadanie obychno v vide odnoj komandnoj stroki, posle vypolneniya koto- rogo formuliruetsya sleduyushchee, v vide drugoj komandnoj stroki. V etom rezhime mozhno vypolnyat' zadanie iz neskol'kih komandnyh strok, obrazuyushchih fragment programmy ili vsyu prog- rammu celikom. Takaya programma mozhet soderzhat' uslovnye vyrazheniya i cikly. V neinteraktivnom rezhime vypolnyaetsya komandnyj fajl (programma na yazyke C-shell), v kotorom soderzhatsya komandnye stroki i upravlyayushchie konstrukcii (operatory yazyka C-shell). 1.1. Leksicheskaya struktura yazyka C-shell Predlozhenie na yazyke C-shell formuliruetsya v vide komandnoj stroki, kotoraya mozhet soderzhat' komandu DEMOS (naprimer, /bin/cat), vnutrennyuyu komandu interpretatora csh (naprimer, cd), operator yazyka programmirovaniya C-shell (naprimer, operator cikla while). - 3 - Komandnaya stroka sostoit iz spiska slov i ih razdelite- lej. Slovo mozhet vklyuchat' imya peremennoj, fajla, metasim- voly i konstrukcii iz nih. Interpretaciya slova mozhet pri- vesti k tomu, chto slovo budet zameneno spiskom slov, t.e. strokoj. V chislo peremennyh mogut vhodit' peremennye, opre- delennye programmistom, tak nazyvaemye peremennye okruzheniya (s nimi my poznakomimsya nizhe), i predopredelennye peremennye interpretatora csh. V obshchem sluchae interpretator csh vyde- lyaet sleduyushchie leksemy v komandnoj stroke: slovo, razdeli- tel' slov i metasimvol. Slovo - eto zavershennaya konstrukciya, kotoruyu raspoznaet interpretator csh. Razdelitelyami slov v komandnoj stroke mogut byt' probely, tabulyacii i perechislennye nizhe simvoly: ; ( ) <&lt; >&gt; & | Esli neobhodimo ispol'zovat' eti simvoly v kachestve chasti slova, a ne razdelitelya, to primenyaetsya ekranirovanie simvo- lom \. Naprimer, esli simvolu ; predshestvuet simvol \, on budet vosprinimat'sya ne kak razdelitel' gruppy komand, a kak simvol ';' slova, kotoromu prinadlezhit. Nekotoraya chast' simvolov obrazuet klass tak nazyvaemyh metasimvolov - simvo- lov, imeyushchih special'noe znachenie. Kazhdyj iz perechislennyh nizhe simvolov imeet special'noe znachenie v yazyke C-shell. Special'noe znachenie simvola opredelyaetsya kontekstom slova ili komandnoj stroki ! # $ % : * , ? [ ] { } @ ~ . ^ Simvol \ otmenyaet special'noe znachenie chasti ukazannyh meta- simvolov. Posle razbora komandnoj stroki i podstanovki znachenij peremennyh slovo mozhet "prevratit'sya" v stroku ili ostat'sya slovom, naprimer imenem fajla. Interpretator csh pozvolyaet operirovat' strokami, poluchennymi v rezul'tate interpretacii slov v komandnoj stroke, osushchestvlyat' razlichnye preobrazova- niya: "stroka" 'stroka' `stroka` Kavychki ispol'zuyutsya dlya upravleniya rezhimom grammaticheskogo razbora i interpretacii komandnoj stroki. Dvojnye i odinar- nye kavychki mozhno ekranirovat' simvolom \. Esli komandnaya stroka zanimaet bolee odnoj stroki, to ee mozhno prodolzhit' na sleduyushchej, postaviv v konce simvol \. Stroka, zaklyuchennaya v dvojnye kavychki, interpretiruetsya csh, v nej ispol'zuyutsya special'nye znacheniya metasimvolov i vypolnyayutsya podstanovki znachenij peremennyh. - 4 - Stroka, zaklyuchennaya v odinarnye pravye kavychki (apost- rofy), ne interpretiruetsya. Vse metasimvoly i ih posledova- tel'nosti teryayut svoe special'noe znachenie. V nekotoryh slu- chayah simvoly ? . * ! ~ sohranyayut svoe special'noe znachenie i interpretiruyutsya v takoj stroke. Stroka, zaklyuchennaya v levye odinarnye kavychki, interp- retiruetsya kak komandnaya stroka. |ta komandnaya stroka vypol- nyaetsya i zamenyaetsya rezul'tatom ee vypolneniya. Nizhe perechisleny leksemy - imena operatorov yazyka C- shell i vnutrennih komand interpretatora csh: alias endsw logout suspend alloc eval newgrp switch bg exec nice time break exit nohup umask breaksw fg notify unalias case foreach onintr unhash cd glob popd unlimit chdir goto pushd unset continue hashstat rehash unsetenv default history repeat wait dirs if set while echo jobs setenv else kill shift end limit source endif login stop Imena predopredelennyh vnutrennih peremennyh interpretatora csh: argv history nonomatch status cdpath home notify time checktime ignoreeof path verbose child mail prompt cwd noclobber savehist echo noglob shell V nekotoryh sluchayah odna leksema opredelyaet i imya peremen- noj, i imya vnutrennej komandy interpretatora csh. Tip lek- semy opredelyaetsya po kontekstu. Naprimer, komanda time hro- nometriruet vypolnenie prostoj komandnoj stroki, a predopre- delennaya peremennaya s imenem time ispol'zuetsya dlya ukazaniya interpretatoru, o kakih zadaniyah vyvodit' rezul'taty hrono- metrirovaniya. - 5 - 1.2. Formaty komandnyh strok, peremeshcheniya po fajlovoj sis- teme Interpretator csh poluchaet zadanie v vide komandnoj stroki ili komandnogo fajla. Posledovatel'nost' simvolov ot priglasheniya do simvola perevod stroki (\n) yavlyaetsya komand- noj strokoj. Komandnaya stroka mozhet vklyuchat' prostuyu komandu, posledovatel'nost' komand, gruppu komand, konvejer. Zadanie mozhet vypolnyat'sya v sinhronnom ili asinhronnom rezhi- mah. V rezul'tate razbora komandnoj stroki interpretator csh zapuskaet na vypolnenie odin ili bolee processov. Komandoj my nazyvaem lyuboj ob®ektnyj ili komandnyj fajl, kotoryj mozhet byt' vypolnen pod upravleniem DEMOS. Naprimer, komanda pr -2 -w39 -l24 -t file vyvedet na ekran displeya soderzhimoe fajla file v dve kolonki, strokami po 39 simvolov i stranicami po 24 stroki. Komanda pr (ob®ektnyj vypolnyaemyj fajl kotoroj razmeshchen v kataloge /bin) vypolnyaet sobstvenno formatirovanie pered vyvodom fajla. Rezhimy raboty komandy pr zadayutsya klyuchami, im v komandnoj stroke predshestvuyut znaki minus ili plyus. Znak ispol'zuetsya, chtoby mozhno bylo klyuch otlichit' ot imeni fajla. Krome togo, v komandnoj stroke ukazano imya fajla file, koto- ryj neobhodimo obrabotat' komande pr. Prezhde chem komanda pr nachnet vypolnyat'sya, interpretator vypolnit sleduyushchuyu rabotu: proanaliziruet oshibki v komandnoj stroke; najdet vypolnyaemyj fajl v odnom iz katalogov (v dannom sluchae - v /bin); peredast ego na vypolnenie operacionnoj sisteme vmeste s klyuchami i imenem fajla. Po zaversheniyu vypolneniya komandnoj stroki interpretator csh napechataet priglashenie (forma priglasheniya ustanavliva- etsya pol'zovatelem). |to znachit, chto mozhno vvodit' sleduyu- shchuyu komandnuyu stroku. Komandnaya stroka ob®edinyaet neskol'ko slov, razdelennyh probelami, pervoe iz kotoryh - sobstvennoe imya komandy. CHasto byvaet neobhodimo vypolnit' posledovatel'nost' komand, v etom sluchae mozhno ispol'zovat' simvol ;, naprimer: cat <&lt; file ; pr -2 -w39 -l24 -t file |ta komandnaya stroka privodit k vypolneniyu dvuh komand: - 6 - snachala file budet vyveden na displej takim, kakoj on est', zatem komandoj pr so vsemi ukazannymi preobrazovaniyami. Dlya upravleniya posledovatel'nostyami komand dopuskaetsya ispol'zovanie logicheskih svyazok && i ||, naprimer: cat <&lt; file && pr -2 -w39 -l24 -t file V etom sluchae vtoraya komanda vypolnitsya, esli uspeshno vypol- nitsya pervaya, t.e. esli file sushchestvuet i ego razresheno chitat'. cat <&lt; file1 || pr -2 -w79 -l24 -t file I v etom sluchae vtoraya komanda budet vypolnena, dazhe esli pervaya ne vypolnitsya, naprimer esli file1 otsutstvuet. Slova uspeshno vypolnitsya imeyut opredelennyj smysl - zaver- shivshijsya process dolzhen vernut' kod zaversheniya, ravnyj nulyu. V nekotoryh versiyah komand kod normal'nogo zaversheniya pro- cessa ne raven nulyu. Dlya gruppirovaniya komand ispol'zuyutsya kruglye skobki. Gruppa komand, zaklyuchennaya v skobki, vypolnyaetsya kak samos- toyatel'naya komandnaya stroka i ne vliyaet na vnutrennie pere- mennye drugih chastej komandnoj stroki, naprimer: ls -l; ( cat <&lt; f1 && cat <&lt; f2 ) && date Snachala vydaetsya listing rabochego kataloga, zatem vypolnya- etsya gruppa komand v skobkah i, esli oba fajla sushchestvuyut i razresheno ih chtenie, vypolnyaetsya komanda date. Dlya bezoshi- bochnogo razbora komandnoj stroki interpretatorom csh trebu- etsya, chtoby okolo skobok nahodilis' libo ;, libo &&, libo |, libo ||, libo metasimvoly perenapravleniya vvoda-vyvoda. Kogda byvaet neobhodimo organizovat' posledovatel'nuyu obrabotku potoka dannyh, ispol'zuyutsya mezhprocessnye kanaly. Odin process vyvodit potok dannyh v kanal, drugoj chitaet iz nego. Esli neobhodimo rasshirit' chislo vzaimodejstvuyushchih pro- cessov, to obrazuetsya konvejer komand. Dlya oboznacheniya v komandnoj stroke mezhprocessnogo kanala vydelen simvol |, naprimer: cat -n <&lt; file | pr -2 -w39 -l24 -t Komanda cat prostavlyaet nomera strok v file (klyuch n), i ee vyvod peredaetsya komande pr dlya formatirovaniya. Rezul'tat vyvoditsya na ekran displeya. sort file | cat -n | pr -2 -w39 -l24 >&gt;>&gt; file2 Komanda sort sortiruet fajl; cat - prostavlyaet nomera strok; pr - formatiruet vyvod i dopisyvaet ego v file2. Komandy v - 7 - konvejere mozhno razdelyat' s pomoshch'yu logicheskih svyazok && i ||, gruppirovat' kruglymi skobkami, razdelyat' ;, naprimer: ( cat <&lt; f1 && date ) && ( cat -n <&lt; f1 | sort ); date Esli imeetsya fajl f1, on vyvoditsya na displej, zatem vyvo- ditsya data, a komanda cat, pronumerovav stroki, napravlyaet fajl na sortirovku. Na ekran vyvodyatsya rezul'tat sortirovki i data. Esli f1 otsutstvuet ili ego nel'zya chitat', to vyvo- ditsya tol'ko data. Interpretator pozvolyaet perejti k priemu novoj komand- noj stroki, ne dozhidayas' zaversheniya predydushchej. Takoj rezhim vypolneniya nazyvayut asinhronnym ili parallel'nym. |to daet vozmozhnost' pol'zovatelyu zapustit' na vypolnenie neskol'ko komandnyh strok i prodolzhat' rabotu v interaktivnom rezhime. Simvol & v konce komandnoj stroki ispol'zuyut, kogda neobho- dimo vypolnit' ee asinhronno, naprimer: cat -n <&lt; f1 | pr -2 -w39 -l24 -t >&gt; f2 & Komanda cat vyvodit stroki s nomerami, komanda pr formati- ruet ih, vyvod napravlyaetsya v f2. CHasto pri nabore komandnoj stroki voznikayut oshibki, kotorye mozhno ispravit' prostymi sredstvami. Klavisha ZB (DEL) displeya ispol'zuetsya dlya udaleniya sim- vola, okolo kotorogo nahoditsya kursor. Simvol SU/W (CTRL/W) pozvolyaet udalit' poslednee slovo komandnoj stroki. Simvol SU/U (CTRL/U) pozvolyaet udalit' vsyu stroku. Peremeshcheniya po fajlovoj sisteme vypolnyayutsya komandami cd, popd i pushd. Interpretator hranit put' ot registraci- onnogo k rabochemu katalogu (ego imya hranitsya v predoprede- lennoj peremennoj cwd), a takzhe podderzhivaet stek katalogov, soderzhimoe kotorogo vyvoditsya po komande dirs. Komandy pushd i popd ispol'zuyutsya dlya perehodov po derevu katalogov fajlovoj sistemy i modifikacii soderzhimogo steka katalogov. Komanda cd ne menyaet soderzhimogo steka katalogov. |lementy steka numeruyutsya ot 1, nachinaya ot vershiny steka. Komanda popd bez argumentov ravnosil'na komande cd imya_nomer_2 steka imen katalogov, t.e. osushchestvlyaetsya pere- hod v novyj katalog, imya kotorogo opredelyaetsya avtomati- cheski. Imya_nomer_1 iz steka imen katalogov udalyaetsya, ostal'nye elementy steka sohranyayutsya s novymi nomerami. Komanda popd +chislo udalyaet imya_nomer_(1+chislo) iz steka, ostal'nye elementy steka sohranyayutsya s novymi nomerami. Pri etom perehod v drugoj katalog ne osushchestvlyaetsya. - 8 - Komanda pushd menyaet poryadok imen v steke imen katalo- gov i uvelichivaet ih chislo na 1. Komanda pushd bez argumen- tov ravnosil'na komande cd imya_nomer_2 steka. Pri etom imya_s_nomerom_2 stavitsya v vershinu, a imya_s_nomerom_1 - na ego mesto v steke (ostal'nye elementy steka ostayutsya na svoih mestah). Komanda pushd katalog ravnosil'na komande cd katalog, pri etom katalog zapisyvaetsya v vershinu steka, ostal'nye elementy steka sohranyayutsya s novymi nomerami. Komanda pushd +chislo ravnosil'na komande cd imya_s_nomerom_(1+chislo). Pri etom imya_s_nomerom_(1+chislo) stavitsya v vershinu steka, a chislo imen perepisyvaetsya v konec steka v tom poryadke, v kotorom oni sledovali ot ver- shiny steka. Drugie elementy steka ostayutsya bez izmenenij. 1.3. Upravlenie vvodom i vyvodom V DEMOS ispol'zuyutsya tak nazyvaemye standartnyj vvod, standartnyj vyvod i standartnyj vyvod diagnosticheskih soob- shchenij. Standartnyj vvod opredelyaet istochnik dannyh dlya komandy, standartnyj vyvod - priemnik dannyh, standartnyj vyvod diagnosticheskih soobshchenij - priemnik soobshchenij ob oshibkah. Sushchestvuyut dva rezhima upravleniya vvodom i vyvodom: per- vyj - rezhim umolchaniya; vtoroj - rezhim s yavnym ukazaniem istochnika i/ili priemnika dannyh. V rezhime umolchaniya v kachestve standartnogo vvoda (istochnika) ispol'zuetsya klavia- tura displeya, v kachestve standartnogo vyvoda i standartnogo vyvoda oshibok (priemniki) - ekran displeya. Interpretator pozvolyaet menyat' (pereadresovyvat') istochnik i priemniki dannyh. Pereadresaciya osushchestvlyaetsya s pomoshch'yu razdelitelej special'nogo vida. Dlya ukazaniya napravleniya vvoda (istoch- nika) ispol'zuyutsya sleduyushchie razdeliteli: <&lt;, <&lt;<&lt;, <&lt;<&lt; slovo Esli razdelitel' ne ukazan, vvod osushchestvlyaetsya s klaviatury displeya (standartnyj vvod). Dlya ukazaniya napravleniya vyvoda (priemnika) ispol'zu- yutsya sleduyushchie razdeliteli: >&gt; >&gt;>&gt; | >&gt;& >&gt;>&gt;& |& >&gt;! >&gt;>&gt;! >&gt;&! >&gt;>&gt;&! Esli razdelitel' ne ukazan, vyvod osushchestvlyaetsya na ekran displeya (standartnyj vyvod i standartnyj vyvod oshibok). Metasimvol & ispol'zuetsya, kogda neobhodimo soobshcheniya ob oshibkah vyvodit' vmeste so standartnym vyvodom, a ne na ekran. Metasimvol ! ispol'zuetsya, kogda neobhodimo vremenno - 9 - otmenit' dejstvie nekotoryh klyuchej. Dlya upravleniya rezhimami vvoda-vyvoda ispol'zuyutsya zna- cheniya klyuchej noclobber, noglob i nonomatch. Esli klyuchi usta- novleny, to vypolnyaetsya osobyj rezhim vypolneniya operacij vvoda-vyvoda. Ustanovku i otmenu klyuchej vypolnyayut s pomoshch'yu komand set i unset. Naprimer: set noclobber ili unset noclobber Rassmotrim podrobnee upravlenie vvodom: <&lt; imya_fajla otkryvaetsya fajl, kotoryj chitaetsya vmesto chteniya s kla- viatury displeya; <&lt;<&lt; slovo v kachestve vvoda ispol'zuetsya vvod s klaviatury disp- leya. Vvod prekrashchaetsya, kogda vvedennaya stroka budet identichna slovu. Naprimer: cat >&gt; file <&lt;<&lt; mmm 0123 3456 6789 mmm Komanda cat sozdaet file i zhdet vvoda s klaviatury displeya. Kazhdaya vvedennaya stroka sravnivaetsya s mmm. Esli ona otlichaetsya ot mmm, to zapisyvaetsya v file. Esli ona identichna mmm, vvod prekrashchaetsya i file zakry- vaetsya. Stroka mmm v vyhodnoj fajl ne vvoditsya. Ana- logichnuyu konstrukciyu mozhno ispol'zovat' v komandnom fajle. Rassmotrim podrobnee upravlenie vyvodom: >&gt; imya_fajla rezul'tat napravlyaetsya v ukazannyj fajl. >&gt;! imya_fajla vosklicatel'nyj znak otmenyaet dejstvie klyucha noclobber. Klyuch zapreshchaet vyvod v fajl, esli on k etomu momentu sushchestvuet i ne yavlyaetsya special'nym fajlom (naprimer, /dev/tty*). Dopustim, sushchestvuyut fajly s imenem file1 i file2 i vypolnena komanda set noclobber Togda komanda - 10 - cat <&lt; file2 >&gt; file1 ne vypolnitsya, a komanda cat <&lt; file2 >&gt;! file1 vypolnitsya. Predopredelennaya peremennaya noclobber ispol'zuetsya kak klyuch, zapreshchayushchij sluchajnoe povrezhde- nie sushchestvuyushchih fajlov. Konstrukcii >&gt;!, >&gt;>&gt;!, >&gt;&! i >&gt;>&gt;&! otmenyayut dejstvie etogo klyucha dlya ukazannogo v komandnoj stroke fajla. >&gt;& imya_fajla ili >&gt;&! imya_fajla v pervom sluchae diagnosticheskie soobshcheniya napravlyayutsya v fajl, vo vtorom - budet sdelano to zhe, no s otmenoj dejstviya klyucha noclobber. >&gt;>&gt; imya_fajla ili >&gt;>&gt;! imya_fajla vyvod pomeshchaetsya v konec fajla. Esli fajl otsutstvuet, to on sozdaetsya, vo vtorom - budet sdelano to zhe, no s otmenoj dejstviya klyucha noclobber. >&gt;>&gt;& imya_fajla ili >&gt;>&gt;&! imya_fajla v pervom sluchae csh dobavit diagnosticheskie soobshcheniya v fajl, vo vtorom sluchae budet sdelano to zhe, no s otme- noj dejstviya klyucha noclobber. Mozhno zapretit' izmenenie rasshireniya imeni fajla. Dlya etoj celi ispol'zuetsya klyuch noglob. V obshchem sluchae imya fajla imeet vid: osnova_imeni.suffiks. Esli ustanovlen klyuch noglob, izmenenie suffiksov imen sushchestvuyushchih fajlov budet porozhdat' sostoyanie oshibki. CHtoby otmenit' dejstvie etogo klyucha dlya konkretnyh fajlov, v komandnyh strokah mozhno uka- zyvat' te zhe konstrukcii, chto i pri ispol'zovanii klyucha noclobber. Sushchestvuet vozmozhnost' perenapravleniya soobshchenij ob oshibkah v konvejere. S etoj cel'yu ispol'zuetsya konstrukciya |&. Ee ispol'zovanie v konvejere privedet k tomu, chto vse diagnosticheskie soobshcheniya budut napravleny ne na ekran disp- leya (standartnyj vyvod oshibok), a vmeste s ostal'nym vyvo- dom. Naprimer, soobshcheniya ob oshibkah v konvejere cat <&lt; file1 |& pr -w79 -l24 >&gt; file2 budut napravleny ne na standartnyj vyvod (ekran displeya), a cherez pr v file2. 1.4. Upravlenie processami Process yavlyaetsya osnovnym ob®ektom DEMOS, mozhet vypol- nyat'sya sinhronno i asinhronno. Sinhronnyj process - eto - 11 - process, kotoryj na vse vremya vypolneniya preryvaet svyaz' mezhdu pol'zovatelem i interpretatorom, asinhronnyj process vypolnyaetsya parallel'no s csh. Komandnaya stroka mozhet porozhdat' neskol'ko processov, kazhdomu iz kotoryh prisvaiva- etsya unikal'nyj nomer - identifikator. Identifikator ispol'- zuetsya dlya upravleniya processom. Sushchestvuyut dva tipa identi- fikatorov processa: sistemnyj i vnutrennij. Sistemnyj iden- tifikator processa vyvoditsya komandoj ps i otnositsya k kazh- domu processu. Kazhdomu sistemnomu identifikatoru processa stavit'sya v sootvetstvie unikal'nyj vnutrennij identifika- tor. Vnutrennij identifikator processa izvesten tol'ko pol'zovatelyu, otnositsya ko vsem processam, porozhdennym odnoj komandnoj strokoj, i ispol'zuetsya dlya upravleniya processom v komandah fg, bg, stop, kill, notify. Process mozhet naho- dit'sya v dvuh sostoyaniyah - vypolnyat'sya ili byt' priostanov- lennym. Mehanizm upravleniya processom vklyuchaet sleduyushchie sredstva: zavershenie vypolneniya sinhronnogo (asinhronnogo) pro- cessa; priostanovlenie (vozobnovlenie) vypolneniya sinhronnogo (asinhronnogo) processa; izmenenie rezhima vypolneniya processa s sinhronnogo na asinhronnyj i naoborot; vyvod soobshcheniya o sostoyaniyah asinhronnogo processa posle ego zaversheniya ili v moment izmeneniya; upravlenie vvodom-vyvodom pri vypolnenii processa; poslat' signal processu; upravlenie resursami processa. Svedeniya o processah hranyatsya interpretatorom v vide tablicy. Aktual'noe sostoyanie tablicy mozhno poluchit', vypolniv komandu jobs ili jobs -l. Vo vtorom sluchae vyvo- ditsya bolee podrobnaya informaciya. Posle vypolneniya komandy jobs poluchim, naprimer: - 12 - [1] Ostanovlen cc -c *.o [2] - Ostanovlen make install [3] + Ostanovlen red file [4] Vypolnyaetsya sort file >&gt; result & [5] Vypolnyaetsya mx -q -N -u -s *.m >&gt; out & Kazhdaya stroka tablicy soderzhit svedeniya o konkretnom pro- cesse. V kvadratnyh skobkah ukazan vnutrennij identifikator processa. Sushchestvuet neskol'ko sposobov ukazaniya identifi- katora v komandnoj stroke pri ssylke na element tablicy pro- cessov: % ili %+ poslednij iz priostanovlennyh; %- predposlednij iz priostanovlennyh; %nomer lyuboj s takim vnutrennim identifikatorom; %simvoly lyuboj s takimi pervymi simvolami stroki; %?shablon? lyuboj process s takim shablonom v stroke. Zapusk sinhronnogo processa osushchestvlyaetsya v rezul'tate vypolneniya komandnoj stroki, na konce kotoroj net simvola &. CHtoby prekratit' vypolnenie sinhronnogo processa, neobhodimo napechatat' simvol SU/C (CTRL/C). Esli nuzhno prekratit' vypolnenie sinhronnogo processa s sohraneniem v fajle obraza pamyati, to neobhodimo napechatat' simvol SU/\ (CTRL/\). Pri etom v rabochem kataloge budet zapisan fajl s imenem core. Fajl core yavlyaetsya kopiej pamyati, kotoruyu zanimal v OZU pro- cess v moment, kogda byl poslan signal SU/\. Sinhronnyj process mozhet vyvodit' informaciyu na ekran displeya. V etom sluchae, chtoby priostanovit' vyvod, neobho- dimo napechatat' simvol SU/S (CTRL/S), chtoby prodolzhit' vypolnenie, neobhodimo napechatat' simvol SU/Q (CTRL/Q). Esli sinhronnyj process ne vyvodit informaciyu na displej, chtoby ego priostanovit', neobhodimo napechatat' simvol SU/Z (CTRL/Z), a chtoby prodolzhit' - napechatat' fg ili %. Opisan- nye sposoby upravleniya sinhronnym processom sushchestvenno raz- lichny. Pervyj ispol'zuetsya tol'ko v sluchae vyvoda na disp- lej, vtoroj mozhno ispol'zovat' v lyubom sluchae. Krome togo, pri ispol'zovanii SU/Z sinhronnyj process priostanavlivaetsya s vozobnovleniem raboty csh, a pri ispol'zovanii SU/S etogo ne proishodit. Sushchestvuet vozmozhnost' perevesti process iz sinhronnogo v asinhronnyj rezhim vypolneniya. Dlya etogo neob- hodimo priostanovit' ego, ispol'zuya SU/Z, zatem napechatat' - 13 - bg. S etogo momenta i do svoego zaversheniya process budet vypolnyat'sya asinhronno. Zapusk asinhronnogo processa osushchestvlyaetsya v rezul'- tate vypolneniya komandnoj stroki, v konce kotoroj ukazan simvol &. Posle zapuska asinhronnogo processa na ekran displeya vyvoditsya soobshchenie vida [chislo] chislo CHislo v kvadratnyh skobkah - vnutrennij identifikator pro- cessa, chislo bez skobok - sistemnyj identifikator processa. CHtoby priostanovit' vypolnenie asinhronnogo processa, neob- hodimo napechatat' stop %identifikator_processa ili stop %stroka V formate stop %stroka v kachestve stroki ispol'zuetsya odna iz form ssylki na tablicu processov. Dopustim, imeetsya nes- kol'ko asinhronno vypolnyaemyh processov: 1 sort file >&gt; /tmp/result & 2 cc *.c >&gt;& errors & 3 lint *.c >&gt;& mymsg & Pervyj mozhno ostanovit' tak: stop %1 ili stop %sort; vtoroj - stop %2 ili stop %c; tretij - stop %3 ili stop %li, ili stop %?mymsg?. CHtoby vozobnovit' vypolnenie priostanovlen- nogo processa, ispol'zuetsya komanda fg dlya zapuska ego kak sinhronnogo i bg dlya zapuska ego kak asinhronnogo. Varianty zapuska na asinhronnoe vypolnenie priostanovlennogo pro- cessa: %identifikator_processa & %stroka & bg %identifikator_processa bg %stroka fg %identifikator_processa & fg %stroka & Varianty zapuska na sinhronnoe vypolnenie priostanovlennogo processa: %identifikator_processa %stroka fg %identifikator_processa fg %stroka CHasto voznikaet neobhodimost' prinuditel'no (do nor- mal'nogo okonchaniya) zavershit' rabotu asinhronnogo processa. - 14 - Pri etom ne vazhno, vypolnyaetsya on ili priostanovlen. V etom sluchae processu neobhodimo poslat' signal prinuditel'nogo zaversheniya: kill -KILL %identifikator_processa ili kill -KILL %stroka ili kill -KILL sistemnyj_identifikator_processa Dlya priostanovki interpretatora ispol'zuetsya komanda suspend, tak kak komandu SU/Z interpretator ignoriruet. Asinhronnye processy proizvodyat vyvod standartnym obra- zom. Vyvod mozhno zapretit', vypolniv komandu stty tostop Esli ustanovlen klyuch terminala tostop, vse asinhronnye pro- cessy budut ostanavlivat'sya pri popytke ispol'zovat' stan- dartnyj vyvod. Pri popytke chteniya s terminala asinhronnyj process ostanavlivaetsya v lyubom sluchae. Primer: stty tostop cat <&lt; file & [1] 285 jobs [1] + ZHdet (vyvod na terminal) cat <&lt; file CHtoby vozobnovit' vyvod, neobhodimo vypolnit' komandu fg %1 ili fg %cat CHtoby otmenit' klyuch tostop, sleduet vypolnit' komandu stty -tostop Komanda kill ispol'zuetsya dlya posylki signala processu. Formaty komandy kill: kill -l vyvesti spisok signalov; kill %nomer ili kill %stroka poslat' signal TERM (okonchit') processu; kill sistemnyj_identifikator_processa poslat' signal TERM processu; - 15 - kill -SIG process poslat' signal SIG processu. Signaly zadayutsya libo po ih nomeram, libo po ih imenam (kak oni zadany v /usr/include/signal.h bez prefiksa SIG). Obychno vse soobshcheniya ob izmenenii sostoyanij processa vyvo- dyatsya na ekran displeya posle vyvoda priglasheniya (ne v moment vypolneniya drugogo processa). Peremennaya notify, esli ona ustanovlena, obespechivaet vyvod vseh soobshchenij asinhronno. Mozhno ustanovit' rezhim notify dlya vseh processov ili dlya konkretnogo processa: notify - ustanovlen dlya vseh processov; unset notify - otmena rezhima; notify %nomer - ustanovlen dlya processa s nomerom. Dlya 32-bitnyh mashin voznikaet problema ogranicheniya resursov, vydelennyh processu. Imeetsya vozmozhnost' ograni- chivat' sleduyushchie tipy resursov: cputime maksimal'noe chislo sekund central'nogo processora, otvodimoe kazhdomu processu; filesize maksimal'nyj razmer fajla, kotoryj mozhno sozdat'; datasize maksimal'noe uvelichenie oblasti (dannye + stek) s pomoshch'yu sbrk(2) za granicu teksta programmy; stacksize maksimal'nyj razmer avtomaticheski rasshiryaemoj oblasti steka; coredumpsize maksimal'nyj razmer dampa, kotoryj budet sozdan. Dlya opredeleniya razmera resursa ispol'zuetsya komanda limit, dlya otmeny - komanda unlimit. Dlya vseh tipov resur- sov, krome cputime, ispol'zuetsya razmernost' k - Kilobajty ili m - Megabajty. Dlya cputime ispol'zuyutsya ss - sekundy, m - minuty, h - chasy. Dlya ukazaniya tipa resursov ispol'zuyutsya privedennye vyshe klyuchevye slova. Primery: - 16 - limit cputime 1m (1 minuta) limit cputime 05:30 (5minut 30 sekund) limit filesize 2m (razmer fajla do 2 Mbajt) 1.5. SHablony imen fajlov i katalogov Esli slovo soderzhit odin iz simvolov *, ?, [, ], {, } ili nachinaetsya s simvola ~ (nadcherkivanie), to ono stano- vitsya kandidatom na podstanovku imeni fajla. Pri etom dan- noe slovo rassmatrivaetsya kak shablon, kotoryj zamenyaetsya otsortirovannym v alfavitnom poryadke spiskom imen fajlov, kotorye sootvetstvuyut shablonu. Esli ni dlya odnogo vozmozhnogo varianta podstanovki imeni po shablonu ne nahoditsya, to porozhdaetsya sostoyanie oshibki. Nizhe raskryty znacheniya simvo- lov v shablonah imen fajlov i katalogov. * sootvetstvuet lyuboj posledovatel'nosti simvolov. Napri- mer, po komande echo * budut pokazany imena vseh fajlov rabochego kataloga, po komande echo */*/f* budut pros- motreny vhodyashchie katalogi i vyveden spisok vseh fajlov, imena kotoryh nachinayutsya na f. ? sootvetstvuet odnomu lyubomu simvolu. Primer: % ls f.? f.c f.o f.s budut vyvedeny imena vseh fajlov kataloga, kotorye v kachestve osnovy imeni imeyut simvol f, a v kachestve ras- shireniya imeni - odin lyuboj simvol. [posledovatel'nost'_simvolov] sootvetstvuet lyubomu simvolu ukazannoj posledovatel'- nosti. Primer: % ls f.[cso] f.c f.o f.s [simvol-simvol] sootvetstvuet lyubomu simvolu iz leksikograficheski upo- ryadochennogo diapazona. Primer: - 17 - % ls f.[a-z] f.c f.o f.s Vyvodyatsya vse fajly, rasshirenie imeni kotoryh - lyubaya strochnaya bukva latinskogo alfavita. ~ (nadcherkivanie) registracionnyj katalog, naprimer po komande ls -l ~ budet vyvedeno soderzhimoe kataloga, v kotoryj vy popa- daete pri vhode v sistemu. Takoj katalog prinyato nazy- vat' registracionnym. ~registracionnoe_imya_pol'zovatelya registracionnyj katalog pol'zovatelya. Primer: % ls ~Ivanov budet vyvedeno soderzhimoe registracionnogo kataloga pol'zovatelya s imenem Ivanov. {spisok_simvolov_cherez_zapyatuyu} sootvetstvuet lyubomu iz perechislennyh simvolov. Primer: % ls f.{c,s,o} f.c f.o f.s slovo1{spisok_slov_cherez_zapyatuyu}slovo2 k slovo1 dobavlyaetsya pervoe slovo iz spiska slov i dobavlyaetsya slovo2. Dalee povtoryaetsya dlya vtorogo slova iz spiska slov i tak dalee. Ne dopuskayutsya probely. Slovo1 i/ili slovo2 mogut otsutstvovat'. Primer: % ls aaa{ddd,ccc,bbb}eee aaadddeee ne najden aaaccceee ne najden aaabbbeee ne najden Pri poiske fajlov formirovalis' ih imena kombinaciyami ukazannyh posledovatel'nostej. Soobshchenie ne najden vyvoditsya, kogda takoj fajl komandoj ls ne obnaruzhen. Opisannaya konstrukciya ispol'zuetsya ne tol'ko dlya pods- tanovki imen fajlov, no i dlya generacii razlichnyh slov, nap- rimer: - 18 - % echo Ta{nya,nyu,ne,t'yana,t'yanu,t'yane} Tanya Tanyu Tane Tat'yana Tat'yanu Tat'yane Vozmozhny i bolee slozhnye primeneniya, naprimer: %echo Ta{nya,t'yana,nechka}{' Ivanova',' Petrova'} Tanya Ivanova Tanya Petrova Tat'yana Ivanova Tat'yana Petrova Tanechka Ivanova Tanechka Petrova Pri sozdanii shablona imeni fajla osoboe mesto zanimaet simvol tochka v pervoj pozicii imeni. Esli imya fajla imeet vid .imya, to tochku neobhodimo ukazat' yavno. V ryade sluchaev metasimvoly shablonov imen fajlov i kata- logov ne ekraniruyutsya simvolom \. Neobhodima opredelennaya ostorozhnost' pri ispol'zovanii etih simvolov tam, gde po kontekstu ne sleduet vypolnyat' podstanovki imen fajlov i katalogov. Vyshe bylo skazano, chto esli ukazannomu shablonu ne soot- vetstvuet ni odno imya, to porozhdaetsya sostoyanie oshibki. V nekotoryh sluchayah eto mozhet privesti k nezhelatel'nomu prek- rashcheniyu vypolneniya zadaniya. Sushchestvuet klyuch, svyazannyj s shablonami i imenami fajlov, - nonomatch. Esli on ustanov- len, interpretator csh soobshchaet, chto ukazannomu v komandnoj stroke shablonu ne sootvetstvuet ni odin fajl v kataloge i etot shablon vyvoditsya na standartnyj vyvod. Pust', naprimer, imeyutsya fajly f.1, f.2 i f.3. Vypolnim komandu echo f.[4- 9], poluchim soobshchenie ob oshibke: echo: Net takih imen. Teper' vypolnim komandy set nonomatch; echo f.[4-9] poluchim soobshchenie: f.[4-9]. V pervom sluchae bylo vyvedeno soobshchenie komandy echo ob oshibke. Vo vtorom sluchae byl vyveden shablon f.[4-9], otnositel'no kotorogo ne udalos' podobrat' imya fajla. Principial'noe otlichie vtorogo sluchaya ot pervogo zaklyuchaetsya v tom, chto ne porozhdalos' sostoyanie oshibki - prosto byl vyveden shablon. 1.6. Podstanovki znachenij peremennyh V yazyke C-shell opredeleny sleduyushchie tipy peremennyh: slovo, stroka, massiv slov, pozicionnaya peremennaya. V otlichie ot drugih yazykov programmirovaniya, kogda uka- zanie imeni peremennoj (naprimer, v vyrazhenii) privodit k podstanovke ee znacheniya, v yazyke C-shell trebuetsya yavno - 19 - ukazyvat', kogda sobstvenno neobhodimo ispol'zovat' znachenie peremennoj. Opredelit' peremennuyu i prisvoit' ej znachenie mozhno s pomoshch'yu komandy set ili prisvoiv peremennoj znachenie vyrazheniya (naprimer, @ a = 5). Podstanovka znachenij pere- mennyh vypolnyaetsya posle podstanovki imen komand i fajlov, esli pered imenem peremennoj ukazan bez probela simvol $. Simvoly ?, # ispol'zuyutsya dlya upravleniya rezhimami podstano- vok. Imeyutsya sleduyushchie tipy podstanovok: podstanovka sobstvennogo znacheniya peremennoj; podstanovka sobstvennogo znacheniya pozicionnoj peremen- noj; podstanovka informacii o peremennoj, naprimer oprede- lena ona ili net. Pozicionnye peremennye inicializiruyutsya v komandnoj stroke pri zapuske komandnogo fajla na vypolnenie. Naprimer, comfile aaa bbb ccc ddd kazhdoe slovo etoj komandnoj stroki dostupno vnutri komand- nogo fajla comfile. CHtoby poluchit' znachenie slova, dosta- tochno ukazat' ego nomer v stroke, naprimer vmesto $0 podsta- vitsya comfile, vmesto $3 - ccc. Rassmotrim primery prostyh podstanovok. % set a = 5 % echo a a % echo $a 5 Dejstvie simvola $ mozhno otmenit', ukazav pered nim simvol \. Naprimer: % set a = 5 % echo \$a $a % echo $a 5 V posledovatel'nosti simvolov, vzyatyh v dvojnye kavychki, vsegda dejstvuet simvol $, naprimer: - 20 - % set a = 5 % echo \$a $a % echo "\$a" \5 % set b = "Misha, Valera, $a." % echo $b Misha, Valera, 5. % % set b = "Misha, Valera, \$a." % echo $b Misha, Valera, \5. V posledovatel'nosti simvolov, vzyatyh v odinarnye pra- vye kavychki, dejstvie simvola $ otmenyaetsya, naprimer: % set a = 5 %set b = 'Misha, Valera, $a.' % echo $b Misha, Valera, $a. % % set b = 'Misha, Valera, \$a.' % echo $b Misha, Valera, \$a. V posledovatel'nosti simvolov, vzyatyh v odinarnye levye (obratnye) kavychki, simvol $ privodit k podstanovke peremen- noj. Podstanovka proishodit neposredstvenno pered vypolne- niem komandy, vzyatoj v lev