Linux / Unix stjórnin vænta

Búast er við forrit sem talar við önnur gagnvirkt forrit í samræmi við handrit. Eftir handritið, Búast við veit hvað hægt er að vænta af forriti og hvað rétt svar ætti að vera. Túlkað tungumál veitir greiningar og háttsettum stjórntækjum til að stjórna valmyndinni. Að auki getur notandinn tekið stjórn og samskipti beint eftir því sem óskað er eftir, eftir að fara aftur yfir handritið.

Expectk er blanda af Búast og Tk. Það hegðar sér eins og von og tk. Búast má við einnig beint í C eða C ++ án Tcl.

Nafnið "Búast" kemur frá hugmyndinni um að senda / búast við röð sem er vinsælt af uucp, kermit og öðrum mótaldsstýringu. Hins vegar ólíkt uucp, Búast er almennt til þess að hægt sé að keyra það sem notendastig stjórn með hvaða forriti og verkefni í huga. Búast er við að hægt sé að tala við nokkur forrit á sama tíma.

Hvað búast má við

Til dæmis, hér eru nokkur atriði sem búast er við að stjórn geti gert:

Það eru margvíslegar ástæður fyrir því að skelurinn geti ekki framkvæmt þessar aðgerðir. Allt er mögulegt með væntingum.

Almennt er búist við að gagnlegt sé að keyra hvaða forrit sem krefst samskipta milli forritsins og notandans. Allt sem nauðsynlegt er er að hægt sé að einkennast af samskiptum. Búast má við einnig að gefa aftur stjórn til notandans án þess að stöðva forritið sem stjórnað er. Á sama hátt getur notandinn skilað stjórn á handritinu hvenær sem er.

Notkun

Búast við lestur cmdfile fyrir lista yfir skipanir til að framkvæma. Búast má við óbeint á kerfi sem styðja #! merking með því að merkja handritið sem executable og gera fyrstu línu í handritinu:

#! / usr / local / bin / expect -f

Auðvitað skal slóðin lýsa nákvæmlega hvar búast líf. / usr / local / bin er bara dæmi.

The -c flipann prefaces stjórn til að framkvæma áður en einhver í handritinu. Skipunin ætti að vera vitnað til að koma í veg fyrir að brotið sé upp á skelinni. Þessi valkostur má nota mörgum sinnum. Mörg skipanir má framkvæma með einum -c með því að skilja þau með hálfkúlum. Skipanir eru framkvæmdar í þeirri röð sem þau birtast. Þegar þú notar Expectk er þessi valkostur tilgreindur sem -skipan.

The -d fáninn gerir nokkrar greiningar framleiðsla, sem fyrst og fremst skýrir innri virkni skipanir eins og búast við og samskipti. Þessi fána hefur sömu áhrif og "exp_internal 1" í upphafi væntanlegs handrit, auk útgáfu Búast er prentuð.

The -D fáninn gerir gagnvirka debugger. Heiltala gildi ætti að fylgja. The debugger mun taka stjórn fyrir næsta Tcl málsmeðferð ef gildi er ekki núll eða ef ^ C er ýtt eða brotamerki er högg eða annar viðeigandi deiliskipunarskipun birtist í handritinu. Þegar þú notar Expectk er þessi valkostur tilgreindur sem - Debug.

The -f flagi forsætir skrá þar sem hægt er að lesa skipanir. Fána sjálf er valfrjálst þar sem það er aðeins gagnlegt þegar þú notar #! merking, svo að önnur rök megi afhent á stjórn línunnar. Þegar þú notar Expectk er þetta valið skilgreint sem -fil.

Sjálfgefið er að stjórnskráin sé lesin í minni og keyrð í heild sinni. Það er stundum æskilegt að lesa skrár eina línu í einu. Til að þvinga handahófi skrár til að meðhöndla með þessum hætti, notaðu -b fána. Þegar þú notar Expectk er þessi valkostur tilgreindur sem -buffer.

Ef strengurinn "-" er til staðar sem skráarheiti er staðlað inntak lesið í staðinn. Notaðu "./-" til að lesa úr skrá sem heitir "-".

The -i flaggið veldur því að vekja athygli á því að samskiptareglur séu til staðar í stað þess að lesa þau úr skrá. Hvetja er sagt upp með lokunarskipuninni eða á EOF. The -i fána er gert ráð fyrir ef hvorki stjórnaskrá né -c er notuð. Þegar þú notar Expectk er þessi valkostur tilgreindur sem -virkur.

- má nota til að afmarka lok valkostanna. Þetta er gagnlegt ef þú vilt framselja valmöguleika-eins og rök fyrir handritið þitt án þess að það sé túlkað með því að búast við. Þetta má með góðum árangri vera sett í #! lína til að koma í veg fyrir að fáanlegur túlkun sé búist við. Til dæmis mun eftirfarandi skilja frá upphaflegu rökunum, þar á meðal handritið í breytu argv .

#! / usr / local / bin / expect -

Athugaðu að venjulega getopt (3) og execve (2) samninga verður að fylgjast með þegar þú bætir við rökum við #! lína.

Skráin $ exp_library / expect.rc er sótt sjálfkrafa ef það er til staðar nema N-flakkurinn sé notaður. (Þegar þú notar Expectk er þessi valkostur tilgreindur sem -NORC.) Strax eftir þetta er skráin ~ / .expect.rc uppspretta sjálfkrafa, nema flipinn sé notaður. Ef umhverfisbreytan DOTDIR er skilgreind er hún meðhöndluð sem skrá og .expect.rc er lesin þaðan. Þegar þú notar Expectk er þessi valkostur tilgreindur sem -norc. Þessi uppspretta átti sér stað aðeins eftir að framkvæma hvaða -c fánar.

-v veldur Búast við að prenta útgáfu númerið og hætta. Samsvarandi fáninn í Expectk, sem notar langa fánaheiti, er-útgáfa.

Valfrjálst args eru smíðaðir í lista og geymdar í breytu sem heitir argv og. argc er frumstilla á lengd argv.

Argv0 er skilgreint sem nafn handritsins eða tvöfalt ef ekkert handrit er notað. Til dæmis er eftirfarandi prentað út nafn handritsins og fyrstu þrjá rökin:

send_user "$ argv0 [lrange $ argv 0 2] \ n"

Skipanir

Búast við notkun Tól stjórnmál. Tcl veitir stjórnflæði (ef, fyrir, brot), tjáningarmat og nokkrar aðrar aðgerðir eins og skilgreining á endurtekningaraðferð. Skipanir sem eru notaðir hér en ekki skilgreindir (sett, ef, exec) eru Tcl skipanir. Búast styður viðbótarskipanir. Nema annað sé tekið fram, skila skipunum tóman streng.

Skipanir eru skráð í stafrófsröð þannig að þeir geti fljótt komið fyrir. Hins vegar geta nýir notendur fundið auðveldara með að byrja með því að lesa lýsingar á hrogna, senda, búast við og hafa samskipti, í þeirri röð.

loka [-slave] [-onexec 0 | 1] [-i spawn_id]

lokar tengingu við núverandi ferli . Flestir gagnvirkar forrit munu uppgötva EOF á Stdin og hætta; þannig nærri nægir venjulega að drepa ferlið eins og heilbrigður. The -i flagg lýsir því ferli að loka sem samsvarar heitinu spawn_id.

Bæði búast við og samskipti mun greina hvenær núverandi ferli hættir og óbeint loka, en ef þú drepur ferlið með því að segja, "exec kill $ pid", þá þarft þú að hringja náið .

The -onexec flaggið ákvarðar hvort hrognaheiti sé lokað í nýjum hreinum ferlum eða ef ferlið er yfirhúðað. Til að yfirgefa heitafjölda, notaðu gildi 0. Óheilagt heiltala gildi vekur hrogn lokað í nýjum aðferðum.

The -slave fáninn lokar þrællinn sem tengist hrognaheiti. Þegar tengingin er lokuð er slökkt sjálfkrafa lokað ef það er enn opið.

Sama hvort tengingin sé lokuð óbeint eða skýrt, ættir þú að hringja í bíða til að hreinsa upp samsvarandi kjarnaferli rifa. Loka stjórnin hringir ekki í bíða þar sem engin trygging er fyrir því að lokun á ferli tengingu mun valda því að það loki.

kembiforrit [[-now] 0 | 1]

stjórnar Tcl kembiforrit sem gerir þér kleift að stíga í gegnum yfirlýsingar og setja bilanir.

Með engum rökum er 1 skilað ef kembiforritið er ekki í gangi, annars er 0 skilað.

Með 1 rök er kembiforritið hafin. Með 0 rök er kembiforritið stöðvað. Ef 1 röksemdafærsla er fyrirfram með því að nú-fána, þá er kembiforritið hafin strax. Annars byrjar kembiforritið með næsta Tcl yfirlýsingu.

The debug stjórn breytir ekki einhverjum gildrum. Bera þetta saman við upphaf Búast við -D fánanum.

Aftengingarskipan aftengir gaffalferli frá flugstöðinni . Það heldur áfram að birtast í bakgrunni. Ferlið er gefið eigin ferli hópsins. Standard I / O er vísað til / dev / null .

Eftirfarandi brot notar aftengingu til að halda áfram að keyra handritið í bakgrunni.

ef {[fork]! = 0} hætta að aftengja. . .

Eftirfarandi skriftur lesir lykilorð og keyrir síðan forrit á klukkutíma fresti sem krefst lykilorðs þegar það er keyrt. Handritið veitir lykilorðið þannig að þú þurfir aðeins að slá það inn einu sinni.

send_user "lykilorð? \" expect_user -re "(. *) \ n" fyrir {} 1 {} {ef {[fork]! = 0} {sofa 3600; halda áfram} aftengja heita priv_prog búast við lykilorð: send "$ expect_out 1, strengur) \ r ". . . hætta}

Kostur við að nota aftengingu á skelinni ósamstilltu aðferðafræðinni (&) er sú að búast er við að hægt sé að vista endapunktana áður en þau eru aftengd og síðan sótt þá um nýjan ptys. Með &, Búast ekki við möguleika á að lesa breytur flugstöðvarinnar þar sem flugstöðin er nú þegar ótengdur af þeim tíma sem búist er við fær stjórnina.

hætta [-opts] [staða]

veldur því að búast við að hætta eða á annan hátt undirbúa sig til að gera það.

The -onexit fáninn veldur því að næsta rifrildi sé notaður sem lokunarhönd . Án röksemdafærslu er núverandi brottfararstjórinn skilað.

The -noexit fáninn veldur því að búast við að undirbúa sig til að hætta en hætta að vera í raun að fara aftur í stjórnkerfið. Notandi skilgreindur afgreiðslutæki er keyrt eins og heilbrigður eins og eigin innri meðhöndlar Expect. Engar frekari Búast er við að skipanir skuli framkvæmdir. Þetta er gagnlegt ef þú ert að keyra Búast við öðrum Tcl viðbótum. Núverandi túlkur (og aðal gluggi ef í Tk umhverfi) er þannig að aðrir Tcl viðbætur geti hreinsað. Ef lokun Expect er kallað aftur (þó að þetta gæti komið fram) eru handlers ekki endurreist.

Þegar spennandi ferli er lokað, eru allar tengingar við hrogna ferli lokaðar. Lokun verður fundin sem EOF með hrogna ferlum. brottför tekur engar aðrar aðgerðir út fyrir það sem venjulegt _exit (2) málsmeðferðin gerir. Þannig geta hrognunarferlar sem ekki fylgjast með EOF áfram haldið áfram. (A fjölbreytni af skilyrðum er mikilvægt til að ákvarða, til dæmis, hvaða merki heitið ferli verður sent, en þetta eru kerfis háð, venjulega skjalfest undir brottför (3).) Gegndar aðferðir sem halda áfram að hlaupa verða erfðir af init.

Staða (eða 0 ef ekki tilgreint) er skilað sem lokunarstaða Búast . brottför er óbeint framkvæmt ef endir handritsins eru náð.

exp_continue [-continue_timer]
Stjórnin exp_continue gerir ráð fyrir að halda áfram að framkvæma frekar en að fara aftur eins og það myndi venjulega. Sjálfgefið exp_continue endurstillir tímamælirinn. Flipinn -continue_timer kemur í veg fyrir að klukkan sé endurræst. (Sjáðu ráð fyrir frekari upplýsingar.)

exp_internal [-f file] gildi
veldur frekari skipanir til að senda greiningarupplýsingar innra til að búast við stderr ef gildi er ekki núll. Þessi framleiðsla er óvirk ef gildi er 0. Greiningarniðurstöðurnar innihalda alla stafi sem berast og allar tilraunir gerðar til að passa við núverandi framleiðsla á móti mynstri.

Ef valfrjáls skrá er til staðar, er allt venjulegt og kembiforrit framleiðsla skrifað í þá skrá (óháð gildi virðis ). Einhver fyrri greiningarútgangsskrá er lokuð.

The-info fáni veldur exp_internal að skila lýsingu á nýjustu ekki-upplýsingar rök gefið.

exp_open [args] [-i spawn_id]
skilar Tcl skráarauðkenni sem samsvarar upprunalegu heitafjöldi. Skráarnúmerið má síðan nota eins og það var opnað með því að opna stjórn Tcl. (Ekki ætti að nota sprautunúmerið lengur. Bið ætti ekki að vera framkvæmt.

The -aveaveopen flagrið leyfir hrognarnúmerinu að opna fyrir aðgang í gegnum Búast skipanir. Biðja verður að framkvæma á heitinu.

exp_pid [-i spawn_id]
skilar ferli kennitölunnar sem svarar til núgildandi ferlisins. Ef -i fáninn er notaður svarar pidinn aftur til þess sem gefið er í heimalandinu.

exp_send
er alias til að senda .

exp_send_error
er alias fyrir send_error .

exp_send_log
er alias fyrir send_log .

exp_send_tty
er alias fyrir send_tty .

exp_send_user
er alias fyrir send_user .

exp_version [[-exit] útgáfa]
er gagnlegt til að tryggja að handritið sé í samræmi við núverandi útgáfu af Búast.

Með engum rökum er núverandi útgáfa af Búast skilað. Þessi útgáfa gæti þá verið dulrituð í handritinu þínu. Ef þú veist í raun að þú sért ekki að nota eiginleika nýlegra útgáfa geturðu tilgreint fyrri útgáfu.

Útgáfur samanstanda af þremur tölum aðskilin með punktum. Í fyrsta lagi er aðalnúmerið. Handrit skrifað fyrir útgáfur af Búast með öðru stærsta númeri mun nánast örugglega ekki virka. exp_version skilar villu ef helstu tölurnar passa ekki saman.

Í öðru lagi er minniháttar númerið. Handrit skrifað fyrir útgáfu með minni minni en núverandi útgáfu getur verið háð nýjum eiginleikum og gæti ekki keyrt. exp_version skilar villa ef helstu tölurnar passa saman, en handritið minniháttar númerið er stærra en það sem er í gangi.

Í þriðja lagi er tala sem spilar ekki þátt í útgáfu samanburðarins. Hins vegar er það aukið þegar væntingar hugbúnaðar dreifingar er breytt á nokkurn hátt, svo sem með viðbótarskjölum eða hagræðingu. Það er endurstillt á 0 á hverri nýju minni útgáfu.

Með the -exit flagg, Búðu til prenta villu og hættir ef útgáfa er úrelt.

búast við [[-opts] pat1 body1] ... [-opts] patn [bodyn]
bíður þar til einn af mynstrunum samsvarar framleiðslunni af hrognu ferli, tiltekið tímabil hefur liðið eða endalistinn sést. Ef endanleg líkami er tómur, má sleppa henni.

Mynstur frá nýjustu fyrirmælum áður en stjórn er notuð óbeint fyrir önnur mynstur. Mynstur frá nýjustu expect_after stjórn eru óbeint notuð eftir einhverju öðru mynstri.

Ef rökin að öllu reikningsskýrslunni þurfa meira en eina línu má öll rökin "braced" í einn til að forðast að ljúka hverri línu með bakslagi. Í þessu eina tilfelli mun venjulega Tcl skipti koma fram þrátt fyrir handfangið.

Ef mynstur er leitarorðið, þá er samsvarandi líkami framkvæmt við lok skráar. Ef mynstur er lykilorð tímabilsins , er samsvarandi líkami framkvæmd við tímamörk. Ef ekki er notað tímabundið leitarorð er framkvæmt óbein aðgerð í aðgerð við tímamörk. Sjálfgefið tímaskeiðatímabil er 10 sekúndur en hægt er að stilla, til dæmis í 30, með skipuninni "Setja tímamörk 30". Óendanlegt tímamörk má tilnefna með gildi -1. Ef mynstur er leitarorðið sjálfgefið , er samsvarandi líkami framkvæmdur á annað hvort tímamörk eða lokaskrá.

Ef mynstur passar, þá er samsvarandi líkami framkvæmdur. búast við skilar niðurstöðu líkamans (eða tómt streng ef ekkert mynstur passar við). Ef mörg mynstur passa, er sá sem birtist fyrst notað til að velja líkama.

Í hvert skipti sem ný framleiðsla kemur, er hún borin saman við hvert mynstur í þeirri röð sem þau eru skráð. Þannig getur þú prófað að ekki sé samsvörun með því að gera síðasta myndefnið tryggt að birtast, svo sem hvetja. Í tilvikum þar sem engin hvetja er, verður þú að nota tímamörk (eins og þú myndir ef þú átt samskipti við handvirkt).

Mynstur eru tilgreind á þremur vegu. Sjálfgefin eru mynstur skilgreind eins og með Tcl- strengjasamstæðu stjórn. (Slík mynstur eru einnig svipuð C-skel reglulegum segðum sem venjulega nefnast "glob" mynstur). Hægt er að nota -gl-flipann til að vernda mynstur sem annars gætu samsvarað búast við fánar frá því að gera það. Öll mynstur sem byrja með "-" ætti að vernda með þessum hætti. (Allar strengir sem byrja á "-" eru frátekin fyrir framtíðarvalkosti.)

Til dæmis lítur eftirfarandi brot út fyrir vel innskráningu. (Athugaðu að slökkt er á að hætta sé að vera aðferð sem er skilgreind annars staðar í handritinu.)

búast við {upptekinn (setur upptekinn \ n; exp_continue} mistókst að hætta við "ógilt lykilorð"

Tilvitnanir eru nauðsynlegar á fjórðu mynstri þar sem það inniheldur rými sem annars myndi skilja mynstur frá aðgerðinni. Mynstur með sömu aðgerð (svo sem 3. og 4.) þurfa að skrá aðgerðirnar aftur. Þetta er hægt að forðast með því að nota regexp-stíl mynstur (sjá hér að neðan). Nánari upplýsingar um mynda gervilim mynstur er að finna í Tcl handbókinni.

Regexp-stíl mynstur fylgja setningafræði sem skilgreint er af Tcl's regexp (stutt fyrir "regluleg tjáning") stjórn. regexp mynstur eru kynnt með fánanum -re . Fyrra dæmi er hægt að endurskrifa með regexp sem:

búast við {upptekinn (setur upptekinn \ n; exp_continue} -re "mistókst | ógilt lykilorð" hætta við tímasetningu hætt við tengingu}

Báðir gerðir af mynstri eru "unanchored". Þetta þýðir að mynstur þarf ekki að passa við alla strenginn, en getur byrjað og endað leikinn hvar sem er í strengnum (svo lengi sem allt annað samsvarar). Notaðu ^ til að passa við upphaf streng og $ til að passa við enda. Athugaðu að ef þú bíður ekki eftir lok strengsins getur svarið þitt auðveldlega komið niður í miðju strengsins eins og þau eru echoed frá hrogninni ferli. Þrátt fyrir að framleiða réttar niðurstöður, getur framleiðslan lítið út frá náttúrunni. Þannig er notkun $ $ hvatt ef þú getur nákvæmlega lýst stafunum í lok strengsins.

Athugaðu að í mörgum ritstjórum, ^ og $ samsvara upphaf og lok lína í sömu röð. Hins vegar, vegna þess að búast er við að ekki sé línulegt stilla, samsvarar þessi persónur upphaf og lok gagna (öfugt við línur) sem nú er búist við því að búast við samsvarandi biðminni. (Sjá einnig athugasemdina hér að neðan um "meltingartruflanir".)

The -ex flagi veldur því að mynstrið sé passað sem "nákvæm" strengur. Engin túlkun á *, ^, etc er gerð (þótt venjulega Tcl-samningurinn verður ennþá fram). Nákvæm mynstur eru alltaf unanchored.

The -nocase flaggan veldur hástöfum í framleiðslunni til að bera saman eins og þau voru lágstafir. Mynnið hefur ekki áhrif á.

Þó að lesa framleiðsla, getur meira en 2000 bæti þvingað fyrri bæti til að vera "gleymt". Þetta má breyta með fallinu match_max . (Athugaðu að of stór gildi geta dregið úr samsvörunarmiðlinum.) Ef patlist er full_buffer , er samsvarandi líkami framkvæmdur ef samsvörun_max bæti hefur verið móttekin og engin önnur mynstur hafa passað. Hvort hvort leitarorðið í full_buffer er notað eða ekki, eru gleymtir stafir skrifaðir til að búast við (biðminni).

Ef patlist er leitarorðið null og nul er leyfilegt (með kommandanum remove_nulls ) er samsvarandi líkami framkvæmdur ef ein ASCII 0 er samsvörun. Það er ekki hægt að passa 0 bæti í gegnum glob eða regexp mynstur.

Þegar þú passar við mynstur (eða eof eða full_buffer) er einhver samsvörun og áður ósamþykkt framleiðsla vistuð í breytu expect_out (biðminni) . Allt að 9 regexp gagnasöfn samsvarar eru vistaðar í breytunum expect_out (1, strengur) í gegnum expect_out (9, strengur) . Ef innsláttarmerkið er notað fyrir mynstur, eru upphafs- og lokadísarnir (í formi sem er hentugur fyrir löngum ) 10 strenganna geymd í breytunum expect_out (X, start) og expect_out (X, endi) þar sem X er stafa, samsvarar substring stöðu í biðminni. 0 vísar til strengja sem passa við allt mynsturið og er búið til fyrir glob mynstur og regexp mynstur. Til dæmis, ef ferli hefur framleitt framleiðsla af "abcdefgh \ n", er niðurstaðan af:

búast við "cd"

er eins og eftirfarandi yfirlýsingar höfðu verið framkvæmdar:

settu expect_out (0, streng) CD sett expect_out (biðminni) abcd

og "efgh \ n" er eftir í framleiðslustöðunni. Ef ferli framleiddi framleiðsluna "abbbcabkkkka \ n", afleiðingin af:

búast við -vísum -re "b (b *). * (k +)"

er eins og eftirfarandi yfirlýsingar höfðu verið framkvæmdar:

Setja expect_out (0, byrja) 1 sett expect_out (0, endir) 10 sett expect_out (0, strengur) bbbcabkkkk sett expect_out (1, byrjun) 2 sett expect_out (1, endir) 3 sett expect_out (1, strengur) bb sett expect_out (2, byrjun) 10 sett expect_out (2, endir) 10 sett expect_out (2, strengur) k sett expect_out (biðminni) abbbcabkkkk

og "a \ n" er eftir í framleiðslustöðunni. Mynsturinn "*" (og -re ". *") Mun skola framleiðslubuffið án þess að lesa meira af framleiðslunni úr ferlinu.

Venjulega er samstillt framleiðsla fargað frá innri biðmöguleikum Expect. Þetta er hægt að koma í veg fyrir með því að forskeyta mynstur með non- flagginu. Þessi fána er sérstaklega gagnleg til að gera tilraunir (og er hægt að stytta til "-not" til að auðvelda á meðan að gera tilraunir).

Heitið sem fylgir samsvöruninni (eða eof eða full_buffer) er geymt í expect_out (spawn_id) .

The- timeout- fáninn veldur því að núverandi áætlunin um að búast við að nota eftirfarandi gildi sem tímamörk í stað þess að nota gildi tímabilsbreytunnar.

Sjálfgefin eru mynstur samræmd á móti framleiðsla frá núverandi ferli, þó að-í fána lýsir framleiðsla úr heitinu spawn_id listi á móti öllum eftirfarandi mynstrum (allt að næsta -i ). The spawn_id listinn ætti annaðhvort að vera aðskilin frá lista yfir spawn_ids eða breytu sem vísar til slíka lista yfir spawn_ids.

Til dæmis bíður eftirfarandi dæmi í "tengingu" frá núverandi ferli, eða "upptekinn", "mistókst" eða "ógilt lykilorð" frá spawn_id sem heitir $ proc2.

búast við {-i $ proc2 upptekinn {setur upptekinn \ n; exp_continue} -re "mistókst | ógilt lykilorð" hætta við tímasetningu hætt við tengingu}

Verðmæti hnattrænna breytu any_spawn_id má nota til að passa við mynstur við hvaða spawn_ids sem heitir með öllum öðrum -i fánum í núverandi áætluninni. The spawn_id frá -i fána án tengdrar mynsturs (þ.e. strax eftir annað -i ) er aðgengilegt öllum öðrum mynstri í sömu væntanlegu skipuninni í tengslum við any_spawn_id.

The -i fána getur einnig nefnt alþjóðlegt breytu, þar sem breytu er lesið fyrir lista yfir hrogna ids. Breytu er endurreist þegar það breytist. Þetta veitir leið til að breyta I / O uppsprettunni meðan stjórnin er í framkvæmd. Krydd ids að því gefnu að þessi leið sé kallað "óbein" hrogn.

Aðgerðir eins og brot og halda áfram að valda því að stjórnunaraðgerðir (þ.e. fyrir , proc ) að haga sér á venjulegan hátt. Stjórnin exp_continue gerir ráð fyrir að halda áfram að framkvæma frekar en að fara aftur eins og það myndi venjulega.

Þetta er gagnlegt til að forðast skekkta lykkjur eða endurteknar væntingar. Eftirfarandi dæmi er hluti af brot til að gera sjálfvirkan rlogin. The exp_continue forðast að þurfa að skrifa annað ráð fyrir yfirlýsingu (að leita að hvetja aftur) ef rlogin biður um lykilorð.

búast við {Lykilorð: {stty -echo send_user "lykilorð (fyrir $ notanda) á $ hýsingu:" expect_user -re "(. *) \ n" send_user "\ n" senda "$ expect_out (1 strengur) echo exp_continue} rangt {send_user \ "tenging við gestgjafi mistókst: $ expect_out (biðminni)" hætta "- hætta við { re $ hvetja}

Til dæmis gæti eftirfarandi brot hjálpað notendahandbók um samskipti sem eru nú þegar algerlega sjálfvirk. Í þessu tilfelli er flugstöðin sett í hráham. Ef notandi ýtir á "+" bætist breytur. Ef ýtt er á "p" eru nokkrar ávöxtanir sendar til aðferðarinnar, kannski til að pota það á einhvern hátt og "ég" leyfir notandanum að hafa samskipti við ferlinu og stela í raun stjórn úr handritinu. Í hverju tilfelli leyfir exp_continue að núverandi búist við að halda áfram samstillingu mynstur eftir að aðgerðin er framkvæmd.

stty raw -echo expect_after {-i $ user_spawn_id "p" {send "\ r \ r"; exp_continue} "+" {incr foo; exp_continue} "ég" {interact; exp_continue} "hætta" hætta}

Sjálfgefin birtist exp_continue sjálfvirkt tímamælir. Tímamælirinn er ekki endurræstur ef exp_continue er kallaður með -continue_timer flagganum .

expect_after [expect_args]
virkar eins og búist er við nema að ef mynstur frá bæði búast og búast við eftir að passa er búist við því að búast er við mynstur. Sjá fyrirspurnina fyrir fyrirfram frekari upplýsingar.

expect_background [expect_args]
tekur sömu rök og búist er við , en það skilar strax. Mynstur eru prófuð hvenær sem nýtt inntak kemur. Myndeiningin og sjálfgefið eru tilgangslausir að búast við og eru þögul. Annars notar expect_background stjórnin expect_before og expect_after mynstur eins og búast er við.

Þegar búið er að meta fyrirhugaðan aðgerð er bakgrunnsvinnsla fyrir sama hrognaheiti læst. Bakgrunnsbreyting er opið þegar aðgerðin lýkur. Meðan bakgrunnsvinnsla er læst er hægt að gera (forgrunni) búast við sömu heitinu.

Ekki er unnt að gera ráð fyrir því að búastvið því að búastvið því að búið sé að bíða eftir . expect_background fyrir tiltekið hrognarnúmer er eytt með því að lýsa yfir nýjum búningsdegi með sama hrognaheiti. Lýsa expect_background án þess að mynstrið fjarlægi tiltekið heitafjöldi frá getu til að passa við mynstur í bakgrunni.

expect_before [expect_args]
tekur sömu rök og búist er við , en það skilar strax. Mynstur-aðgerð pör frá nýjustu expect_before með sama hrogna auðkenni eru óbeint bætt við einhverjum eftirfarandi búast við skipanir. Ef mynstur passar, er það meðhöndlað eins og það hafi verið tilgreint í áætluninni sem er búist við , og tengd líkami er framkvæmdur í tengslum við áætlunina sem búastvið . Ef mynstur frá bæði fyrirhugaðri og búast er við að það passi saman, er búið að nota fyrirfram mynstur.

Ef ekkert mynstur er tilgreint er hrognaheiti ekki merkt fyrir hvaða mynstur sem er.

Ef ekki er mælt með því að -i fáni, þá er búist við því að mynstur samræmist hrognartilfinningunni sem skilgreindur var á þeim tíma sem fyrirhugað var að fyrirskipunin var framkvæmd (ekki þegar mynstur hennar er passað).

The-info fáni veldur því að búið sé að skila núverandi upplýsingum um hvaða mynstur það muni passa við. Sjálfgefið skýrir það um núverandi heitið. Heimilt er að gefa upp valfrjálsan heitafyrirtækisupplýsingar til að fá upplýsingar um þetta heitið. Til dæmis

expect_before -info -i $ proc

Að mestu er hægt að gefa upp einn hrognartilgáfu. The flagg-indirect bætir bein hrogn sem koma aðeins frá óbeinum upplýsingum.

Í stað þess að tilgreina hrognaheiti, mun fáninn "-all" valda "-info" til að tilkynna um öll hrogn.

Hægt er að endurnýja framleiðsluna af-info fánanum sem rök til að búast við áður.

expect_tty [expect_args]
er eins og búist er við en það lesir stafi frá / dev / tty (þ.e. ásláttur frá notandanum). Sjálfgefið er að lesa ferli í eldavél. Þannig verða línur að ljúka með skilningi til þess að búast við að sjá þær. Þetta má breyta með stty (sjá stty stjórnin hér að neðan).

expect_user [expect_args]
er eins og búist er við en það lesir stafi frá stdin (þ.e. mínútum frá notandanum). Sjálfgefið er að lesa ferli í eldavél. Þannig verða línur að ljúka með skilningi til þess að búast við að sjá þær. Þetta má breyta með stty (sjá stty stjórnin hér að neðan).

gaffal
skapar nýtt ferli . Hin nýja aðferð er nákvæm afrit af núverandi væntingarferli . Á árangri skilar gafflinum 0 til nýju (barns) ferlisins og skilar ferilskrá barnsferilsins við foreldraferlið. Við bilun (ávallt vegna skorts á auðlindum, td skiptiplássi, minni) skilar gaffli -1 til foreldraferlisins og engin barnapróf er búin til.

Forked ferli hætta með hætta stjórn, rétt eins og upphaflega ferlið . Forked ferli er heimilt að skrifa til log skrár. Ef þú deaktiverir ekki kembiforrit eða skrá þig inn í flestar ferli getur niðurstaðan verið ruglingslegt.

Sumir pty framkvæmdir geta verið rugla saman við marga lesendur og rithöfunda, jafnvel augnablik. Þannig er öruggast að gaffla fyrir hrygningarferli.

samskipti [string1 body1] ... [strengn [bodyn]]
veitir notandanum stjórn á núverandi ferli , þannig að ásláttur sé sendur í núverandi ferli og stðdráttur og staðsetning núverandi ferli er skilað.

Strings-líkami pör má tilgreina sem rök, í því tilfelli líkaminn er framkvæmd þegar samsvarandi strengur er sleginn inn. (Sjálfgefin er strengurinn ekki sendur í núverandi ferli .) Túlkunarskipunin er gert ráð fyrir ef endanleg líkami vantar.

Ef rökin fyrir alla samskiptayfirlitið krefjast fleiri en eina línu má öll rökin "braced" í einn þannig að forðast að ljúka hverri línu með bakslagi. Í þessu eina tilfelli mun venjulega Tcl skipti koma fram þrátt fyrir handfangið.

Til dæmis, eftirfarandi skipanir rekja samskipti við eftirfarandi streng-líkami pör skilgreind: Þegar ^ Z er ýtt, Búast er frestað. (The- reset flagginn endurheimtir flugstöðvarstillingar.) Þegar ^ A er ýtt á, sér notandinn "þú skrifaðir stjórn-A" og ferlið er sent a ^ A. Þegar $ er ýtt á, sér notandinn daginn. Þegar ^ C er ýtt á, Búðu til útgang. Ef "foo" er slegið inn þá sér notandinn "bar". Þegar ~ ~ er ýtt, keyrir væntanlega túlkurinn gagnvirkt.

settu CTRLZ \ 032 í samskiptum {-reset $ CTRLZ {exec kill -STOP [pid]} \ 001 {send_user "þú skrifaðir stjórn-A \ n"; sendu "\ 001"} $ {send_user "Dagsetningin er [klukkuformi [klukku sekúndur]]."} \ 003 hætta foo {send_user "bar"} ~~}

Í strenglíkapörum eru strengir samsvöruð í þeirri röð sem þau eru skráð sem rök. Strings sem passa að hluta til eru ekki sendar í núverandi ferli í því skyni að halda áfram. Ef stafir eru slegnar inn þannig að það geti ekki lengur verið samsvörun verður aðeins hluti strengsins send til þess ferlis sem ekki er hægt að hefja annan samsvörun. Þannig geta strengir sem eru substrings af hluta samsvörun passa síðar, ef upprunalegu strengarnir sem voru að reyna að passa að lokum mistekist.

Sjálfgefið er að samsvörun með strengi sé nákvæm með engum villtum kortum . (Hins vegar gerir ráð fyrir að stjórnin notar glob-stíl mynstur sjálfgefið.) -ex- flaggið má nota til að vernda mynstrið sem gæti annars passað samspili fánar frá því að gera það. Öll mynstur sem byrja með "-" ætti að vernda með þessum hætti. (Allar strengir sem byrja á "-" eru frátekin fyrir framtíðarvalkosti.)

The -re flaggið þvingar strenginn sem á að túlka sem regexp-stíl mynstur. Í þessu tilfelli eru samsvarandi undirstrengir geymdar í breytu sambandi en á sama hátt og búast er við að birgðir framleiðslunnar í breytu expect_out . The- Indices fána er á sama hátt stutt.

Myndefnið kynnir aðgerð sem er framkvæmd á lokasafni . Sérstakt eof mynstur getur einnig fylgst með -útgangsflagi en þá er það samsvörun ef eof er skynjað á meðan að skrifa framleiðsla. Sjálfgefna eof aðgerðin er "aftur", þannig að samskipti einfaldlega skilar á hvaða EOF.

Myndeiningin gefur til kynna tímamörk (í sekúndum) og aðgerð sem er framkvæmd eftir að engin stafi hefur verið lesin fyrir tiltekinn tíma. Tímamörkin eiga við um nýlega tilgreint ferli . Það er engin sjálfgefið tími. Sérstaka breytu "tími" (notað af áætluninni sem búast er við ) hefur engin áhrif á þetta tímamörk.

Til dæmis gæti eftirfarandi yfirlýsingu verið notuð til að sjálfkrafa notendur sem hafa ekki skrifað neitt í klukkutíma en sem enn fá tíð kerfi skilaboð:

samskipti-inntak $ user_spawn_id timeout 3600 afturútgáfa \ $ spawn_id

Ef mynsturið er leitarorðið núll og nul er leyfilegt (með kommandanum remove_nulls ) er samsvarandi líkami framkvæmdur ef ein ASCII 0 er samsvörun. Það er ekki hægt að passa 0 bæti í gegnum glob eða regexp mynstur.

Prefacing mynstur með fánanum- vísbendingin veldur því að breyta breytu interact_out (spawn_id) til spawn_id sem passaði við mynstur (eða eof).

Aðgerðir eins og brot og halda áfram að valda því að stjórnunaraðgerðir (þ.e. fyrir , proc ) að haga sér á venjulegan hátt. Hins vegar koma aftur orsakir í samskiptum til að fara aftur til þess sem hringir, en inter_return veldur samskiptum til að valda skilningi á hringiranum . Til dæmis, ef "proc foo" kallast samskipti sem þá framkvæmdi aðgerðina inter_return , myndi proc foo koma aftur. (Þetta þýðir að ef samskipti símtali túlka samskipti að slá aftur mun valda því að samskipti halda áfram, en inter_return mun valda því að samskipti komi aftur til þess sem hringir.)

Í samskiptum er hráhamur notaður þannig að allir stafir megi fara fram í núverandi ferli . Ef núverandi ferli fær ekki vinnuskilaboð, mun það stöðva ef stöðvun er send (sjálfgefið ^ Z). Til að endurræsa hana skaltu senda áframhaldandi merki (eins og "kill -ONT"). Ef þú vilt virkilega senda SIGSTOP til slíks ferli (með ^ Z) skaltu íhuga að hrygna csh fyrst og þá keyra forritið þitt. Á hinn bóginn, ef þú vilt senda SIGSTOP til að búast við sjálfu, talsímtali (kannski með því að nota flýja staf) og ýttu síðan á ^ Z.

String-líkami pör geta vera notaður sem skothylki til að forðast að þurfa að slá inn túlkuna og framkvæma skipanir gagnvirkt. Fyrsti endalistinn er notaður á meðan líkami strengjalaga er framkvæmd.

Fyrir hraða, fara aðgerðir í hráham sjálfgefið. The- reset flagi endurstillir flugstöðina í stillingu sem það hafði áður en samskipti voru framkvæmdar (ávallt eldaður háttur). Athugaðu að stafi sem eru slegin inn þegar kveikt er á hamnum getur glatast (óheppileg einkenni flugstöðvarinnar á sumum kerfum). Eina ástæðan fyrir notkun- reset er ef aðgerð þín fer eftir því að keyra í eldavél.

The -chocho flagi sendir stafi sem passa við eftirfarandi mynstur aftur í ferlinu sem myndaði þau þar sem hver stafur er lesinn. Þetta kann að vera gagnlegt þegar notandinn þarf að sjá athugasemdir úr hlutarituðu mynstrunum.

Ef mynstur er rakið en að lokum tekst ekki að passa eru persónurnar sendar til hrognunarferlisins. Ef hrokkið ferli rak þá þá mun notandinn sjá tvo stafina tvisvar. -Echo er líklega aðeins viðeigandi í aðstæðum þar sem notandi er ólíklegt að ekki ljúka mynstri. Til dæmis er eftirfarandi útdráttur frá rftp, recursive-ftp handritinu, þar sem notandinn er beðinn um að slá inn ~ g, ~ p, eða ~ l, til að fá, setja eða lista núverandi skrá endurtekið. Þetta eru svo langt í burtu frá venjulegum ftp skipunum, að notandinn er ólíklegt að slá ~ eftir nokkuð annað, nema rangt, en þá munu líklega bara hunsa niðurstaðan engu að síður.

samskipti {-echo ~ g {getcurdirectory 1} -echo ~ l {getcurdirectory 0} -echo ~ p {putcurdirectory}}

The -nobuffer flagrið sendir stafi sem passa við eftirfarandi mynstur á framleiðsluferlið sem stafir eru lesnar.

Þetta er gagnlegt þegar þú vilt láta forrit echo aftur mynstur. Til dæmis gæti eftirfarandi verið notað til að fylgjast með hvar maður er að hringja (Hayes-stíl mótald). Í hvert skipti sem "atd" er séð, skrifar handritið afganginn af línunni.

proc lognumber {} {samskipti -nobuffer -re "(. *) \ r" aftur setur $ log "[klukka snið [klukku sekúndur]]: hringt $ interact_out (1 strengur)"} samskipti -nobuffer "atd"

Í samskiptum er ekki notað fyrri notkun log_user . Sérstaklega mun samskipti þvinga framleiðsluna til að vera skráð (send til staðlaðrar framleiðsla) þar sem talið er að notandinn óski ekki að hafa samskipti blindlega.

The -o flagga veldur einhverjum eftirfarandi lykil-líkama pör að vera beitt til framleiðsla núverandi ferli . Þetta getur verið gagnlegt, til dæmis þegar um er að ræða vélar sem senda óæskilega stafi meðan á símkerfi stendur.

Sjálfgefið er að samskipti geri ráð fyrir að notandinn sé að skrifa stdin og lesa stdout af væntingarferlinu sjálfu. The -u flaggið (fyrir "notandi") gerir samskipti að leita að notandanum sem ferlið sem heitir með því að rifja upp (sem verður að vera heitið kennitölu).

Þetta leyfir tveimur ótengdum aðferðum að sameinast án þess að nota skýrt lykkju. Til að aðstoða við kembiforrit, geturðu búist við greiningum ávallt að fara í stderr (eða stdout fyrir ákveðnar upplýsingar um skógarhögg og kembiforrit). Af sömu ástæðu mun túlkur stjórnin lesa gagnvirkt frá stdin.

Til dæmis myndar eftirfarandi brot innskráningu. Þá hringir það notandanum (ekki sýnt) og tengist loksins tvo saman. Auðvitað er hægt að skipta um öll ferli fyrir innskráningu. Skel, til dæmis, myndi leyfa notandanum að vinna án þess að afhenda reikning og lykilorð.

hrogna innskráningu sett inn innskráningu $ spawn_id spawn þjórfé mótald # hringja til baka til notanda # tengja notanda til að skrá þig inn í samskipti -u $ innskráningar

Til að senda framleiðsla í margar ferðir skaltu lista hverja heitafyrirtækjalistann sem er prefaced með -útgangsmerki . Inntak fyrir hóp framleiðslugerða getur verið ákvarðað með heitafjölalista sem er fyrirfram með því að nota inntaksflag . (Bæði inntak og útflutningur getur tekið upp lista á sama formi og -i fána í áætluninni, nema að einhver_spawn_id sé ekki þýðingarmikill í samskiptum .) Allar eftirfarandi fánar og strengir (eða mynstur) eiga við um þetta inntak til annars - Inngangur fást. Ef ekkert- inntak birtist, -útgáfa felur í sér "-inngang $ user_spawn_id -útgang". (Á sama hátt, með mynstrum sem ekki hafa- inntak .) Ef einn- inntak er tilgreint er það umfram $ user_spawn_id. Ef annað inntak er tilgreint fellur það yfir $ spawn_id. Viðbótarupplýsingar- innsláttur fánar kunna að vera tilgreindar.

Aðeins tvö innleiddar innsláttarferli er sjálfgefið að framleiðsla þeirra sé tilgreind sem $ spawn_id og $ user_spawn_id (í öfugri). Ef innsláttarmerki birtist með fánaútgáfu , eru stafi úr því ferli fargað.

The -i flaggið kemur í stað skipta um núverandi spawn_id þegar enginn annar- inntak eða -útgangur fánar eru notaðar. A -i fána felur í sér -o flagg.

Það er hægt að breyta þeim ferlum sem eru samskipti við með því að nota óbein hrogn. (Óbein hrogn eru lýst í kaflanum um áætlunina sem búast er við.) Óbein hrogn ids má tilgreina með -i, -u, -inntaki eða -útgáfu fánar.

túlkur [args]
veldur því að notandinn verði beinlínis beðinn um væntingar og Tcl skipanir. Niðurstaðan af hverri skipun er prentuð.

Aðgerðir eins og brot og halda áfram að valda því að stjórnunaraðgerðir (þ.e. fyrir , proc ) að haga sér á venjulegan hátt. Hins vegar veldur túlkur að koma aftur til þess sem hringir, en inter_return veldur því að túlkur valdi skil á símanum . Til dæmis, ef "proc foo" kallaði túlkur sem þá framkvæmdi aðgerðina inter_return , myndi proc foo koma aftur. Öll önnur stjórn veldur því að túlkur haldi áfram að biðja um nýjar skipanir.

Sjálfgefið inniheldur hvetja tvo heiltölur. Fyrsta heiltalan lýsir dýpt matstöflunnar (þ.e. hversu oft Tcl_Eval hefur verið kallað). Annað heiltala er Tcl sögu auðkenni. Leiðbeiningin er hægt að stilla með því að skilgreina aðferð sem kallast "prompt1", þar sem afturvirði verður næsta hvetja. Ef yfirlýsing hefur opið vitna, parens, braces eða sviga, annarri hvetja (sjálfgefið "+>") er gefin út á newline. Efri hvetja má setja með því að skilgreina aðferð sem kallast "prompt2".

Meðan túlkur er notaður er notaður eldavél, jafnvel þó að hringirinn hans hafi notað hráham.

Ef stdin er lokað verður túlkurinn aftur án þess að nota af fánanum, en þá er síðari rifrildi beitt.

log_file [args] [[-a] file]
Ef skráarnúmer er veitt, mun log_file skrá afrit af fundinum (byrjun á þeim tímapunkti) í skránni. log_file mun hætta upptöku ef ekkert rök er gefið. Allir fyrri skrár eru lokaðar.

Í staðinn fyrir skráarheiti getur verið að finna Tcl skráarauðkenni með því að nota -opna eða -leaveopen fánar. Þetta er svipað og hrogna stjórn. (Sjáðu hrogn til að fá meiri upplýsingar.)

The- a fána sveitir framleiðsla til að vera skráður sem var bæla af log_user stjórn.

Sjálfgefið er að log_file stjórnin bætir við gömlum skrám frekar en að stytta þau, til að auðvelda að slökkva á og mörgum sinnum á einum tíma. Til að styttu skrár skaltu nota flipann .

The-info fáni veldur log_file til að skila lýsingu á nýjustu upplýsingar um ekki upplýsingar sem gefnar eru upp.

log_user-info | 0 | 1
Sjálfgefið er að senda / búast við umræðu er skráð í stdout (og logfile ef það er opið). Logging to stdout er óvirkt með skipuninni "log_user 0" og reenabled með "log_user 1". Logging á logfile er óbreytt.

The-info fáni veldur log_user til að skila lýsingu á nýjustu upplýsingar um ekki upplýsingar sem gefnar eru upp.

match_max [-d] [-i spawn_id] [stærð]
skilgreinir stærð biðminni (í bæti) notaður innbyrðis með því að búast við . Engin stærðargreining , núverandi stærð er skilað.

Með -d flipanum er sjálfgefið stærð sett. (Upphaflegt sjálfgefið er 2000.) Með -i fánanum er stærðin stillt fyrir heitið heitið, annars er það stillt fyrir núverandi ferli .

yfirborð [- # spawn_id] [- # spawn_id] [...] program [args]
framkvæmir "program args" í stað núverandi áætlunarinnar, sem lýkur. Hreint vísbendingargrein brýtur bandstrik fyrir framan skipunarnúmerið eins og það væri innskráningarskel. Allir spawn_ids eru lokaðir nema þeim sem nefnast sem rök. Þetta eru kortlagðir á hinar skráðar auðkenni.

Spawn_ids eru kortlagðir til skráarauðkenna fyrir nýja forritið til að erfa. Til dæmis, keyrir eftirfarandi lína skák og leyfir henni að vera stjórnað af núverandi ferli - segðu skákmeistara.

yfirborð -0 $ spawn_id -1 $ spawn_id -2 $ spawn_id skák

Þetta er skilvirkari en "samskipti -u", en það fórnar getu til að gera forritaða samskipti þar sem búist er við að ekki sé lengur hægt að stjórna.

Athugaðu að ekki er hægt að stjórna flugstöðinni. Þannig að ef þú aftengir eða endurheimtir stöðluð inntak, munu forrit sem gera vinnustýringu (skeljar, innskráningar osfrv.) Ekki virka rétt.

samkvæmni [-d] [-í spawn_id] [gildi]
skilgreinir hvort jafngildi ætti að vera haldið eða fjarlægt úr framleiðslunni af hrognum ferlum. Ef gildi er núll er parity brotið, annars er það ekki fjarlægt. Engin gildiargildi, núverandi gildi er skilað.

Með -d-flipanum er sjálfgefið parity gildi sett. (Upphaflegt sjálfgefið er 1, þ.e. ekki er svipað parity.) Með -i-fáninum er parity-gildi sett fyrir heitið heitið, annars er það stillt fyrir núverandi ferli .

remove_nulls [-d] [-i spawn_id] [value]
skilgreinir hvort niðurgreiðslur eru geymdir eða fjarlægðir úr framleiðslunni af hrognum ferlum áður en mynstur passar eða geymir í breytu expect_out eða interact_out . Ef gildi er 1, eru núllar fjarlægðar. Ef gildi er 0, eru nullar ekki fjarlægðar. Engin gildiargildi, núverandi gildi er skilað.

Með--flagginu er sjálfgefið gildi sett. (Upphafleg sjálfgefið er 1, þ.e. null eru fjarlægð.) Með -i-fáninum er gildi sett fyrir heitið heitið, annars er það stillt fyrir núverandi ferli .

Hvort sem ekki er eytt eða ekki er fjarlægt, mun búast við að taka upp null bytes í log og stdout.

sendu [-flags] streng
Sendir streng í núverandi ferli . Til dæmis, stjórn

senda "halló heimur"

sendir stafina, helloworld við núverandi ferli . (Tcl inniheldur printf- svipað skipun (kallast snið ) sem getur byggt upp geðþótta flóknar strengi.)

Stafir eru sendar strax, þótt forrit með línubirtu inntaki ekki lesi stafina fyrr en skilað er aftur. A afturákn er táknað "\ r".

The - flaggan veldur næsta rök að túlka sem strengur fremur en fána. Allir strengir geta verið á undan "-" hvort það lítur út eins og fáni eða ekki. Þetta veitir traustan búnað til að tilgreina breytileg streng nema án þess að vera sleppt af þeim sem óvart líta út eins og fánar. (Allar strengir sem byrja á "-" eru frátekin fyrir framtíðarvalkosti.)

The -i flaggið lýsir yfir að strengurinn sé sendur til heitið spawn_id. Ef spawn_id er user_spawn_id , og stöðin er í hráhamur , eru nýjar línur í strengnum þýddar til að koma aftur-newline röð þannig að þau virðast eins og flugstöðin væri í eldavél. The- raw flagi slökkva á þessari þýðingu.

The -ull flagg sendir null stafi (0 bæti). Sjálfgefin er eitt null sent. Heiltölu getur fylgst með -snúið til að gefa til kynna hversu mörg núll sem á að senda.

The- break fáninn býr til brot ástand. Þetta gefur aðeins til kynna ef hrognamiðið vísar til tty tæki sem opnað er með "spawn -open". Ef þú hefur hýst ferli eins og þjórfé, ættirðu að nota venju ráðsins til að búa til hlé.

The- flaggshöfðingarnir framleiða til að senda "hægt", þannig að forðast algengar aðstæður þar sem tölva útskýrir inntakstjafa sem var hannað fyrir mann sem myndi aldrei útgefna sömu biðminni . Þessi framleiðsla er stjórnað af gildi breytu "send_slow" sem tekur tvo eininga lista. Fyrsti þáttur er heil tala sem lýsir fjölda bæti til að senda atómlega. Seinni þátturinn er raunverulegur tala sem lýsir fjölda sekúndna sem kjarnorkusendingin verður að skilja. Til dæmis, "sett send_slow {10 .001}" myndi þvinga "senda -s" til að senda strengi með 1 millisekúndum á milli hverjum 10 stöfum send.

The -h fánaskipta framleiðsla til að senda (nokkuð) eins og maður skrifar í raun. Mannleg eins og tafir birtast milli stafanna. (Reikniritið byggist á Weibull dreifingu, með breytingum sem henta þessu tilteknu forriti.) Þessi framleiðsla er stjórnað af gildi breytu "send_human" sem tekur fimm þáttalistann. Fyrstu tveir þættirnir eru meðaltal langvarandi tíma stafir í sekúndum. Fyrsta er notað sjálfgefið. Annað er notað við orðslok, til að líkja eftir lúmskur hléum sem stundum koma fram við slíkar umbreytingar. Þriðja breytu er mælikvarði á breytileika þar sem .1 er nokkuð breytilegt, 1 er nokkuð breytilegt og 10 er alveg óvaranlegt. Öfurnar eru 0 til óendanleika. Síðustu tveir breytur eru hver um sig, lágmarks- og hámarkstímabil. Lágmark og hámark eru notuð síðast og "bút" lokadag. Endanlegt meðaltal getur verið nokkuð frávik frá gefnu meðaltali ef lágmarks og hámarks búnaður nægilegt gildi.

Sem dæmi er eftirfarandi stjórn emulates hratt og stöðugt ritari:

sett send_human {.1 .3 1 .05 2} send -h "Ég er svangur. Við skulum gera hádegismat."

meðan eftirfarandi gæti verið hentugra eftir timburmenn:

setja send_human {.4 .4 .2 .5 100} sendu -h "Goodd Party Lash Night!"

Athugaðu að villur eru ekki hermir, þótt þú getir sett upp villuleiðréttingaraðstæður sjálfur með því að fella inn mistök og leiðréttingar í sendri rök.

Fánarnar til að senda null stafi, til að senda hlé, til að þvinga hægur framleiðsla og til framleiðsla í mannlegri stíl eru að öðru leyti einkaréttar. Aðeins sá sem tilgreindur er síðastur verður notaður. Ennfremur er ekki hægt að tilgreina neinar strengargrindir með fánar til að senda null stafi eða hlé.

Það er góð hugmynd að koma í veg fyrir fyrsta sendingu í ferli með því að búast við . búast við að bíða eftir að ferlið hefjist, en sendið getur ekki. Sérstaklega, ef fyrsta sendið lýkur áður en ferlið byrjar að birtast, þá er hætta á að gögnin séu hunsuð. Í aðstæðum þar sem gagnvirkar áætlanir bjóða ekki upp á fyrstu hvetja getur þú áður sent með töf eins og í:

# Til að forðast að gefa tölvusnápur vísbendingar um hvernig á að brjótast inn, # þetta kerfi biður ekki um utanaðkomandi lykilorð. # Bíddu í 5 sekúndur fyrir exec að ljúka hrogna telnet very.secure.gov sofa 5 sendu lykilorð \ r

exp_send er alias fyrir sendingu. Ef þú notar Expectk eða annan afbrigði af væntingum í Tk umhverfi, er sendur skilgreindur af Tk fyrir algjörlega mismunandi tilgangi. exp_send er kveðið á um eindrægni milli umhverfa. Svipaðar samheiti eru veittar fyrir aðrar væntingar annarra sendiboða.

send_error [-flags] strengur
er eins og að senda , nema að framleiðsla sé send til stderr fremur en núverandi ferli .

send_log [-] strengur
er eins og að senda , nema að strengurinn sé aðeins sendur til notkunarskráarinnar (sjá log_file .) Rökin eru hunsuð ef engin logg skrá er opin.

send_tty [-flags] strengur
er eins og að senda , nema að framleiðsla sé send til / dev / tty frekar en núverandi ferli .

send_user [-flags] strengur
er eins og að senda , nema að framleiðsla sé send til stdout frekar en núverandi ferli .

svefn sekúndur
veldur því að handritið sé að sofa í tiltekinn fjölda sekúndna. Sekúndur geta verið tugabrot. Afbrot (og Tk viðburðir ef þú notar Expectk) eru unnin meðan búist er við Bústað.

hrogna [args] program [args]
býr til nýtt ferli sem keyrir "program args". Stdin hennar, stdout og stderr eru tengdir Búast, svo að þau verði lesin og skrifuð af öðrum væntingum . Tengingin er brotin með loka eða ef ferlið sjálft lokar einhverju skráarnúmerunum.

Þegar ferli hefst með því að hrogna , er breytu spawn_id stillt á lýsingu sem vísar til þess ferlis . Ferlið sem lýst er af spawn_id er talið "núverandi ferli ". spawn_id má lesa eða skrifa, í raun að veita starfsstjórn.

user_spawn_id er alþjóðlegt breytu sem inniheldur lýsingu sem vísar til notandans. Til dæmis, þegar spawn_id er stillt á þetta gildi, búast þú við eins og expect_user .

.Ég villa_spawn_id er alþjóðlegt breytu sem inniheldur lýsingu sem vísar til staðalfallsins . Til dæmis, þegar spawn_id er stillt á þetta gildi, sendist hegðun eins og send_error .

tty_spawn_id er alþjóðlegt breytu sem inniheldur lýsingu sem vísar til / dev / tty. Ef / dev / tty er ekki til (td í cron, at, eða hópur handrit) þá er tty_spawn_id ekki skilgreint. Þetta má prófa sem:

ef {[info vars tty_spawn_id]} {# / dev / tty er til staðar} annars {# / dev / tty er ekki til # sennilega í cron, hópur eða í handriti}

hrogn skilar UNIX ferli kennitölu. Ef ekkert ferli er hóstað er 0 skilað. Breyturinn spawn_out (þræll, nafn) er stillt á nafnið á PTY slave tæki.

Sjálfgefið er að hrogn rísa skipunina og rökin. The- Noecho fána hættir að hrósa frá því að gera þetta.

The -console fána veldur hugga framleiðsla til að beina til hrogn aðferð . Þetta er ekki stutt á öllum kerfum.

Innri, hrogn notar pty, frumstillt á sama hátt og tty notandans. Þetta er frekar frumstillt þannig að allar stillingar séu "sane" (samkvæmt stty (1)). Ef breyturinn stty_init er skilgreindur er hann túlkaður í stíl stty arguments sem frekari stillingar. Til dæmis, "setja stty_init raw" mun leiða til þess að skautanna sem eru í viðbót hófst að hefja í hráham. -nottycopy sleppir upphafsstöðunni miðað við tty notandans. -nottyinit sleppir "sane" frumstillingunni.

Venjulega tekur hrognin smá tíma til að framkvæma. Ef þú tekur eftir að hrogna tekur umtalsvert magn af tíma, er það líklega fundur ptys sem eru wedged. Nokkrar prófanir eru keyrðar á ptys til að forðast entanglements með errant ferlum. (Þetta tekur 10 sekúndur á hverja pútu.) Running Búast við -d valkosturinn mun sýna hvort búast er við mörgum ptys í undarlegum ríkjum. Ef þú getur ekki drepið þau ferli sem þessi ptys eru tengd við gætir þú aðeins endurræsið.

Ef forritið er ekki ræktað með góðum árangri vegna þess að exec (2) mistekst (td þegar forritið er ekki til) verður villa skilaboð skilað með næsta samskiptum eða búast við stjórn eins og forrit hafi keyrt og framleitt villuskilaboðin sem framleiðsla. Þessi hegðun er náttúruleg afleiðing af framkvæmd hrogna . Innanhúss, hrognar gafflar, eftir sem hrognunarferlið hefur enga leið til að hafa samskipti við upphaflega væntingarferlið nema með samskiptum í gegnum spawn_id.

The-flaggið veldur því að næsta rök sé túlkað sem Tcl skráarnúmer (þ.e. skilað með því að opna .) Gæsalykilinn getur síðan verið notaður eins og það væri hrognt ferli . (Skráarnúmerið ætti ekki lengur að nota.) Þetta leyfir þér að meðhöndla hrár tæki, skrár og leiðslur eins og hrognunarferli án þess að nota pty. 0 er skilað til að gefa til kynna að engin tengd aðferð sé til staðar . Þegar tengingin við heitið ferli er lokað, þá er Tcl skráarauðkenni. The -aveaveopen flaggan er svipuð og -opið nema að -hleðsla opnunarinnar veldur því að skráarnúmerið sé eftir opið, jafnvel eftir að heitið er lokað.

The - flaggið veldur því að pty sé opnað en ekkert ferli hrognist. 0 er skilað til að gefa til kynna að engin tengd aðferð sé til staðar . Spawn_id er stillt eins og venjulega.

Breytuið spawn_out (þræll, fd) er stillt á skráarnúmer sem samsvarar PTY þrælunni. Það er hægt að loka með "nálægt -slave".

The - flagga nefnist merki til að hunsa í hrogna ferlið . Annars fá merki sjálfgefið hegðun. Merki eru nefnd eins og í gildru stjórn, nema að hvert merki krefst sérstaks fána.

strace stigi
veldur eftirfarandi yfirlýsingum sem eru prentaðar áður en þær eru framkvæmdar. (Tcl er rekja sporafjöldi breytur.) Stig gefur til kynna hversu langt niður í kallstakkann til að rekja. Til dæmis, eftirfarandi skipanir rekja Búast við að rekja fyrstu 4 símtölin, en enginn undir því.

búast við -c "strace 4" script.exp

The-info fáni veldur strace að skila lýsingu á nýjustu ekki-upplýsingar rök gefið.

stty args
breytir stöðustillingum svipað og utanaðkomandi stty stjórn.

Sjálfgefið er aðgangur að stjórnstöðinni. Hægt er að nálgast aðrar skautanna með því að bæta við "Beiðni um stöðu skila því sem afleiðing af stjórninni. Ef ekki er beðið um stöðu og stjórnstöðin er skoðuð, er fyrri stöðu hrá- og echo-eiginleika aftur á formi sem síðar er hægt notað af stjórninni.

Til dæmis, rökin hrár eða -cooked settu flugstöðina í hráham . Rökin -duft eða eldað, setjið flugstöðina í eldaða ham. Rökið echo og -chocho setur flugstöðina í echo og eitthvaðcho hátt í sömu röð.

Eftirfarandi dæmi sýnir hvernig á að slökkva á tímabundið tímabundið. Þetta gæti verið notað í öðrum sjálfvirkum skriftum til að forðast að fella inn lykilorð í þeim. (Sjá frekari umfjöllun um þetta hér að neðan.)

stty -echo send_user "Lykilorð:" expect_user -re "(. *) \ n" stilla lykilorð $ expect_out (1 strengur) stty echo

kerfi args
gefur args til sh (1) sem inntak, alveg eins og ef það hefði verið skrifað sem stjórn frá flugstöðinni. Búast við að bíður þar til skelið lýkur. Afgangsstaða frá sh er meðhöndluð á sama hátt og exec annast afturstöðu sína.

Í mótsögn við útfærslu sem tilvísanir stdin og stdout við handritið, kerfið framkvæma engin endurvísa (annað en það sem strikið gefur til kynna). Þannig er hægt að nota forrit sem verða að tala beint við / dev / tty. Af sömu ástæðu eru niðurstöður kerfisins ekki skráðir í dagskránni.

tímamælir [args]
skilar tímamörkum. Með engum rökum er fjöldi sekúndna síðan tímabilið skilað.

The- format flagrið kynnir streng sem er skilað en með staðskiptum gert samkvæmt POSIX reglunum um strftime. Til dæmis er% a skipt út fyrir skammstafað virka daga (þ.e. Sat). Aðrir eru:

% nafna nafn vikunnar% Fullt nafn vikunnar% b skammstafað mánuð nafn% B fullt mánuð nafn% c dagsetning eins og í: Wed 6 okt 11:45:56 1993% d dagur mánaðarins (01-31% H klukkustund (00-23)% I klukkustund (01-12)% j dagur (001-366)% m mánuður (01-12)% M mínútur (00-59)% p am eða pm% S sekúndu (00-61) % u dagur (1-7, mánudagur er fyrsta dagur vikunnar)% U viku (00-53, fyrsta sunnudagur er fyrsta dagur vikunnar)% V viku (01-53, ISO 8601 stíl)% w dagur (0- 6)% W viku (00-53, fyrsta mánudagur er fyrsta dagur vikunnar einn)% x dagsetningartími eins og í: Þri 6 okt 1993% X tími eins og í: 23:59:59% ár (00-99) % Y ár eins og í: 1993% Z tímabelti (eða ekkert ef ekki er hægt að ákvarða) %% bara prósent merki

Aðrar% forskriftir eru óskilgreindar. Aðrir stafir verða sendar í gegnum ósnortið. Aðeins C staðurinn er studdur.

Tími í sekúndu kynnir nokkrar sekúndur frá því tímabilið sem notað er sem uppspretta sem á að formata . Annars er núverandi tími notaður.

The- gmt- flaggið þvingar tímasetningu framleiðsla til að nota GMT tímabeltið. Með engum fána er staðartímabilið notað.

gildra [[stjórn] merki]
veldur því að tiltekin stjórn sé framkvæmd á framtíðarsvipun tiltekinna merkja. Skipunin er framkvæmd í alþjóðlegu umfangi. Ef stjórn er ekki til staðar er merki aðgerðin skilað. Ef skipunin er strengurinn SIG_IGN, eru merki hafnað. Ef skipunin er strengurinn SIG_DFL, eru merkin leiða til kerfis sjálfgefið. merki eru annað hvort eitt merki eða listi yfir merki. Merki má tilgreina tölulega eða táknrænt eins og á merki (3). Forritið "SIG" má sleppa.

Með engum rökum (eða röksemdafjöldi) gefur gildra skilaboðarnúmer gildissviðsins sem er í gangi.

The-kóða fáninn notar aftur kóða stjórnarinnar í stað hvaða kóða Tcl var að fara aftur þegar stjórnin byrjaði upphaflega.

The -interp flagi veldur því að stjórnin sé metin með því að nota túlkuna virk þegar stjórnin byrjaði að keyra frekar en þegar gildið var lýst.

The-nafn fáni veldur gildru stjórn til að skila merki nafn gildra stjórn sem verið er að framkvæma.

The -max fána veldur gildru stjórn til að skila stærsta merki númer sem hægt er að stilla.

Til dæmis, stjórnin "gildru {send_user" Ouch! "} SIGINT" mun prenta "Ouch!" í hvert sinn sem notandinn ýtir á ^ C.

Sjálfgefið, SIGINT (sem venjulega er hægt að mynda með því að ýta á ^ C) og SIGTERM veldu Búast við að hætta. Þetta er vegna þess að eftirfarandi gildru er búin til sjálfgefið þegar búist er við því.

gildra hætta {SIGINT SIGTERM}

Ef þú notar -D merkið til að hefja kembiforritið, er SIGINT endurskilgreint til að hefja gagnvirka kembiforritið. Þetta er vegna þess að eftirfarandi gildir:

gildra {exp_debug 1} SIGINT

Hægt er að breyta kembiforritinu með því að stilla umhverfisbreytuna EXPECT_DEBUG_INIT í nýja gildiviðskipun.

Þú getur auðvitað hunsa báðir þessar bara með því að bæta við gildra skipanir í handritið. Sérstaklega, ef þú ert með þitt eigið "gildra hætta SIGINT", mun þetta hunsa kembiforrit gildru. Þetta er gagnlegt ef þú vilt koma í veg fyrir að notendur geti komist í kembiforritið yfirleitt.

Ef þú vilt skilgreina eigin gildru þína á SIGINT en samt gilda við kembiforritið þegar það er í gangi skaltu nota:

ef {! [exp_debug]} {gildru mystuff SIGINT}

Að öðrum kosti er hægt að gilda við aflúsara með því að nota annað merki.

gildru leyfir þér ekki að hunsa aðgerðina fyrir SIGALRM þar sem þetta er notað innanhúss til að búast við . Aftengja stjórnin setur SIGALRM á SIG_IGN (hunsa). Þú getur endurvirkjað þetta svo lengi sem þú gerir það óvirkan við síðari ræktunarskipanir.

Sjá merki (3) til að fá meiri upplýsingar.

bíða [args]
tafir þar til hrogn ferli (eða núverandi ferli ef enginn er nefndur) lýkur.

bíða skilar venjulega lista yfir fjórar heiltölur. Fyrsta heiltalan er pid af því ferli sem var beðið eftir. Seinni heiltalan er samsvarandi hrognaheiti. Þriðja heiltalan er -1 ef stýrikerfi villa kom upp eða 0 annars. Ef þriðji heiltalan var 0, er fjórða heiltalan sú staða sem hrópað ferli skilar. Ef þriðji heiltalan var -1 er fjórða heiltalan gildi gildisins sem stýrikerfið setur. Hið alþjóðlega breytu villaCode er einnig stillt.

Viðbótarupplýsingar þættir geta birst í lok endurverðsverðs frá bið . Valfrjálst fimmta þáttur auðkennir upplýsingaflokk. Eins og er, eina mögulega gildið fyrir þennan þátt er CHILDKILLED. Í því tilviki eru næstu tvö gildi C-stíll merki nafn og stutt lýsing á texta.

The -i flaggið lýsir því ferli að bíða samsvarandi heitið spawn_id (EKKI ferlið ). Innan SIGCHLD umsjónarmanns er hægt að bíða eftir neinum hrogna ferli með því að nota heitið id -1.

Núna fána veldur því að bíða eftir að koma aftur strax með vísbendingu um velgengni. Þegar ferlið hættir (seinna) mun það sjálfkrafa hverfa án þess að þurfa að bíða eftir því.

Biðstjórnin má einnig nota til að bíða eftir gaffli með því að nota rökin "-i -1". Ólíkt notkun þess með hrogna ferlum, þá er hægt að framkvæma þessa skipun hvenær sem er. Það er engin stjórn á því hvaða ferli er uppskorið. Hins vegar er hægt að athuga afturvirði fyrir ferlið

LIBRARIES

Búast við sjálfkrafa veit um tvær innbyggðir bókasöfn fyrir væntanlega forskriftir. Þessar eru skilgreindar af möppum sem nefnd eru í breytur exp_library og exp_exec_library. Bæði eru ætlað að innihalda gagnsemi skrár sem hægt er að nota með öðrum skriftum.

exp_library inniheldur arkitektúr-sjálfstæðar skrár. exp_exec_library inniheldur arkitektúr-háð skrám. Það fer eftir kerfi þínu, bæði möppur geta verið algerlega tóm. Tilvist skráarinnar $ exp_exec_library / cat-buffers lýsir því hvort þú / bin / cat buffar sjálfgefið.

Réttur prentun

Vgrind skilgreining er í boði fyrir falleg prentun Búast við forskriftir. Miðað við að vgrind skilgreiningin sem fylgir væntanlegum dreifingu sé rétt uppsett, getur þú notað hana sem:

vgrind -lexpect skrá

Dæmi

Það er margt sem ekki er ljóst hvernig á að setja allt saman sem maðurinn lýsir. Ég hvet þig til að lesa og prófa dæmin í dæmi skráarsviðs væntingarinnar. Sumir þeirra eru alvöru forrit. Aðrir eru einfaldlega að lýsa ákveðnum aðferðum, og að sjálfsögðu eru nokkrir fljótir reiðhestur. Uppsetningarskráin inniheldur fljótlegt yfirlit yfir þessi forrit.

Væntanlegir pappírar (sjá einnig) eru einnig gagnlegar. Þó að sumar greinar nota setningafræði sem samsvarar fyrri útgáfum af væntingum, eru meðfylgjandi skynsemi ennþá gild og fara í miklu meira smáatriðum en þessi mannasíða.

CAVEATS

Eftirnafn getur haft áhrif á stjórnheiti Expects. Til dæmis er sendur skilgreindur af Tk fyrir algjöran annan tilgang. Af þessum sökum eru flestar væntingarskipanirnar einnig fáanlegar sem "exp_XXXX". Skipanir og breytur sem byrja með "exp", "inter", "spawn" og "timeout" hafa ekki alias. Notaðu úthlutað skipunarnúmer ef þú þarft þessa eindrægni milli umhverfis.

Væntanlegur tekur frekar frjálsa skoðun á umfangi. Sérstaklega er leitað að breytur sem eru lesin með skipunum sem eru sérstaklega tilgreind í áætluninni Væntanlegur fyrst frá staðbundnu svigrúminu, og ef það finnst ekki í alþjóðlegu umfanginu. Til dæmis dregur þetta úr þörfinni á að setja "alþjóðlegt tímamörk" í hverri aðferð sem þú skrifar sem notar ráð fyrir . Á hinn bóginn eru breytur skrifaðar alltaf í staðbundnum umfangi (nema "alþjóðlegt" skipun hafi verið gefin út). Algengasta vandamálið sem þetta veldur er þegar hrogn er framkvæmd í málsmeðferð. Utan málsmeðferðarinnar, spawn_id er ekki lengur til staðar, þannig að hrognunarferlið er ekki lengur aðgengilegt einfaldlega vegna umfangs. Bættu við "heimsvísu spawn_id" við slíka aðferð.

Ef þú getur ekki virkjað multispawning getu (þ.e. kerfið þitt styður hvorki valið (BSD *. *), Skoðanakönnun (SVR> 2), né eitthvað samsvarandi), Búast mun aðeins geta stjórnað einu ferli í einu. Í þessu tilfelli, ekki reyna að stilla spawn_id , né ættir þú að framkvæma ferli með exec meðan sprautað ferli er í gangi. Enn fremur geturðu ekki búist við mörgum ferlum (þ.mt notandinn sem einn) á sama tíma.

Stöðugildi geta haft mikil áhrif á forskriftir. Til dæmis, ef handrit er skrifað til að leita að echoing, mun það vanvirða ef echoing er slökkt. Af þessum sökum, Búast sveitir sanna endapunktar breytur sjálfgefið. Því miður getur þetta gert óþægilegt fyrir önnur forrit. Sem dæmi, vill emacs skelinn breyta "venjulegum" mappings: newlines fá kortleggja til newlines í stað flutnings-return newlines og echoing er óvirk. Þetta gerir þér kleift að nota emacs til að breyta innslalínu. Því miður, Búast getur ekki hugsanlega giska á þetta.

Þú getur óskað eftir því að búast ekki við því að hunsa sjálfgefin stilling endapunktar, en þú verður þá að vera mjög varkár þegar þú skrifar forskriftir fyrir slíkar aðstæður. Ef um er að ræða emacs, forðastu eftir því eins og echoing og endapunkti.

Fyrirmælin sem samþykktu rökin í einn lista ( væntingar afbrigði og samskipti ) nota heuristic að ákveða hvort listinn sé í raun eitt eða mörg. The heuristic getur aðeins mistekist ef listinn raunverulega táknar eitt rifrildi sem hefur marga embed in \ n með non-whitespace stafi á milli þeirra. Þetta virðist nægilega ólíklegt, en rökin "-nobrace" er hægt að nota til að þvinga eitt rök til að meðhöndla sem eitt rök. Þetta gæti hugsanlega verið notað með vélbúið vænta kóða. Á sama hátt, -brace sveitir einn rök til að höndla sem margfeldi mynstur / aðgerðir.

PÖDDUR

Það var mjög freistandi að nefna forritið "kynlíf" (fyrir annaðhvort "Smart EXec" eða "Send-Expect"), en góðan skilning (eða bara Puritanism) átti sér stað.

Á sumum kerfum, þegar skel er hrogn, kvartar hún um að ekki hafi aðgang að tty en keyrir engu að síður. Þetta þýðir að kerfið þitt hefur kerfi til að ná stjórnandi tty sem búast ekki við. Finndu út hvað það er og sendu þessar upplýsingar aftur til mín.

Ultrix 4.1 (að minnsta kosti nýjustu útgáfur í kringum hér) telur tímamörk yfir 1000000 að jafngilda 0.

Digital UNIX 4.0A (og líklega aðrar útgáfur) neitar að úthluta ptys ef þú skilgreinir SIGCHLD handler. Sjá veitingu síðu fyrir frekari upplýsingar.

IRIX 6.0 fjallar ekki um PTY heimildir á réttan hátt þannig að ef búist er við að reynt sé að úthluta PTY sem áður hefur verið notað af einhverjum öðrum þá mistekst það. Uppfærsla á IRIX 6.1.

Telnet (staðfest aðeins undir SunOS 4.1.2) hangir ef TERM er ekki stillt. Þetta er vandamál undir cron, á og í cgi forskriftir, sem skilgreina ekki TERM. Þannig verður þú að setja það skýrt fram - hvaða tegund er venjulega óviðkomandi. Það verður bara að vera stillt á eitthvað! Eftirfarandi líklega nægir í flestum tilfellum.

settu ENV (TERM) vt100

Ábending (staðfest aðeins undir BSDI BSD / OS 3.1 i386) hangir ef SHELL og HOME eru ekki stilltir. Þetta er vandamál undir cron , á og í CGI forskriftir, sem skilgreina ekki þessar umhverfisbreytur. Þannig verður þú að setja þau skýrt - til hvaða gerð er venjulega óviðkomandi. Það verður bara að vera stillt á eitthvað! Eftirfarandi líklega nægir í flestum tilfellum.

settu ENV (SHELL) / bin / sh sett env (HOME) / usr / local / bin

Sumar gerðir ptys eru hönnuð þannig að kjarninn kasta burt ólesinri framleiðslu eftir 10 til 15 sekúndur (raunverulegt númer er framkvæmd háð) eftir að ferlið hefur lokað skráarlýsingu. Þannig búast við forritum eins og

hrognardagssvefurinn 20 búast við

mun mistakast. Til að koma í veg fyrir þetta, beittu ekki gagnvirku forritum með exec frekar en hrogn . Þótt slíkar aðstæður séu hugsanlegar, hef ég í raun aldrei fundist aðstæður þar sem endanleg framleiðsla sannarlega gagnvirkt forrit myndi glatast vegna þessa hegðunar.

Á hinn bóginn, Cray UNICOS ptys henda ólesinni framleiðslu strax eftir að ferlið hefur lokað skráarlýsingu. Ég hef tilkynnt þetta til Cray og þeir eru að vinna að lagfæringu.

Stundum er þörf á seinkun á milli hvetja og svörunar, svo sem þegar tty tengi breytir UART stillingum eða samsvörun baud herbergi með því að leita að byrjun / stöðva bita. Venjulega er allt þetta krafist er að sofa í annað eða tvö. A sterkari tækni er að reyna aftur fyrr en vélbúnaðurinn er tilbúinn til að fá inntak. Eftirfarandi dæmi notar bæði aðferðir:

sendu "hraða 9600 \ r"; sofa 1 búast við {timeout {send "\ r"; exp_continue} $ hvetja}

gildið-kóða mun ekki virka með hvaða stjórn sem er í atburðarás Tcl, svo sem svefn. Vandamálið er að í tengslum við lykkju mun Tcl farga afturkóðunum frá async atburðahöndlarum. A lausn er að setja upp fána í gildrukóðanum. Athugaðu síðan fánann strax eftir skipunina (þ.e. sofa).

The expect_background stjórnin hunsar-timeout rök og hefur ekki hugmynd um tímamörk almennt.

& # 34; EXPECT HINTS & # 34;

Það eru nokkrir hlutir um Búast sem kann að vera ekki leiðandi. Þessi hluti reynir að takast á við suma af þessum hlutum með nokkrum tillögum.

Algengt er að búast sé við vandamálum hvernig á að viðurkenna skelbragð. Þar sem þetta er sérsniðið öðruvísi með öðruvísi fólki og mismunandi skeljum, getur það verið erfitt að flytja sjálfvirkan rlogin án þess að vita hvetja. A sanngjarnt samkomulag er að notendur geyma reglulega tjáningu sem lýsir hvetja (einkum enda þess) í umhverfisbreytunni EXPECT_PROMPT. Hægt er að nota kóða eins og eftirfarandi. Ef EXPECT_PROMPT er ekki til staðar hefur kóðinn enn gott tækifæri til að virka rétt.

stilltu hvetja "(% | # | \\ $) $"; # sjálfgefna hvetja grunnlína {stilla hvetja $ env (EXPECT_PROMPT)} búast

Ég hvet þig til að skrifa búast við mynstrum sem innihalda endann á því sem þú átt von á að sjá. Þetta forðast möguleika á að svara spurningu áður en að sjá allt. Þar að auki getur þú svarað spurningunni áður en þú sérð þau alveg, en þú svarar snemma, en svarið kann að birtast í miðju spurningunni. Með öðrum orðum verður samtalið sem fylgir því rétt en lítur út fyrir að spæna.

Flestar hvetningar innihalda rúmpersóna í lokin. Til dæmis er hvetja frá ftp 'f', 't', 'p', '>' og. Til að passa við þessa hvetja verður þú að reikna fyrir hvert þessara stafa. Það er algeng mistök að ekki sé að innihalda eyða. Setjið blöðin skýrt fram.

Ef þú notar mynstur á forminu X *, mun * passa við alla framleiðsluna sem berast frá lokum X til síðasta sem fékkst. Þetta hljómar leiðandi en getur verið nokkuð ruglingslegt vegna þess að orðasambandið "síðasta sem fékkst" getur verið breytilegt eftir hraða tölvunnar og vinnslu I / O bæði af kjarnanum og tækjafyrirtækinu.

Einkum hafa menn tilhneigingu til að sjá forrita framleiðsla sem kemur í stórum klumpum (atomically) þegar flestir forrit framleiða framleiðsluna eina línu í einu. Ef þetta er raunin getur * í mynstri fyrri málsins aðeins samsvarað lok núverandi línu þótt það virðist vera meira vegna þess að þegar samsvörunin var öll framleiðsla sem höfðu verið móttekin.

búast við hefur enga leið til að vita að frekari framleiðsla er að koma nema mynstur þitt sé sérstaklega reiknað fyrir það.

Jafnvel eftir línu-stilla biðminni er ósann. Ekki aðeins gera áætlanirnar sjaldan loforð um gerð bólusetningar sem þeir gera, en meltingartruflanir geta skemmt framleiðslulínurnar þannig að línurnar brjótast á tilviljanakenndum stöðum. Þannig að ef þú getur tjáð síðustu stafir af hvetja þegar þú skrifar mynstur, þá er það skynsamlegt að gera það.

Ef þú ert að bíða eftir mynstri í síðasta framleiðsla af forriti og forritið gefur frá sér eitthvað annað í staðinn, munt þú ekki geta greint það með timeout leitarorðinu. Ástæðan er sú að búast ekki við tímasetningu - í staðinn mun það fá vísbendingu. Notaðu það í staðinn. Jafnvel betra, notaðu bæði. Þannig að ef þessi lína er alltaf flutt í kring, verður þú ekki að breyta línuinu sjálfu.

Newlines eru venjulega breytt í flutning aftur, linefeed röð þegar framleiðsla af flugstöðinni bílstjóri. Þannig að ef þú vilt mynstur sem passar nákvæmlega við tvær línur, td, printf ("foo \ nbar"), ættir þú að nota mynstur "foo \ r \ nbar".

Svipað þýðing kemur fram þegar þú lest frá notandanum, gegnum expect_user . Í þessu tilviki, þegar þú ýtir á aftur, verður það þýtt í newline. Ef búist er við þá fer það í forrit sem setur flugstöðina sína í hráham (eins og telnet), það verður vandamál, þar sem áætlunin gerir ráð fyrir að sanna aftur komi. (Sum forrit eru í raun fyrirgefa því að þeir munu sjálfkrafa þýða nýlínur til skilar, en flestir gera það ekki.) Því miður er engin leið til að komast að því að forrit setji flugstöðina í hráham.

Frekar en að handvirkt skipta um nýjungar með ávöxtun, lausnin er að nota skipunina "stty raw", sem mun stöðva þýðingu. Athugaðu hins vegar að þetta þýðir að þú munt ekki lengur fá eldaða línubreytingaraðgerðir.

Samskipti gera óbeint setur flugstöðina þína á hráham þannig að þetta vandamál mun ekki verða til þess.

Það er oft gagnlegt að geyma lykilorð (eða aðrar persónulegar upplýsingar) í væntanlegum skriftum. Þetta er ekki mælt með því að nokkuð sem er geymt á tölvu er næmt til að fá aðgang að einhverjum. Þannig að beina gagnvirkt fyrir lykilorð frá handriti er betri hugmynd en að fella þær inn bókstaflega. Engu að síður er stundum slík innbygging sú eini möguleiki.

Því miður hefur UNIX skráarkerfið engin bein leið til að búa til forskriftir sem eru executable en ólæsilegar. Kerfi sem styðja setgid skel skrifar geta óbeint líkja eftir þessu sem hér segir:

Búðu til væntanlegt handritið (sem inniheldur leyndarmálið) eins og venjulega. Gerðu heimildir þess að vera 750 (-rwxr-x ---) og í eigu treystrar hóps, þ.e. hóp sem er heimilt að lesa hana. Ef nauðsyn krefur skaltu búa til nýjan hóp í þessum tilgangi. Næst skaltu búa til / bin / sh handrit með heimildum 2751 (-rwxr-s - x) í eigu sömu hóps og áður.

Niðurstaðan er handrit sem hægt er að framkvæma (og lesa) af einhverjum. Þegar kveikt er á það keyrir það Skrifa handritið.

& # 34; SJÁ EINNIG & # 34;

Tcl (3), libexpect (3)
"Exploring Expect: A Tcl-undirstaða tól fyrir sjálfvirka gagnvirka forrit" eftir Don Libes, bls. 602, ISBN 1-56592-090-2, O'Reilly and Associates, 1995.
"búast við: lækna þá óviðráðanlegan þátt í samvirkni" eftir Don Libes, sumarið 1990 1990 USENIX ráðstefnan, Anaheim, Kaliforníu, 11.-15. júní 1990.
.1 "Notkun búist við sjálfvirkan kerfisstjórnun Tasks" eftir Don Libes, málsmeðferð 1990 USENIX Stórar uppsetningar Systems Administration Conference, Colorado Springs, Colorado, 17-19 október 1990.
.I "Tcl: Embeddable Command Language" eftir John Ousterhout, vinnslu vetrarinnar 1990 USENIX Conference, Washington, DC, 22.-22. Janúar 1990. Ég býst við: Scripts for Controlling Interactive Programs "eftir Don Libes, Computing Systems , Vol. 4, nr. 2, háskóli Kaliforníu-fréttaritanna, nóvember 1991. ég "Interferent Testing and Conformance Testing Interactive Programs" eftir Don Libes, sumarverk 1992 USENIX Conference, bls. 135-144, San Antonio, TX, Júní 12-15, 1992 .. ég "Kibitz - tengir margar gagnvirkar áætlanir saman" af Don Libes, hugbúnaði - æfingum og reynslu, John Wiley & Sons, West Sussex, Englandi, Vol.

23, nr. 5, maí 1993. Ég er "Debugger for Tcl Applications", eftir Don Libes, Verklagsreglur 1993 Tcl / Tk Workshop, Berkeley, CA, 10. júní 11, 1993.

AUTHOR

Don Libes, National Institute of Standards and Technology

Viðurkenningar

Takk fyrir John Ousterhout fyrir Tcl og Scott Paisley fyrir innblástur. Takk fyrir Rob Savoye fyrir Autoconfiguration kóða Expects.

HISTORY skrá skjöl mikið af þróun búast . Það gerir áhugaverða lestur og gæti gefið þér frekari innsýn í þennan hugbúnað. Þökk sé fólki sem nefnd er í henni sem sendi mér gallafyllingar og gaf annan aðstoð.

Hönnun og framkvæmd væntingar var greitt að hluta af bandarískum stjórnvöldum og er því í almenningi. Hins vegar höfundur og NIST vilja fá kredit ef þetta forrit og skjöl eða hluti þeirra eru notuð.