Linux / Unix komandoa espero da

Espero programa beste programa interaktibo batzuekin hitz egiten duen script baten arabera. Script-ean jarraituz, Expect-ek programa batetik espero dezakeena eta erantzun zuzena izan behar du. Interpretatutako hizkuntzak adar eta goi mailako kontrol egiturak eskaintzen ditu elkarrizketa zuzentzeko. Gainera, erabiltzaileari kontrola eta zuzenean elkarreragin ditzake, ondoren script-ean kontrolaren berri emanez.

Expectk espero da eta Tk nahasketa da. Expect eta Tk-ren nahia bezalakoak dira. Espero ere zuzenean C edo C ++ erabil daiteke Tcl gabe.

"Espero" izena Uucp, kermit eta beste modem kontrolatzeko programek zabaldutako / espero diren sekuentziak bidaltzeko / itxaropenaren ideiatik dator. Hala ere uucp ez bezala, espero orokorra da, beraz, erabiltzaile-mailako komandoa exekutatu ahal izango da edozein programarekin eta zeregin kontuan. Espero al daiteke aldi berean hainbat programarekin hitz egiteko.

Zer espero dezaket?

Esate baterako, hemen gauza batzuk espero komandoak egin dezake:

Hainbat motatako arrazoiak daude shell-ek zeregin hauek egiteko. Guztiek espero dezakezute.

Oro har, espero da programa eta erabiltzailearen arteko elkarrekintza behar duen edozein programa martxan jartzea. Beharrezkoa den guztia da interakzioa programazioan izan daitekeela. Espero ere kontrola ematen dio erabiltzaileari kontrolatzen ari den programa gelditu gabe. Era berean, erabiltzaileari edozein unetan scriptak kontrola ditzake.

Usage

Espero irakurtzen cmdfile komandoen zerrenda exekutatzeko. Espero inplizituki gonbidatu ahal izango dira #! script-ak exekutagarri gisa script-a eta script-ean lehen lerroa markatzen duen notazioa.

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

Jakina, bideak zehatz-mehatz azaldu behar du non espero den bizitza. / usr / local / bin adibide bat besterik ez da.

The -c flag script bat baino lehenago exekutatu beharreko komandoa aurreikusten du. Komandoak koskatu egin beharko lirateke shell desegiteko. Aukera hau hainbat aldiz erabil daiteke. Zenbaki bakarreko komandoak exekutatzeko komando bakunak bakar-bakarrarekin bereizten ditu. Komandoak agertzen diren ordenan exekutatzen dira. Expectk erabiltzen denean, aukera hau komandoa bezala zehaztuko da.

D-markak diagnostiko irteera bat ematen du, batez ere komandoen barne-jarduera txertatzen duena, esate baterako, espero eta elkarrekintzan. Bandera honek "exp_internal 1" bezalako efektu berdina du Expect script baten hasieran, gehi Expect bertsioa inprimatuta dago.

The -D flag-ek arazketa interaktiboa ahalbidetzen du. Zenbaki oso baten balioa jarraitu behar da. Orduan, araztailea hurrengo Tcl prozedura kontrolatuko du balioa ez bada zeroa edo ^ C sakatzen bada edo hausturarik ez badago, edo beste debugger komandoa scriptan agertuko da. Expectk erabiliz gero, aukera hau zehaztuko da : arazketa.

-f markak komandoak irakurtzeko fitxategi bat aurreikusten du. Bandera bera aukerakoa da #! notazioa, beraz, beste argumentuak komando lerroan eman daitezke. Expectk erabiltzean, aukera hau zehaztutako fitxategi gisa zehazten da.

Lehenespenez, komando fitxategia memorian irakurtzen da eta bere osotasunean exekutatzen da. Batzuetan nahikoa da lerro bat fitxategiak aldi berean irakurtzea. Fitxategi arbitrarioak horrela maneiatzeko behartzeko, erabili bandera-b. Expectk erabiltzen denean, aukera hau zehaztuko da -buffer gisa.

Katea "-" fitxategi-izen gisa ematen bada, sarrera estandarra irakurriko da horren ordez. Erabili "./-" "-" izeneko fitxategi batetik irakurtzeko.

Bandera -i badirudi komandoak modu interaktiboan galdetu nahi izatea, fitxategi batetik irakurtzeko. Abisua irteerako komandoaren bidez edo EOFen bidez amaituko da. Bandera -i onartzen da komando-fitxategi bat edo -c erabiltzen ez bada. Expectk erabiliz gero, aukera hau interaktiboa da.

- Aukeren bukaera mugatzeko erabil daiteke. Hau erabilgarria da zure script-ean aukera-antzeko argumentua pasatzea nahi baduzu Esperoaz interpretatu gabe. Hau erabil dezakezu #! line espero ez den edozein interpretazio ezikusteko. Adibidez, argv argibaren script izena argitzen duen jatorrizko argitalpena utziko du.

#! / usr / local / bin / expect -

Kontuan izan ohiko getopt (3) eta execve (2) konbentzioak nabarituko direla argumentuak #! line.

Fitxategia $ exp_library / expect.rc fitxategia automatikoki biltzen da automatikoki egonez gero, -N bandera erabiltzen ez bada behintzat. (Expectk erabiliz gero, aukera hau zehazten da -NORC gisa.) Honen ondoren, ~ / .expect.rc fitxategia automatikoki sortzen da, -n bandera erabiltzen ez bada behintzat. Ingurune aldagaia DOTDIR definituta badago, direktorio gisa tratatuko da eta .expect.rc irakurriko da hemendik. Expectk erabiliz gero, aukera hau zehaztuko da -norc gisa. Sourcing hau bakarrik gertatzen da, edozein -c markak exekutatu ondoren.

-v eragiketak espero du bere bertsio zenbakia inprimatu eta irten. Espectk-en dagokion bandera, zeinak bandera izen luze erabiltzen dituen, -version.

Aukerazko args zerrenda batean eraikitzen dira eta argv izeneko aldagaian gordetzen dira. argc argv-ren luzera da.

Argv0 script edo bitar izena izango da, script ez bada erabiltzen. Adibidez, ondorengo scriptek scriptaren izena eta lehenengo hiru argumentuak ateratzen dituzte:

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

Komandoak

Espero tresna komandoaren hizkuntza erabiltzen du. Tcl-ek kontrol fluxua eskaintzen du (esate baterako, for, break), adierazpen ebaluazioa eta beste hainbat funtzio, esaterako, errekurtsio eta prozedura definizioa. Hemen erabilitako komandoak baina ez definituak (ezarri, baldin eta exekutatu) Tcl komandoak dira. Espero komando gehigarriak onartzen ditu. Bestela zehazten ez bada, komandoak kate hutsa itzultzen dute.

Komandoak alfabetikoki agertzen dira, azkar kokatuta egon dadin. Hala eta guztiz ere, erabiltzaile berriek hobeto aurki dezakete spawn, bidali, espero eta elkarreraginaren deskribapenak irakurtzen, ordena horretan.

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

uneko prozesurako konexioa ixten du. Programarik interaktiboek EOFa detektatuko dute eta irteera hartuko dute; Hortaz, itxi ohi da prozesua hiltzea ere. The -i flagrek adierazten du prozesua dagokion spawn_id izenarekin ixten dela.

Biak espero eta elkarreragiten dira uneko prozesua irteten denean eta inplizituki itxi egiten denean, baina prozesua hiltzen bada, esan "exec kill $ pid", esplizituki deitu behar duzu .

Ezezagunak zehazten du spawn id iturburuan sortzen diren prozesu berrietan itxi edo prozesua gainjartzen bada. Abiapuntutzat idazteko, erabili 0 balioa. Zero ez osoko balio batek prozesu berrietan itxita jartzen du.

The -slave flag ez da spawn id lotutako esklabo ixten. Konexioa itxita dagoenean, esklabua automatikoki itxi eta irekita egongo da.

Ez dio inolako konexiorik inplizituki edo esplizituki itxaroten duenik, itxaron beharko duzu dagokion kernel prozesuaren zirrikitua garbitzeko. Itxi komandoa ez da deia itxarotea, ez dago bermerik prozesuen konexio bat ixten duenetik irteteko.

arazketa [[-now] 0 | 1]

Tcl arazketa kontrolatzen du adierazpenak eta breakpoints zeharkatu ahal izateko.

Argumenturik gabe, 1 itzultzen da araztailea ez bada exekutatzen, bestela 0 itzuliko da.

1 argumentu batekin, araztua hasten da. 0 argumentu batekin, araztua gelditzen da. 1 argumentu bat badago -bere bandera ez bazaio, araztailea berehala hasiko da. Bestela, araztailea Hurrengo Tcl adierazpenarekin hasiko da.

Debug komandoa ez da tranpak aldatzen. Konparatu hau itxaroten hasi -D flag-rekin.

Deskonektatu komandoa uneko prozesua deskonektatzen du terminaletik . Atzeko planoan jarraitzen du. Prozesuak prozesu propioa du. I / O estandarra / dev / null bideratzen da.

Ondorengo zatiak deskonektatzea erabiltzen du atzeko planoan script-a exekutatzen jarraitzeko.

{[fork]! = 0} irten bada deskonektatu. . .

Hurrengo script-ak pasahitza irakurtzen du eta, ondoren, exekutatzen den bakoitzean pasahitza eskatzen duen ordu bakoitzeko programa bat exekutatzen du. Gidoiak pasahitza ematen du, beraz, idatzi behar duzu behin.

send_user "pasahitza \" expect_user -re "(. *) \ n" for {} 1 {} {{[fork]! = 0} {sleep 3600; continue} disconnect spawn priv_prog itxaron pasahitza: bidali "$ expect_out ( 1, katea) \ r ". . . irteera}

Prozesu asinkronoko funtzioaren (&) deskonektatzeaz gain, abantaila bat da, aurrez ezarritako deskonektapenaren terminal parametroak gorde ditzakete eta, gero, ptys berrietara aplikatu. With &, Expect-ek ez du terminalaren parametroak irakurtzeko aukera izan, terminalak dagoeneko deskonektatuta dagoenean Espero-k kontrola jasotzen du.

irteera [-opts] [egoera]

kausak itxaron edo beste modu batera prestatu.

Ezabatu bandera ez datorren hurrengo argumentua ateratzeko kudeatzaile gisa erabiltzeko. Argumenturik gabe, uneko irteera kudeatzailea itzuliko da.

Ezezagunen bandera eragiten du Itxaroten da irteera prestatzeko, baina sistema eragilearen kontrola benetan itzuli gabe geratzen da. Erabiltzaileak zehaztutako irteera kudeatzailea exekutatzen du, baita Expect-en barruko maneiatzaileak ere. Ez dago espero gehiago komandoak exekutatu behar. Hau erabilgarria da Exekutatu beste Tcl luzapenekin exekutatzen ari bazara. Uneko interpretatzailea (eta leiho nagusia Tk ingurunean baldin badago) beste Tcl luzapen batzuek garbitu dezakete. Expect-en irteera berriro deitzen bada (hala ere gerta liteke), kudeatzaileak ez dira berrabiarazi.

Amaitu ondoren, prozesu abiarazleekiko konexio guztiak itxi egingo dira. Itxiera EOF gisa detektatuko da prozesu abiaraztean. irteerak ez du beste ekintzarik hartzen, normalean _exit (2) prozedura normala denetik. Horrela, EOFen egiaztagiriak ez diren prozesuak abiaraz daitezke. (Hainbat baldintza garrantzitsuak dira, esate baterako, zein prozesu bat abiaraziko duen seinaleak bidaliko diren zehazteko, baina hauek sistema-menpekoak dira, normalean irteeraren pean dokumentatuta (3). Honek exekutatzen jarraitzen duten prozesu bortitzak init-ek heredatuko ditu.

egoera (edo zehaztutakoa ez bada) espero den irteera gisa itzuliko da. irteera inplizituki exekutatzen da script-aren amaiera bukatzen bada.

exp_continue [-continue_timer]
Komandoak exp_continue jarraitzen du exekutatzen jarraitzeko baizik eta itzultzea normalean bezala. Lehenespenez exp_continue denbora-tenporizadorea berrezartzen du. Kontu-kontroleko bandera ezartzen du tenporizadorea berriro berrabiarazten. (Ikusi informazio gehiagorako zain .)

exp_internal [-f fitxategia] balioa
komando gehiago sortzen ditu barne diagnostiko informazioa bidaltzeko. Zera balioko du balioa zero ez bada. Irteera hau desgaituta dago balioa 0 bada. Diagnostikorako informazioa jasotzen duen karaktere bakoitza eta ereduen aurkako irteera bat datozen saiakera guztiak barne hartzen ditu.

Aukerako fitxategia hornitzen bada, normala eta arazketa irteera fitxategi horretan idatziko dira (balioa balioaren edozein izanik ere). Aurreko diagnostiko-irteera fitxategia itxita dago.

The -info markak eragindako exp_internalek ezarritako informazio ez-berrien argumentuen deskribapen bat itzultzeko aukera ematen du.

exp_open [args] [-i spawn_id]
Tcl fitxategi identifikatzaile bat sortzen du jatorrizko abiarazlearen idazteko. Fitxategi identifikatzailea Tcl-ren irekitako komandoa ireki balitz bezala erabil daiteke. (The spawn id ez da gehiago erabiliko. Itxaron behar ez da exekutatu.

The -leaveopen flag-ek ez du open spawn id irekita espero den komando bidez. Itxaron itxaron behar da spawn idean.

exp_pid [-i spawn_id]
prozesuan dagoen uneko prozesua dagokion prozesua itzultzen du. Bandera erabiltzen den -i bada, pid itzultzen da emandako spawn id-ean.

exp_send
bidalitako ezizena da.

exp_send_error
alias da send_error .

exp_send_log
alias da send_log .

exp_send_tty
alias for send_tty da .

exp_send_user
alias da send_user .

exp_version [[-exit] bertsioa]
script-a espero den bertsioarekin bateragarria dela ziurtatzeko erabilgarria da.

Argumenturik gabe, Expect bertsioaren bertsioa itzultzen da. Baliteke bertsio hau zure script-ean kodetzea. Benetan badakizula bertsio berrien ezaugarriak ez dituzula ezagutzen, aurreko bertsioa zehaztu dezakezu.

Bertsioak hiru puntu bereizten dira. Lehenengoa zenbaki nagusia da. Espero diren beste zenbaki batekin zenbaki baterako idatzitako gidoiak ia ez dira funtzionatuko. exp_version- ek akats bat itzultzen du zenbakiak handiagotzen ez badira.

Bigarren zenbakia txikia da. Uneko bertsioan baino txikiagoak diren bertsioetarako idatzitako gidoiak funtzio berri baten menpe egon daitezke eta agian ez da exekutatu. exp_version- ek errorea ematen du zenbaki handienekin bat badatoz, baina script kopuru txikia Expect- eko exekuzioan baino handiagoa da.

Hirugarren alderdiak ez du alderik alderaketa alderik. Hala ere, Esperoaren softwarearen banaketa inolaz ere aldatu egiten da, hala nola, dokumentazio osagarria edo optimizazioa. Berrezarri 0 bertsio txiki berri bakoitzaren gainean.

Irteera- bandarekin batera, Expectek errore bat inprimatzen du eta bertsio zaharkituta dago.

espero [[-opts] pat1 body1] ... [-opts] patn [bodyn]
itxaroteko ereduetako bat sortu den prozesu baten irteera bat datorren arte, zehaztutako denbora-tartea gainditu da edo fitxategiaren amaiera ikusiko da. Azken gorputza hutsik badago, ezeztatu egin daiteke.

Azken espero_before komandotik datozen ereduak inplizituki erabiltzen dira beste edozein eredu baino lehen. Azken itxaropenaren aginduaren ereduak inplizituki erabiltzen dira beste edozein ereduaren ondoren.

Argibideak itxaropen osoaren adierazpenek lerro bat baino gehiago behar badituzte, argumentu guztiek "bateragarria" izan liteke, lerro bakoitza alderantzizko barra batekin amaitzeko saihesteko. Kasu honetan, ohiko Tcl ordezkapenak gertatzen dira giltza izan arren.

Eredua eredu bat bada, dagokion gorputza fitxategi amaieran exekutatzen da. Patroia keywordaren denbora-muga bada , dagokion gorputza denbora-muga gainditu ondoren exekutatuko da. Denbora-mugaegunaren gako-hitza ez bada erabiltzen, ekintza nuluak inplizituki denbora-muga gainditu ondoren exekutatuko dira. Denbora-muga lehenetsia 10 segundotan da, baina ezar daiteke, adibidez, 30, "ezarri denbora-muga 30" komandoa. Denbora-muga infinitua -1-ren arabera izendatu daiteke. Eredu bat gako-hitza lehenetsia bada , dagokion gorputza denbora-muga edo amaierako fitxategian exekutatzen da.

Eredua bat datozenean, dagokion gorputza exekutatzen da. espero gorputzaren (edo kate hutsa) emaitza datorren patroia datorrenean. Eredu anitzekin bat datorrenean, lehendabizi agertzen den gorputz bat hautatzeko erabiltzen da.

Irteera berriak iristen diren bakoitzean, zerrendako ordena bakoitzean eredu bakoitzarekin alderatzen da. Horrela, partidaren falta bat probatu ahal izango duzu, azken eredua agertzen den bermatutako zerbait eginez, adibidez, gonbita. Ez dago galderarik egoeretan, denbora-muga erabili behar duzu (eskuz elkarreragiten bazenuen bezala).

Ereduak hiru modutan zehazten dira. Lehenespenez, ereduak Tcl-en kateko partekatzeko komandoa bezala zehazten dira. (Eredu horiek, era berean, "glob" ereduak aipatzen dituzten C-shell erregelak dira. Banderen bandera agian erabili ahal izango lirateke beste banderak itxaroten dituzten ereduak babesteko. Edozein eredua "-" batekin hasita egon beharko luke modu honetan. ("-" hasten diren kate guztiak etorkizuneko aukeretarako erreserbatuta daude).

Adibidez, hurrengo zatiak saio arrakastatsua bilatzen du. (Kontuan izan abortua script-en beste edozein lekutan zehaztutako prozedura dela suposatzen dela.)

espero {okupatua {okupatuta dago \ n; exp_continue} huts egin du abortatu "pasahitz baliogabea" abortatu denbora-muga abortatu konektatuta}

Quotes laugarren ereduan beharrezkoak dira espazio bat duelako, eta horrek bestela bereiziko luke ekintza eredua. Ekintza berdinarekin (adibidez, 3 eta 4) bezalako ereduak ekintzak berriro zerrendatzea eskatzen du. Horrela saihestu daiteke regexp-style ereduak erabiliz (ikus behean). Informazio orokorra estiloko ereduak osatzeko Tcl eskuliburuan aurkituko dituzu.

Regexp-style ereduak Tcl's regexp ("adierazpen erregularra") komandoaren laburpena zehazten duen sintaxia jarraitzen du. regexp ereduak bandera -re erabiliz sartu dira. Aurreko adibidea berriro idatzi daiteke regexp erabiliz:

espero {okupatua {okupatuta dago \ n; exp_continue} -re "huts egin du | baliogabeko pasahitza" abortatu denbora-muga abortatu konektatuta}

Bi motatako ereduak "unbalored" dira. Horrek esan nahi du ereduek ez dutela kate osoa bat etorri behar, baina katearen edozein tokitan has daiteke eta amaitu (betiere beste guztia bat datoz). Erabili ^ kate baten hasierarekin bat etortzeko, eta $ amaitu arte. Kontuan izan kate baten amaierara itxaroten ez bazaudeela, zure erantzunak katearen erdian katearen erdian katearen amaierarekin amaitzen diren prozesua bezalakoak dira. Emaitzak zuzentzen jarraitzen duen bitartean, irteerak naturaltzat jotzen du. Horrela, $ erabiltzea animatzen da kate baten amaieran karaktereak deskribatzeko.

Kontuan izan editore askotan, ^ eta $ datoz lerroen hasiera eta amaiera, hurrenez hurren. Hala ere, espero ez den lerroaren arabera, karaktereek datozen eta amaierako datak bat datoz (lerroak ez bezala) bat datozen itxarote bufferretan. (Era berean, ikusi beheko oharra "sistema indigestion.")

Ez- markak eredua "zehatza" kate gisa parekatzen du. Ez da *, ^, etab. Interpretaziorik egiten (ohiko Tcl konbentzioak oraindik ere behatu arren). Eredu zehatzak beti aldaezinak dira.

The -nocase flag-ek irteerako maiuskulen karaktereak minuskula karaktere bezala konparatu egiten du. Patroia ez da kaltetuta.

Irteera irakurtzean, 2000 byte baino gehiagok lehenago byteak "ahaztuta" izan ditzake. Honek party_max funtzioarekin alda dezake . (Kontutan izan gehiegizko balio handiak moteltzea ereduaren matraba dezakeela .) Patlist full_buffer bada , dagokion gorputza exekutatuko da match_max byte jaso badituzu eta beste eredu batzuek ez dute bat etorri. Full_buffer gako-hitza erabiltzen den ala ez, ahaztutako karaktereak espero_out (buffer) idatzita daude.

Patlist hitza null bada , eta nulls onartzen dira ( remove_nulls komandoaren bidez), dagokion gorputza exekutatzen da ASCII 0 bakarra bat datorren. Ez da posible 0 byte bateratzen glob edo regexp ereduen bidez.

Ereduarekin bat datorrenean (edo eof edo full_buffer), edozein irteera bat etortzeak eta aurrez aurrekoak aurreztuko dira espero_out (buffer) aldagaian. Gehienez 9 regexp azpibatzordeak espero dira (1, katea) aldagaiak gorde dira espero_out (9, kate) bidez . Indizeen bandera eredu bat baino lehen erabiltzen bada, 10 kateen hasierako eta amaierako indizeak (10) modu esperimentalean (X, hasiera) eta expect_out (X, amaiera) aldagaietan gordeko dira X digitua, bufferreko azpi-posizioari dagokio. 0 ereduarekin bat datorren kateari egiten dio erreferentzia eta glob ereduak sortzen ditu, baita regexp ereduak ere. Adibidez, prozesuak "abcdefgh \ n" irteera produzitu badu, emaitza hau da:

espero "cd"

honako adierazpenak exekutatu balitz bezala:

set expect_out (0, katea) cd set expect_out (buffer) abcd

eta "efgh \ n" irteerako bufferretan utziko da. Prozesuak "abbbcabkkkka" irteera sortzen badu, emaitza hau da:

espero -indices -re "b (b *). * (k +)"

honako adierazpenak exekutatu balitz bezala:

set expect_out (0, hasi) 1 set expect_out (0, amaiera) 10 set expect_out (0, katea) bbbcabkkkk set expect_out (1, hasiera) 2 set expect_out (1, amaiera) 3 set expect_out (1, katea) bb set expect_out (2, hasiera) 10 set expect_out (2, amaiera) 10 set expect_out (2, katea) k set expect_out (buffer) abbbcabkkkk

eta "a \ n" irteerako bufferrarekin utziko da. "*" (Eta -re ". *" Eredua) irteerako bufferra irentsiko du prozesuan irteerarik irakurri gabe.

Normalean, datorren irteera espero da barne-bufferretatik espero da. Hori gerta daiteke eredu batekin aurrez ezarrita -transferitzen ez denarekin . Bandera hau bereziki erabilgarria da esperimentatzean (eta "-not" -arekin laburtu daiteke erosotasuna esperimentatzean).

Irteera bateratuarekin (edo eof edo full_buffer) lotutako spawn id espero_out (spawn_id) gordetzen da.

The -timeout flag- ek ez du oraingo komandorik eragiten balio hau denbora-muga gisa erabiltzeko denbora-muga aldagaiaren balioa erabili beharrean.

Lehenespenez, ereduak uneko prozesutik irteerarekin bateragarriak dira, hala ere, -i flagrek irteera adierazten du spawn_id zerrendatik datorren hurrengo ereduekin (next -i arte ). The spawn_id list edo spawn_ids zerrenda zuriunez bereizitako zerrenda bat edo spawn_ids zerrenda horren antzekoa den aldagai bat izan behar du.

Esate baterako, hurrengo adibidea itxaroten "procured" izeneko "konektatutako" uneko prozesutik, edo "lanpetuta", "huts" edo "pasahitz baliogabea" itxita dagoen spawn_id-etik.

espero {-i $ proc2 lanpetuta {okupatuta dago \ n; exp_continue} -re "huts egin du | baliogabeko pasahitza" abortatu denbora-muga abortatu konektatuta}

Any_spawn_id aldagai globalaren balioa erabili ahal izango da ereduekin bat etorriko diren beste ii-izar guztiekin izendatzen diren spawn_ids edozein unetan espero den komandoa. Ez-eranskinik gabeko bandera (hau da, beste batek -i jarraitzen dio) spawn_id -ek beste edozein eredu erabil daiteke edozein_spawn_id- ekin lotutako komando esperantzarekin.

Bandera -i ere aldagai global bat ere deitu daiteke, kasu horretan aldagaia idazteko abiapuntutzat idazteko zerrenda batentzat. Aldagaia berritzen da aldatu egiten den bakoitzean. Honek I / O iturria aldatzeko modu bat eskaintzen du komandoak exekutatzen ari den bitartean. Horrela, spawn ids "indirect" spawn ids deitzen zaie.

Hausnarketak, hala nola, haustea eta kausa jarraitzeko kontrol egiturak (hau da, for , proc ) ohiko moduan jokatzen dute. Komandoak exp_continue jarraitzen du exekutatzen jarraitzeko baizik eta itzultzea normalean bezala.

Hau erabilgarria da begiztak esplizituak edo errepikatutako itxaropen adierazpenak saihesteko. Hurrengo adibidea zati bat da rlogin automatizatzeko. Kontu hau ez da bigarren itxarote- adierazpena idatzi beharrik izango (berriro galdetu nahi baduzu) rlogin pasahitza eskatzen badu.

espero (Pasahitza: {stty -echo send_user "pasahitza ($ user) $ host-en:" expect_user -re "(. *) \ n" send_user "\ n" bidali "$ expect_out (1, katea) \ r" stty echo exp_continue} invalid {send_user} invalid password or account \ n "exit} timeout {send_user" connection to $ host out timed out \ n "exit} eof {send_user \" connection to host failed: $ expect_out (buffer) "exit} - re $ prompt}

Adibidez, ondorengo zatiak lagungarri izan daitezke erabiltzaileak automatikoki automatizatutako dagoeneko elkarreragin bat. Kasu honetan, terminal moduko moduan jarriko da. Erabiltzaileak "+" sakatzen badu, aldagai bat handituko da. "P" sakatzen bada, itzulera batzuk prozesura bidaltzen dira, agian nolabait esateko, eta "i" erabiltzaileari prozesuarekin elkarrekintzan uzteko aukera ematen du, scriptaren kontroletik eraginkortasunez ezabatuz. Kasu bakoitzean, exp_continue- k uneko ekintzak exekutatzen dituen eredua jarraitzeko aukera ematen du gaur egungo itxaropenak .

stty raw -echo espero_after {-i $ user_spawn_id "p" {bidali "\ r \ r \ r"; exp_continue} "+" {incr foo; exp_continue} "i" {elkarreragin; exp_continue} "irten" irteera

Lehenespenez, exp_continue denbora-tenporizadorea berrezartzen du. Tenporizadorea ez da berrabiarazten, baldin eta exp_continue deitzen bada -continue_timer flag-rekin.

expect_after [expect_args]
espero denaren arabera lan egiten du, aurrez espero denaren arabera, itxaropenaren eta itxaropenaren ereduak bat datozela, esperantza eredua erabiltzen da. Ikus espero_before komandoa informazio gehiago lortzeko.

espero_background [espero_args]
espero bezain argudioak hartzen ditu, baina berehala itzuliko da. Ereduak probatu egiten dira sarrera berriak iristen direnean. Ereduaren denbora-muga eta lehenetsia itxaropenez itxaroten dira eta baztertu egiten dira. Bestela, expect_background komandoa espero baino lehenago espero da eta itxaron espero bezala.

Noiz espero_background ekintzak ebaluatzen ari direnean, atzeko planoko prozesatzeak idazketa bereko id-a blokeatu egiten du. Atzeko planoko prozesua desblokeatzen da ekintza burutzen denean. Atzeko planoko prozesua blokeatuta dagoen bitartean, posible da (lehen planoan) itxaropena berregin id id-ean.

Ezinezkoa da espero bat exekutatzea espero_background unblocked bitartean. espero_background espezifikoaren abio espezifiko bat ezabatu egingo da, espero_background berria adieraziz spawn id idazketa berarekin. Patronatuarekin espero_background-a deklaratuz, emandako spawn ida atzeko planoan dauden ereduekin bat datorrenean kentzen du.

espero_behera [espero_argak]
espero bezain argudioak hartzen ditu, baina berehala itzuliko da. Patroi-ekintza bikoteak berrienak diren azken esperimentuetatik_berritze berberaren id-ekin inplizituki gehitzen zaizkie hurrengo komando batzuei. Eredua bat datozenean, itxaropen komandoan zehaztutako balitz bezala tratatuko da eta elkartutako gorputza esperoaren komandoaren testuinguruan exekutatuko da. Aurretik espero eta aurreikusitako esperoaren ereduak datozela espero baino lehen, espero da.

Patroia zehazten ez bada, spawn id ez da inongo markarik hautatuta.

Bandera bat -i ezeztatu ezean, espero baino lehen, espero ziren aurrizki komandoa exekutatu zenean (ez eredua bat datorrenean).

The -info bandera eragiten du espero aurretik_ patroiak nola lotuko dituen zehaztapenak itzultzeko. Lehenespenez, uneko spawn id idazten du. Opari aukerako idazkeraren zehaztapena eman daiteke spawn id buruzko informazioa lortzeko. Adibidez

espero_before -info -i $ proc

Gehienetan spawn id zehaztapena eman daiteke. Bandera-indizeek zeharkako zehaztapenetatik soilik datozen zuzeneko abiarazlearen osagaiak kendu egiten dituzte.

Horren ordez spawn id zehaztapenean, bandera "-all" "-info" eragingo du spawn id-en berri emateko.

Bukaerako bandera-ren irteera espero daitekeen argumentu gisa erabil daiteke.

espero_tty [expect_args]
Esperientzia bezalakoa da baina / dev / tty karaktereak irakurtzen ditu (hau da, erabiltzailearen teklak). Lehenespenez, irakurketa modu egosian egiten da. Horrela, lerroek bueltan amaitu behar dute , horiek ikusteko zain. Hau stty bidez aldatu daiteke (ikus beheko stty komandoa).

espero_user [espero_argak]
Esperientzia bezalakoa da baina stdin karaktereak irakurtzen ditu (hau da, erabiltzailearen teklak). Lehenespenez, irakurketa modu egosian egiten da. Horrela, lerroek bueltan amaitu behar dute , horiek ikusteko zain. Hau stty bidez aldatu daiteke (ikus beheko stty komandoa).

fork
prozesu berri bat sortzen du. Prozesu berriaren itxarote prozesuaren kopia zehatza da. Arrakastaz, sardexkak 0 (haurraren) prozesura itzultzen du eta prozesuaren ID prozesua guraso prozesura itzultzen du. Porrota (beti ere baliabide faltak, adibidez, trukatzeko espazioa, memoria), oreka -1 itzultzen du guraso- prozesura , eta ez da haurraren prozesua sortzen.

Forked prozesuak irteera komandoaren bidez irteten dira , jatorrizko prozesua bezala . Forked prozesuak onartzen dira egunkari fitxategietan idazteko. Desgaitzea arazoren bat edo prozesu gehienetan saioa ez baduzu, emaitza nahasgarria izan daiteke.

Pty aplikazio batzuk hainbat irakurle eta idazle nahastu ditzakete, une batez ere. Horrela, prozesua abiarazi baino lehenago seguruena da.

elkarreragin [string1 body1] ... [stringn [bodyn]]
Uneko prozesua erabiltzaileari kontrolatzen du, beraz, tekla sakatzea uneko prozesura bidaltzen da eta uneko prozesuaren stdout eta stderr itzuliko dira.

Koadro-gorputz bikoteak argudio gisa zehaztu daitezke, kasu horretan gorputza exekutatzen denean dagokion katea sartzen denean. (Lehenespenez, katea ez da uneko prozesura bidaltzen.) Interpretearen komandoa bere gain hartzen da, azken gorputza falta bada.

Elkarreragin elkarrekintzaren argumentuek lerro bat baino gehiago behar badituzte, argumentu guztiek "bateragarria" izan liteke, lerro bakoitza barra barra batekin amaitzea ekiditeko. Kasu honetan, ohiko Tcl ordezkapenak gertatzen dira giltza izan arren.

Adibidez, honako komandoa exekutatzen da elkarrekin kate-gorputz bikoteak definitutako elkarreraginean: ^ Z denean sakatzen den, espero da esekita. (The -reset flag-ek terminal moduak berrezartzen ditu.) ^ A sakatzean, erabiltzaileak "kontrolatu A" idatzi du eta prozesua A ^ A bidaltzen du. $ Sakatzen denean, erabiltzaileak data ikusten du. ^ C sakatzen denean, espero irteerak. "Foo" sartzen bada, erabiltzaileak "barra" ikusten du. ~ ~ Sakatzen denean, Expect interpretatzailea interaktiboki doa.

ezarri CTRLZ \ 032 elkarreragin {-reset $ CTRLZ {exec kill -STOP [pid]} \ 001 {send_user \ "kontrol-A idatzi duzu \ n"; bidali "\ 001"} $ {send_user "Data [erloju formatua [segundoko segundoak]] da."} \ 003 irteera foo {send_user "bar"} ~~}

Kate-gorputz bikoteen kasuan, kateak argumentu gisa zerrendatzen diren ordenean bat datoz. Partzialki partekatzen ez diren kateak ez dira uneko prozesura bidaliko gainerakoak datozen aurreikuspenekin. Karaktereak sartzen badira, esate baterako, ezin daiteke segidan loturarik izan, katearen zati bat beste partida baterako ezin daitekeen prozesura bidaliko da. Horrela, parekatze partzialen azpiko azpiko kateak geroago lotuko dira, bat datozen jatorrizko kateak azken finean huts egiten baldin badute.

Lehenespenez, kateak bat datoz zehatza ez da basa-txartelekin . (Aitzitik, itxaropen komandoak modu globalean estilo ereduak erabiltzen ditu lehenetsi gisa.) -ex bandera erabili ahal izango da, beraz, elkarrekintza- banderak horiekin egoteko ereduak babesteko. Edozein eredua "-" batekin hasita egon beharko luke modu honetan. ("-" hasten diren kate guztiak etorkizuneko aukeretarako erreserbatuta daude).

The -re flagrek katea aldatzen du regexp-style eredu gisa interpretatzeko. Kasu honetan, azpimarraren bat datozen aldagaiak elkarreraginean biltzen dira modu berean, itxarondako itxaropenaren azalera itxaropenaren itxaropenean . Indizeen bandera ere onartzen da.

Ereduaren eof fitxategiaren amaieran exekutatzen den ekintza aurkezten du. Epe-eredu bereizi batek ere -outputaren bandera jarraitzen du, kasu horretan bat datorren irteera idazten den bitartean. Efektu lehenetsia "itzulera" da, beraz, elkarreraginean EOF edozeinetan itzultzen da.

Ereduaren denbora- muga denbora- muga (segundotan) eta ekintza bat exekutatzen du denbora jakin batean irakurri gabeko karaktereak irakurri ondoren. Denbora- muga duen eredua gehien zehaztutako prozesuari aplikatzen zaio. Ez dago denbora-muga lehenetsirik. "Denbora-muga" aldagai berezia ( esperoaren komandak erabilitakoa) denbora-muga honetan ez du eraginik.

Esate baterako, hurrengo adierazpena erabil dezakete autologout erabiltzaileek ordurako ezer idatzi ez duten erabiltzaileei, baina maiz sistemako mezuak lortzen dituztenak:

interact-input $ user_spawn_id timeout 3600 return-output \ $ spawn_id

Eredua gako-hitza nulua bada eta nuluak onartzen dira ( remove_nulls komandoaren bidez), dagokion gorputza exekutatzen da ASCII 0 bakarra bat datorrenean. Ez da posible 0 byte bateratzen glob edo regexp ereduen bidez.

Bandera- idazterako eredu bat aurrebistan aldagai interaktiboa eragiten du (spawn_id) spawn_id-ekin eredua (edo eof) bateratuta.

Hausnarketak, hala nola, haustea eta kausa jarraitzeko kontrol egiturak (hau da, for , proc ) ohiko moduan jokatzen dute. Hala ere, itzulera eragiten du bere deitzailearengana itzultzeko, berriz, interakzioak eragiten du elkarreraginean bere deitzailearen itzulera eragiteko . Adibidez, "proc foo" deitzen da elkarreraginean, eta gero ekintza inter_turnea exekutatu, proc foo itzuliko litzateke. (Honek esan nahi du interaktiboak interpreteak interaktiboki idaztean itzultzen badira , elkarrekintza aurrera jarraituko du; berriz, elkarreraginak bere deia itzultzeko eragingo du.)

Elkarreraginean zehar, modu gordinak erabiltzen dira, karaktere guztiak uneko prozesura pasatzeko . Uneko prozesuak laneko kontrolaren seinaleak harrapatzen ez baditu gelditu egingo da geldialdia seinalea (lehenetsia ^ Z). Berrabiarazteko, jarraitu seinale bat (adibidez, "hiltzeko kontua"). Ziur SIGSTOP bat bidali nahi baduzu prozesu horretarako (by ^ Z), kontuan hartu csh leheneratzea lehenik eta gero zure programa exekutatzen. Beste alde batetik, SIGSTOP bat bidali nahi badiozu aurrez aurre, lehen deia interpretatzailea (beharbada ihes-karakterea erabiliz), eta sakatu ^ Z.

String-body bikoteak taupada gisa erabili ahal izango dira interpretean sartu beharrik izan gabe eta komandoak interaktiboki exekutatzeko. Aurreko terminal modua kate-gorputz bikote baten gorputza exekutatzen ari den bitartean erabiltzen da.

Abiadura egiteko, ekintza modu lehenetsian exekutatzeko lehenespenez. The -reset flag-ek berrabiarazten du terminala elkarreraginaren aurretik eraiki zen moduan (beti, egosi moduan). Kontuan izan modua piztuta dagoenean sartu diren karaktereak galdu ditzaketela (sistema batzuen terminal-gidarien zoritxarreko funtzioa). Erabili beharreko arrazoi bakarra -resetatzea zure ekintza modu egosian exekutatzen ari den araberakoa bada.

Echo- ren markak karaktere bakoitza irakurri bezain laster sortutako prozesuarekin datorren karaktere bat bidaltzen du. Honek baliagarria izan daiteke erabiltzaileak partzialki idatzitako ereduen feedbacka ikusteko.

Eredu bat oihartzuna baldin bada, baina azkenean ez dator bat datorrenarekin, karaktereak jatorrizko prozesura bidaltzen dira. Prozesua abiarazteak oihartzuna egiten badu, erabiltzaileak bi aldiz ikusiko ditu. -echo seguruenik egokia ez denean, erabiltzaileak ez du eredua osatzea. Adibidez, honako zatia da: rftp, recursive-ftp script-a, erabiltzaileak gomendatutako ~ g, ~ p, edo ~ l eskuliburua eskuratu ahal izateko, uneko direktorioa errekurtsiboki eskuratzeko edo jartzeko. Hauek ftp komando arruntetatik urrun daude, erabiltzaileari ezezaguna dena ~ zerbait jarraitzen dio, okerrekoa izan ezik, kasu horretan, hala ere, ezingo dute emaitza alde batetara utzi.

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

Noizbehinkako markak ereduarekin bat datozen karaktereak bidaltzen ditu irteerako prozesuan , karaktereak irakurri ahala.

Hau erabilgarria da programa bat egitean atzera egitea ekiditeko. Adibidez, honako hauek erabil daitezke: pertsona batek markatzen duen jarraipena (Hayes estilo modem bat). Aldi bakoitzean "atd" ikusten da gidoiak lerroaren gainerako erregistroak erregistratzen dituena.

proc lognumber {} {interact -nobuffer -re "(. *) \ r" return $ log "[clock formatting [clock seconds]]: markatutako $ interact_out (1, string)"} interact -nobuffer "atd" lognumber

Elkarreraginean zehar, log_user aurreko erabilera baztertu egiten da. Bereziki, elkarreraginek irteera saioa hasiko dute (irteera estandarrerako bidaltzen dute), ustez, erabiltzaileak ez du blindatu nahi.

The -o flag-ek hurrengo gako-gorputz bikoteak ondorengo prozesuaren irteerara aplikatzen ditu. Hau erabilgarria izan daiteke, adibidez, telnet saioan zehar nahigabeko karaktereak bidaltzen dituzten ostalarien aurrean .

Lehenespenez, elkarrekintzan erabiltzaileak stdin idazten eta Expect prozesuaren stdout-en irakurketa espero du. The -u flag ("erabiltzailearentzat") erabiltzaileari bere argumentuarekin izendatutako prozesua (engaiatutako id bat izan behar duenaren) itxura du.

Honek bi loturiko prozesuak elkartu behar ditu esplizituki begizta gabe. Arazketa laguntzeko, Espero diagnostikoak beti stderr (edo logging eta arazketa informazio jakin batzuk lortzeko stdout) joan. Arrazoi beragatik, interpreteen komandoa interaktiboki irakurriko da stdin-tik.

Adibidez, hurrengo zatiak saio-hasiera prozesua sortzen du. Ondoren, erabiltzaileak (ez da agertzen) markatzen du eta, azkenik, bi elkarrekin lotzen ditu. Jakina, saioa hasteko edozein prozesu izan daiteke. Shell batek, adibidez, erabiltzaileak kontu bat eta pasahitza eman gabe lan egitea ahalbidetuko luke.

spawn login set login $ spawn_id spawn tip modem # markatu back to user # connect user to login interact -u $ login

Prozesu anitzetarako irteera bidaltzeko, zerrenda bakoitza idazteko zerrenda bakoitza banatu ezazu, irteera ez-markako. Irteerako abiarazleen idazkei taldeentzako sarrera sarrera- marka ez den prefektura- zerrenda baten arabera zehaztu daiteke. ( Sarrera eta irteera biak itxaroteko komandoa bezalako formatuan zerrendak izan ditzake, baina ez dago inolako iragarkirik esanguratsurik izan ezean.) Ondorengo banderak eta kateak (edo ereduak) sarrera honi aplikatzen zaizkio beste baterako - sarrerako bandera ez da agertzen. Input-a agertzen ez bada, -output-ek "-input $ user_spawn_id -output" esan nahi du. (Era berean, ez daukaten eredurik duten sarrera .) Input bat zehazten bada, $ user_spawn_id gainidazten du. Bigarren sarrera zehazten bada, $ spawn_id gainidazten du. Beste sarrera- banderak zehaztu daitezke.

Input input bi prozesu lehenetsiak $ spawn_id eta $ user_spawn_id (alderantziz) gisa zehaztutako irteerak izan ditzake. Input-agerraldi bat ez badator irteerarik ez badago, prozesuaren karaktereak baztertu egingo dira.

The -i flag-ek uneko spawn_id-aren ordezko bat ordezten du beste sarrera edo irteerako banderak erabiltzen ez direnean. A -i bandera -o bandera bat dakar.

Elkarrekintzan ari diren prozesuak aldatzeko aukera ematen du zeharkako idazkera lokalak erabiliz. (Zuzeneko spawn ids deskribatzen dira esperoaren komandoaren atalean.) Indarrean dauden spawn ids -i, -u, -input edo -output banderak zehaztu daitezke.

interprete [args]
Erabiltzaileari interaktiboki galdetu diezaioke Expect eta Tcl komandoei. Komando bakoitzaren emaitza inprimatuta dago.

Hausnarketak, hala nola, haustea eta kausa jarraitzeko kontrol egiturak (hau da, for , proc ) ohiko moduan jokatzen dute. Hala eta guztiz ere, itzultzaileak interpreteak bere deitzailearengana itzultzen duenean, berriz, interpreteak interpreteak eragiten du itzultzaile batengan . Adibidez, "proc foo" izeneko interprete izeneko interprete bat exekutatu ondoren, proc foo itzuliko litzateke. Beste edozein komandoek interpreteak komando berriei galdetzeko jarraitzen du.

Lehenespenez, gonbita bi zenbaki oso ditu. Lehenengo osokiak ebaluazio-pila baten sakontasuna deskribatzen du (hau da, zenbat aldiz Tcl_Eval deitzen zaio). Bigarren osokoa Tcl historia identifikatzailea da. Galdetegia "prompt1" izeneko prozedura bat definitzen da, zeinen itzulera-balioa hurrengo gonbita bihurtzen baita. Adierazpenek komatxo irekiak, parentesiak, giltzak edo parentesiak badituzte, bigarren mailako galdeketa (lehenespenez "+>") berriagoa izango da. Bigarren mailako galdeketa "prompt2" izeneko prozedura bat definitzeko ezarri daiteke.

Interpretean zehar, egosi moduan erabiltzen da, nahiz eta bere deitzaileak modu gordinik erabili.

Estinoa itxita badago, interpretatzailea itzuliko da, ez bada, bandera erabiliko den kasuetan, ondorengo argumentua deitzen denean.

log_file [args] [[-a] fitxategia]
Fitxategi-izena ematen bada, log_file- k saioaren transkripzioa (puntu horretatik hasita) fitxategi batean grabatu egingo du. log_file geldituko da grabatzen ez bada argumenturik ematen. Aurreko egunkari fitxategia itxita dago.

Fitxategi-izenaren ordez, Tcl fitxategi identifikatzaile bat -open edo -leaveopen banderak erabiliz eman daiteke. Hau da spawn komandoa antzekoa. (Ikusi informazio gehiago lortzeko spawn .)

Irteera bat -a bandera log_user komandoa ezabatua izan den saioa indartzen du.

Lehenespenez, log_file komandoa fitxategi zaharragoetara atxikitzen da, haiek trunkatuz gero, saio batean saioa hasteko eta saio batean aldi baterako desaktibatzeko. Fitxategiak trunkatzeko, erabili -noappend-en bandera.

The -info flag-ek log_file eragiten du emandako azken informazioaren argumentu berrien deskribapena itzultzeko.

log_user -info | 0 | 1
Lehenespenez, bidali / espero elkarrizketa stdout (eta erregistro-fitxategia irekita badago) sartzen da. Logging to stdout "log_user 0" komandoaren bidez desgaituta dago eta "log_user 1" berriro ezarri. Log fitxategian erregistratuta ez dago aldatuta.

The -info markak log_user eragiten du ezarritako informazio ez-berrien argumentuen deskribapen bat itzultzeko.

match_max [-d] [-i spawn_id] [size]
buffer-en tamaina (byte) erabilitako barrutik definitzen du. Tamaina argumenturik gabe, uneko tamaina itzuliko da.

Bandera -d , tamaina lehenetsia ezarrita dago. (Lehenetsitakoa 2000. urtekoa da). -I markarekin batera, tamaina konfiguratzeko idazteko baimenarekin ezartzen da, bestela uneko prozesurako konfiguratuta dago.

overlay [- # spawn_id] [- # spawn_id] [...] program [args]
"programa args" exekutatzen du oraingo Expect programaren lekuan, eta horrek bukatzen du. Zabalkundeko argumentu zuriak komando izenaren aurreko marratxoa indartzen du saioa hasteko shell gisa. Guztiak spawn_ids itxita daude argumentu gisa izendatutakoak izan ezik. Hauek identifikatutako fitxategi identifikatzaileetan mapatzen dira.

Spawn_ids fitxategi-identifikadoreei mapatzen zaie heredatzeko programa berrira. Esate baterako, lerro hau xakean exekutatzen da eta uneko prozesuak kontrolatzen uzten du, esate baterako, xake maisua.

overlay -0 $ spawn_id -1 $ spawn_id -2 $ spawn_id xake

Hau "interact -u" baino eraginkorragoa da, ordea, aurreikusitako elkarreraginaren gaitasuna sakrifikatzen du, espero den prozesua kontrolik ez dagoenez geroztik.

Kontuan izan terminalaren kontrolik ez dagoela. Horrela, konexio estandarra deskonektatzeko edo birkargatzeko gero, lan kontrola egiten duten programak (maskorrak, saioak, eta abar) ez dira behar bezala funtzionatuko.

parity [-d] [-i spawn_id] [value]
parekotasuna mantendu edo desagerrarazi behar den prozesu abiaraziaren irteeratik definitzen du. Balioa zero bada, parekotasuna desagertu egingo da, bestela ez da desagertuko. Balio argumentu gabe, uneko balioa itzultzen da.

Bandera -d , parekotasun-balio lehenetsia ezarrita dago. (Hasierako xedea 1ekoa da, hau da, parekotasuna ez da desagertuta.) -i markarekin batera, parekotasun-balioa zehaztutako idazkaritzan ezarrita dago, bestela uneko prozesurako konfiguratuta dago.

remove_nulls [-d] [-i spawn_id] [value]
definitzen diren nulls mantentzen edo kendu prozesu abiarazlearen irteera prozesua matching edo storage variable expect_out edo interact_out baino lehen gorde aurretik. Balioa 1 bada, nullak kendu egingo dira. Balioa 0 bada, nullak ez dira kenduko. Balio argumentu gabe, uneko balioa itzultzen da.

Bandera -d- rekin, balio lehenetsia ezarri da. (Hasierako default 1a da, hau da, nuluak ezabatu egiten dira.) -i markarekin, balioa ezarri da spawn id izenez, bestela uneko prozesurako konfiguratuta dago.

Nuluak kenduko diren ala ez adierazten du, Egia esan, byte nukleoak erregistratu egingo ditu log-a eta stdout-era.

bidali [-flags] katea
Uneko prozesurako katea bidaltzen du . Adibidez, komandoa

bidali "kaixo mundua \ r"

karaktereak helloworld bidaltzen ditu uneko prozesura . (Tclek printf- like komandoa ( formatua deitzen duena ) kate arbitrarioki konplexuak eraiki ditzakete.)

Karaktereak bidaltzen dira berehala, lineaz kanpoko bufferrarekin egindako programek ez dute karaktereak irakurriko, itzulera-karaktere bat bidali arte. Itzulerako pertsonaia "\ r" da.

Banderak badirudi hurrengo argumentua kate gisa interpretatu beharrean bandera bat dela. Edozein kate "-" aurretik daiteke bandera bat itxuraz ala ez. Honek aldibereko kateak zehazteko mekanismo fidagarria eskaintzen du, ustekabean banderen itxura dutenen artean. ("-" hasten diren kate guztiak etorkizuneko aukeretarako erreserbatuta daude).

Bandera -i adierazten du katea bidali zaionean spawn_id izenarekin. Spawn_id user_spawn_id bada eta terminala modu gordinean dago, katean lerro berriak itzuli-newline sekuentzietara itzultzen dira, terminalak modu egosian moduan agertu balitz bezala. The -raw flag-ek itzulpen hau desgaitzen du.

The -null flag-ek ez du null karaktere (0 byte) bidaltzen. Lehenespenez, nulua bidaliko da. Zenbaki oso batek jarrai dezake -null bidalitako nuluak zein diren adierazteko.

Break markak etenaldiaren egoera sortzen du. Honek zentzua du spawn id-ek "spawn-open" bidez ireki den tty gailu bati egiten badio. Tip bezalako prozesu bat abiarazi baduzu, punta-puntako aholku bat erabili beharko zenuke atsedena sortzeko.

Bandera honek "irteera" bidaltzen du irteera, eta, beraz, ordenagailu batek kanpoko buffer bat ez litzateke inoiz entxufatzen duen buffer bat sortuko duen egoera arrunta saihestuko du. Irteera hau "send_slow" aldagaiaren balioak kontrolatzen du eta bi elementuen zerrenda bat hartzen du. Lehenengo elementua atomikoki bidaltzeko byte kopurua deskribatzen duen zenbaki oso bat da. Bigarren elementua zenbaki atomikoa bidaltzen duen segundo kopurua azaltzen duen zenbaki erreala da. Esate baterako, "set_slow {10 .001}" ezarri "send -s" indarra "1 milisegundotan" kateak bidaltzeko 10 karaktere bidalitako bakoitzean behartuko lituzke.

Bandera -h-ek irteera bidaltzen du (zertxobait), benetan idazten ari den bezala. Giza itxurako atzerapenak karaktereen artean agertzen dira. (The algoritmoa Weibull banaketa baten gainean oinarritzen da, aplikazioa bereziki egokitzeko modificaciones.) Irteera hau "send_human" aldagaien balioak kontrolatzen du eta horrek bost elementuen zerrenda bat hartzen du. Lehenengo bi elementuek sekzioko karaktereen arteko denborazko batezbestekoa izaten dute. Lehenengoa lehenespenez erabiltzen da. Bigarrena amaierako hitzetan erabiltzen da, noizean behin trantsizio horietan gertatzen diren pausoak sotilki simulatzeko. Hirugarren parametroa aldagaien neurri bat da .1. Nahiko aldakorra da, 1 arrazoiz aldagaia da eta 10 oso aldakorra da. Muturrak 0 arte infinitua dira. Azken bi parametroak, hurrenez hurren, gutxieneko eta gehieneko interaktiboak dira. Gutxieneko eta gehieneko azken irudiak azken "clip" gisa erabiltzen dira. Azken batez bestekoa batez bestekoa baino askoz ere txikiagoa izan daiteke gutxieneko eta gehieneko kantitatea nahikoa balitz.

Adibide gisa, hurrengo komandoa idazle azkarra eta koherentea emulatzen du:

set send_human {.1 .3 1 .05 2} bidali -h "Gose naiz. Bazkaldu dezagun".

hurrengo hauek erreskatatu ondoren egokiagoak izan litezke:

set send_human {.4 .4 .2 .5 100} bidali -h "Goodd party lash night!"

Kontuan izan erroreak ez direla simulatuak, erroreen zuzenketa egoerak konfiguratu ditzakezu akatsak eta zuzenketak kapsulatuz bidalketa argumentu batean.

Karaktere nuluak bidaltzeko banderak, jauziak bidaltzeko, irteera motela eta giza irteera behartuz behartuz elkarren artean esklusiboak dira. Azken zehaztutakoa bakarrik erabiliko da. Gainera, ez da kate argumenturik zehaztu banderak karaktere null edo hausturak bidaltzeko.

Ideia ona da aurreikuspenen arabera lehenengo bidaltzeko prozesu baten aurretik. Espero itxaron prozesua abiaraztea, bidali ezin baduzu. Bereziki, lehen bidalketa prozesua martxan dagoenean bukatzen bada, zure datuak ez ikusi egingo zaizkio arriskua. Programa interaktiboek ez dute hasierako galderarik eskaintzen ez duten egoeretan, atzerapen bat bidali aurretik:

# Hackerrak nola apurtu egin daitezkeen aholkuak ekiditeko, # sistema honek ez du kanpoko pasahitza eskatuko. # Itxaron 5 segundo exekutatzeko spawn telnet osatzeko oso.secure.gov lo 5 bidali pasahitza \ r

exp_send bidalitako ezizena da . Expectk edo Tk ingurunean espero den beste aldaera bat erabiltzen ari bazara, bidali Tk-ek zehaztutako helburu oso baterako. exp_send inguruneen arteko bateragarritasunerako eskaintzen da. Antzeko asmoak beste Expect-en bidalketako beste agindu batzuetarako ematen dira.

send_error [-flags] katea
bidaltzea bezalakoa da, irteera stderr-ra bidaltzen ez bada, uneko prozesua baino.

send_log [-] katea
bidali bezalakoa da, katea log fitxategira bidaltzen ez bada (ikus log_file ). Argumentuak ez dira kontuan hartuko log fitxategia irekita ez badago.

send_tty [-flags] katea
bidali bezalakoa da, irteera / dev / tty- ra bidalia izan ezik egungo prozesua baino.

send_user [-flags] katea
bidaltzea bezalakoa da, irteera stdoutera bidaltzen ez bada, uneko prozesua baino.

lo segundo
script-ak segundo kopuru jakin baterako lo egiten du. Bigarrenak zenbaki hamartar bat izan daiteke. Interrupzioak (eta Tk gertaerak Expectk erabiltzen ari bazara) itxarongo den bitartean prozesatzen dira.

spawn [args] programa [args]
"programa args" exekutatzen ari den prozesu berri bat sortzen du. Bere stdin, stdout eta stderr konektaturik daude Expect-ekin, beste Expect agindu batzuei irakur eta idatz ditzaten. Konexioa hautsiz apurtzen da edo prozesuak berak fitxategi-identifikadore batzuk ixten baditu.

Prozesua abiaraztean hasten denean , spawn_id aldagaiak prozesu horri erreferentzia egiten dion deskriptore batera ezarriko da. Spawn_id- ek deskribatutako prozesua jotzen da "uneko prozesua ". spawn_id irakurri edo idatz daiteke, indarrean dagoen lan kontrola eskainiz.

user_spawn_id erabiltzaileak aipatzen duen deskriptorea duen aldagai globala da. Adibidez, spawn_id balio honetara ezarrita dagoenean, espero espero_user bezala jokatzen du.

.I error_spawn_id errore estandarrari dagokion deskribatzailea duen aldagai global bat da. Adibidez, spawn_id balio honetara ezarrita dagoenean, bidaltzen bidali send_error bezala.

tty_spawn_id / dev / tty aipatzen duen deskribatzailea duen aldagai global bat da. / Dev / tty ez badago (adibidez, cron, at edo batch script-en), orduan tty_spawn_id ez dago definituta. Hau probatu daiteke:

{{info vars tty_spawn_id]} {# / dev / tty existitzen bada} bestela {# / dev / tty ez dago # ziurrenik cron, batch edo script-en}

martxan UNIX prozesuaren IDa itzultzen du. Prozesua sortzen ez bada, 0 itzuliko da. Aldagaia spawn_out (esklaboa, izena) pty esklabuentzako gailuaren izena da.

Lehenespenez, komandoaren izena eta argumentuak oihartzuna sortzen du. The -noecho flag gelditzen da hau sortzeko.

The -console flag- ek ez du kontsola irteerara abiaraziko den prozesura birbideratuko. Sistema hori ez da onartzen.

Barnean, spawnek pty bat erabiltzen du, erabiltzailearen TTY modua hasieratzen du. Hau hasieratzen da, beraz, ezarpen guztiak "osasungarriak" direla (stty (1) arabera). Aldakorra stty_init definituta badago, argumentu estuen estiloan interpretatuko da konfigurazio gehiago bezala. Adibidez, "stty_init raw" ezarriko da prozesu abiarazleen terminal gehiago sor ditzan gordinik moduan hasteko. -nottycopy erabiltzaileak tty-en oinarritutako hasieratzea galarazten du. -nottyinit "sane" hasieraketa gainditzen du.

Normalean, spawn- ek denbora gutxi exekutatzen du. Nabarmendu nabarituko baduzu denbora kopuru handia hartuta, seguruenik wedged ptys aurkituko dituzu. Hainbat probak ptys-ean exekutatzen dira prozesu ezegonkorretan ingestak saihesteko. (Hauek hartzen dituzte 10 segundoko pty bakoitzeko wedged.) Exekutatzen Expect- d- rekin batera agertuko da Ptys askok estatu bakoitietan aurkitzen badute. Ptys horiek atxikitako prozesuak hiltzeko ezin baduzu, zure berreskurapena berrabiarazi egin daiteke.

Programa ezin da abiarazi behar bezala exec (2) huts egiten badu (adibidez, programa ez dago) exekutatzen bada, errorearen mezua hurrengo elkarrekintzan edo itxarongo komandoa itzuliko da programa exekutatzen bada eta errore mezua irteera bezala sortu bada. Portaera hori abiapuntua gauzatzeko ondorio naturala da. Barruan, laburtu esekitokiak, eta ondoren, prozesu abiarazleak ez du inolako itxurarik jatorrizko itxurarekin komunikatzeko, spawn_id bidez komunikazioa izan ezik.

The -open flag-ek hurrengo argumentua Tcl fitxategi identifikatzaile gisa interpretatu egiten du (hau da, irekita itzulita.) Spawn id-a ondoren abiarazitako prozesu bat balitz bezala erabil daiteke. (Fitxategi identifikatzailea ez da gehiago erabiliko.) Honek gailu gordinak, fitxategiak eta hodiak tratatzeko aukera emango dizu pty bat erabili gabe. 0 itzuliko da lotutako prozesua ez dagoela adierazteko. Jatorria duen prozesurako konexioa itxita dagoenean, Tcl fitxategi identifikatzailea da. The -leaveopen bandera antzekoa da -open -leaveopen- ek fitxategiaren identifikatzaileak irekita egotea eragiten du, nahiz eta spawn id itxia itxita dagoen.

Hutsik dagoen bandera pty bat irekitzen du, baina ez da prozesua sortzen. 0 itzuliko da lotutako prozesua ez dagoela adierazteko. Spawn_id ohikoa den bezala ezarri da.

Aldagaia spawn_out (esklabo, fd) pty esklaboari dagozkion fitxategi identifikatzaile batera ezarriko da. Itxi daiteke "itxi-esfera" erabiliz.

The -ignore flag-ek ezarritako kasuetan seinale bat adierazten du abiarazitako prozesuan . Bestela, seinaleak portaera lehenetsia lortzen dute. Seinaleak traparen komandoan izendatzen dira, seinale bakoitzak bereizitako bandera bat eskatzen ez bada behintzat.

maila estra
exekuzioan aurretik inprimatutako adierazpenak eragiten ditu. (Tcl-en aztarna komandoak aztarnak aldagaiak dira.) Maila adierazten du zein neurritan azaltzen den dei-pila. Adibidez, komando hau exekutatzen da Expect , lehenengo 4 deien mailak jarraituz, baina ez beste horrenbeste.

espero -c "strace 4" script.exp

The -info markak ez du eraginik ematen ez diren azken informazioaren argumentuen deskribapen bat itzultzeko.

sts args
Kanpoko estandar komandoaren antzeko terminal moduak aldatzen ditu.

Lehenespenez, kontrolatzeko terminala atzitu da. Beste terminal batzuetara sartu ahal izango dira, "Eskaerak egoera itzultzeko komandoaren emaitza gisa. Egoera ez bada eskatuko da eta kontrol-terminala atzitu egingo da, lehengaien eta oihartzunaren atributuaren aurreko egoera berriro itzuliko dira komandoa erabilia.

Esate baterako, argumentuak raw edo -cooked jarri terminal moduko gordin gisa. Argumentuak -guztuta edo egosita jarri terminal moduan egosi moduan. Argumentuak echo eta -chocho jarri terminala echo eta noecho modua hurrenez hurren.

Hurrengo adibidean, behin eta berriz, oharkabean desgaitu egiten da. Hau script automatikoki automatikoki erabil daiteke, pasahitzak kapsulatzea saihesteko. (Ikusi beheko EXPECT HINTS azpian eztabaida gehiago.)

stty -echo send_user "Pasahitza:" expect_user -re "(. *) \ n" set password $ expect_out (1, katea) stty echo

sistema args
Args (1) args ematen du sarrera gisa, balitz bezala komando gisa idatzitako terminal batetik. Espero itxaron shella amaitu arte. Sh-ren bueltan egoera modu berean maneiatzen du exekutuak bere bueltan egoera kudeatzen duela.

Exekuz duten stdin eta birbidalketak script-ean stdout kontrastean, sistemak ez du birbideraketarik egiten (katea berak adierazten duenaren gainetik ez). Horrela, / dev / tty zuzenean hitz egin behar duten programak erabil daitezke. Arrazoi beragatik, sistemaren emaitzak ez dira erregistroan grabatu.

timestamp [args]
timestamp bat itzultzen du. Argumenturik gabe, epeak igarotako segundo kopurua itzultzen da.

Formatuaren bandera itzultzen den kate bat aurkezten du, baina POSIX arauei jarraiki egindako aldaketak daude. Adibidez% a ordeztuko da asteburuko izen laburrean (hau da, Sat). Beste batzuk hauek dira:

% a asteko egunaren izen laburtua% A Asteko egunaren izen osoa% b Hilabeteko izen abizena% B Hilabete osoa izena% c data-ordua hemen: Wed Oct 6 11:45:56 1993% d Hilabetearen eguna (% 01-31 H ordura (00-23)% I ordu (01-12)% j egun (001-366)% m hilabetea (01-12)% M minutuko (00-59)% p am edo pm% S segundo (00-61) % u astean (1-7, astelehena asteko lehen egunean)% U astean (00-53, lehenengo igandea astean lehenengo egunean da)% V astea (01-53, ISO 8601 estilo)% w eguna (0- 6)% W aste (00-53, lehen astelehena astean lehenengo egunean da)% x data-ordua bezala: Wed Oct 6 1993% X denbora gisa: 23:59:59% y urtea (00-99) % Y urtean bezala: 1993% Z zonaldekoa (edo ezer ez bada zehazgabeak) ehuneko ehuneko ehuneko hutsa

Beste zehaztapen batzuk ez daude zehaztuta. Beste karaktere batzuk ukitu gabe igaroko dira. C locale bakarrik onartzen da.

Bigarren zutabean ez da formatuan iturri gisa erabiltzen den denboratik segundo batzuk sartuko. Bestela, uneko ordua erabiltzen da.

The -gmt flag- ek ez du denboraz kanpoko irteerarik erabiltzen GMT ordu-zona erabiltzeko. Bandera gabe, tokiko ordu-zona erabiltzen da.

trap [[komandoa] seinaleak]
Emandako agindua etorkizunean ematen diren emandako edozein seinale jasotzen denean eragingo du. Komandoa esparru orokorrean exekutatzen da. Komandoa falta bada, seinalearen ekintzak itzuli egingo dira. Komandoak SIG_IGN katea badauka, seinaleak ez dira kontuan hartuko. Komandoa SIG_DFL katea bada, seinaleak sistemaren lehenetsitako emaitza dira. Seinaleak seinale bakarra edo seinale zerrenda bat da. Seinaleak seinalearen arabera (3) zenbakizko edo sinbolikoki zehaztu daitezke. "SIG" aurrizkiaren ezarpena alda daiteke.

Argumenturik gabe (edo argumentua-kopurua), tranpa exekutatzen ari den traparen seinalearen zenbakia itzultzen du.

The -code markak komandoa itzultzeko kodea erabiltzen du, Tcl kodearen edozein tokitan jatorriz exekutatzen hasi zenean itzultzeko.

Interp hizkuntzak komandoa ebaluatu egiten du interpretatzailea aktibatuta, komandoa martxan jarri zenean tranpa deklaratu zenean baino.

The -name flagrek trap komandoa exekutatzen ari den tranpa komandoko seinalearen izena itzultzen du.

Máx-aren markak trap komandoa ezartzen du seinale kopuru handiena itzultzeko.

Adibidez, "trap {send_user" Ouch! "} SIGINT komandoa" Ouch! "Inprimatuko du! Erabiltzaile bakoitzak ^ C sakatzen den bakoitzean.

Lehenespenez, SIGINT (normalean C ^ sakatzean) sortutako eta SIGTERM eragiten du itxarotea irteten. Hau hurrengo tranpa dela eta, lehenespenez sortzen da espero denean hasten denean.

trap exit {SIGINT SIGTERM}

D-aren bandera erabiltzen baduzu araztailea abiarazteko, SIGINT berriro definitzen da arazketa interaktiboa hasteko. Ondorengo tranpa dela eta:

trap {exp_debug 1} SIGINT

Debugger tranpa aldatu egin daiteke EXPECT_DEBUG_INIT inguruneko aldagaia ezartzeko trapa komando berri batera.

Orokorrean, gainidatzi ditzakezu bi trap komandoak script-ean gehituz. Bereziki, zure "tranpa irten" SIGINT baduzu, araztailearen tranpak gainidatziko du. Hau erabilgarria da arazoen araztea saihesteko erabiltzaileak saihesteko.

Zure tranpa SIGINTetan definitu nahi baduzu, arazoren bat ere arakatzen ari da exekutatzen ari denean, erabili:

{! [exp_debug]} {trap mystuff SIGINT} bada

Bestela, araztailea beste seinale baten bidez alden dezakezu.

tranpa ez dizu SIGALRMrako ekintza gainidatzi, hau da, barrualdetik espero den bezala . Deskonektatu komandoak SIGALRM SIG_IGN (ignore) ezartzen ditu. Honen bidez errepikatu ahal izango duzu desgaitzen duzunean ondorengo abiarazte komandoetan.

Ikusi seinalea (3) informazio gehiago lortzeko.

itxaron [args]
atzerapenak prozesu abiarazi arte (edo uneko prozesua izenik ez badago) amaituko da.

itxaron normalean lau zenbaki osoen zerrenda itzultzen du. Lehenengo zenbaki osoa itxaroten zegoen prozesuaren pid da. Bigarren osokoa dagokien spawn id da. Hirugarren zenbaki osoa -1 bada, sistema eragilearen errorea gertatu da, edo bestela 0. Hirugarren zenbaki osoa 0 izanik, laugarren osoko zenbakia sortutako prozesuaren arabera itzuliko da. Hirugarren zenbaki osoa -1 izanik, laugarren osoko zenbakia sistemaren errno ezarpena da. Akats errorCode globala ere ezarri da.

Elementu osagarriak itxarote bueltan balioaren amaieran ager daitezke. Aukerazko bosgarren elementu batek informazio-mota bat identifikatzen du. Une honetan, elementu honen balio posible bakarra CHILDKILLED da; kasu horretan, hurrengo bi balioak C estiloaren seinalearen izena eta laburpen testu laburra dira.

Bandera -i adierazten du prozesua dagokion spawn_id (EZ prozesuaren IDa) dagokion itxaroteko. SIGCHLD kudeatzaile baten barruan, spawn id-1 erabiliz, abiarazitako prozesua itxaron dezakezu.

The -nowait flag itxarote itxaropen arrakastaren adierazlea berehala itzultzeko eragiten du. Prozesua irteten denean (geroago), automatikoki desagertu egingo da itxarote esplizitua behar gabe.

Itxaroten komandoa ere erabil daiteke itxaron forked prozesua argumentuak erabiliz "-i -1" erabiliz. Prozesu abiarazteekin erabiltzeari dagokionez, komando hau edozein unetan exekutatu daiteke. Ez dago kontrolik prozesua berreskuratzeko. Hala ere, itzultze-balioa prozesuaren id-ean egiazta daiteke.

LIBURUTEGIAK

Espero automatikoki ezagutzen dituzun script-ei buruzko bi liburutegi dakartza. Aldagaiak exp_library eta exp_exec_library aldagaietan izendatutako direktorioak zehazten dira. Bi scriptek erabil ditzaketen erabilgarritasun fitxategiak eduki behar dituzte.

exp_library fitxategiak arkitektura independenteak ditu. exp_exec_library arkitektura menpeko fitxategiak ditu. Zure sistemaren arabera, bi direktorioak erabat hutsik egon daitezke. $ Exp_exec_library / cat-buffers fitxategiaren existentzia deskribatzen du / bin / cat bufferrak lehenespenez.

PRETTY-inprimatzeko

Vgrind definizioa eskuragarri dago polita inprimatzeko Espero diren gidoiak. Expect banaketarekin hornitutako vgrind definizioa ongi instalatuta dagoela onartu behar da, honela erabil dezakezu:

vgrind-begiratze fitxategia

EXAMPLES

Askok ez dute agerian jartzen gizakiak deskribatzen duen guztia. Irakurketa eta probatu espero dut Expect banaketako adibideen direktorioan. Zenbait horietako benetako programak dira. Beste batzuk teknika zehatzak ilustratzen dira, eta, jakina, pare bat hack azkarrak besterik ez dira. INSTALL fitxategiak programen ikuspegi orokorra du.

The Expect papers (ikus ESKAINTZAK) ere baliagarriak dira. Askotariko batzuek espero ohi duten aurreko bertsioei dagozkien sintaxia erabiltzen duten bitartean, eranskinetako eranskinak oraindik ere baliozkoak dira eta gizon orri hau baino xehetasun handiagoz sartu.

ohar

Hedapenek Expect-en komandoen izenak kolpatu ditzakete. Esate baterako, bidal ezazu Tkek helburu oso desberdina du. Hori dela eta, espero diren komando gehienak "exp_XXXX" gisa ere eskuragarri daude. "Exp", "inter", "spawn" eta "timeout" -ekin hasitako komandoak eta aldagaiak ez dituzte aliasak. Erabili komando izen hedatuak inguruneen arteko bateragarritasun hau behar baduzu.

Espero dutela ikuspegiaren ikuspegi liberala baizik. Batez ere, Espect programa espezifikoaren arabera komandoak irakurri dituzten aldagaiak tokiko esparrutik bilatzen dira lehenik, eta ez bada aurkitu, mundu mailan. Esate baterako, hau "denbora-muga global" ezarri beharra dauka erabiltzen dituen prozedura guztietan. Bestalde, aldagai idatziak beti tokiko esparruan daude (komando "global" bat eman ezean). Eragina gertatzen den ohikoena prozedura batean exekutatzen denean sortzen da. Prozedura kanpo, spawn_id ez da existitzen, beraz, abiarazitako prozesua ez da gehiago eskuragarria izan. Gehitu "spawn_id global" prozedura horri.

Ezin duzu multispawning gaitasuna gaitu (hau da, zure sistemak ez du aukerarik onartzen (BSD *. *), Galdeketa (SVR> 2), ezta zerbait baliokidea ere). Espero ahal izango du aldi berean prozesu bakarra kontrolatzeko. Kasu honetan, ez saiatu spawn_id ezartzen, ezta exekutatu prozesuak exec exekutatzen ari den bitartean exekutatzen den bitartean. Gainera, ezin izango duzu prozesu anitzetatik (erabiltzaileak aldi berean barne) espero .

Terminal parametroak gidoietan eragin handia izan dezake. Esate baterako, gidoia idazteak oihartzuna bilatzen badu, oihartzuna desaktibatuta egongo da gaizki. Hori dela eta, aurreikusten diren aurreikusten du terminal-parametro osagarriak. Zoritxarrez, beste programa batzuek desatsegina egin dezakete. Adibide gisa, emacs shell-ek "ohiko" mapaketak aldatu nahi ditu: lerro berriak lerro berrietara mapatzen dira, itzulerarik gabeko itzulkinen ordez, eta oihartzuna desgaituta dago. Emacs-ek sarrera-lerroa editatzeko aukera ematen du. Zoritxarrez, espero dut ezin asmatu hau.

Eska ezina parametroen parametro lehenetsien ezarpena gainidaztea eska diezaiokezu, baina kontuz ibili behar duzu ingurune hauei buruzko gidoiak idazten dituzunean. Emacs-en kasuan, ekosistemak eta lerro amaierako mapak bezalako gauzen arabera saihestu.

Zerrenda onartuta duten argumentuek ( esperoaren aldaerak eta elkarreraginak ) erabilitako komandoak zerrenda bat argumentu bat edo asko diren erabakitzeko erabiltzen dute heuristikan. Heuristek huts egin dezakete bakarrik, zerrendak benetan argumentu bakar bat adierazten du, eta horien artean \ u003e \ u00E9 \ u00e9z txertatzen den argumentu bakar bat du. Hau nahikoa ez dela dirudi, hala ere, "-nobrace" argumentua argudio bakar bat argumentu bakar gisa kudeatzeko erabil daiteke. Jakina, hau espero genezake ordenagailuan sortutako Expect kodea erabiliz. Era berean, -barkek argumentu bakar bat behartzen du ereduak / ekintza anitzetarako.

BUGS

Benetan "sexua" ("Smart EXec" edo "Send-EXpect") izeneko programa tentagarria izan zen, baina zentzu ona (edo agian Puritanismoa) nagusitu zen.

Sistema batzuetan, shell bat sortzen denean, Tty atzitu ezin izateaz gain, hala ere exekutatzen du. Horrek esan nahi du zure sistemak ez daki zenbat itxaroten duen kontrolatzeko tty irabazten duen mekanismoa. Jakin ezazu zer den, eta bidali informazio hori berriro.

Ultrix 4.1 (gutxienez hemengo bertsio berrienak behintzat) 1000000 baino gehiagoko denbora-muga 0 baliokidea da.

UNIX 4.0A digitala (eta seguruenik beste bertsioek) pty bat esleitzea uko egiten diete SIGCHLD kontrolatzaile bat definitzen baduzu. Ikusi beka orrialdera informazio gehiago lortzeko.

IRIX 6.0-k ez du pty baimenak behar bezala kudeatzen, espero ez bada beste norbaitek erabiltzen duen pty bat esleitu nahi badiozu, huts egiten du. IRIX 6.1 bertsiora eguneratzea.

Telnet (SunOS 4.1.2 azpian egiaztatua) TERM ez dago konfiguratuta. Hau arazo bat da cronen, CGIen eta CGI scriptetan, eta ez dute TERM definitzen. Horrela, esplizituki ezarri behar duzu - zer motatakoa izan ohi da. Zerbait ezarri behar da! Ondoren, kasu gehienetan nahikoa izango da.

ezarri env (TERM) vt100

Iradokizuna (BSDI BSD / OS 3.1 i386-en soilik egiaztatua) zintzilikatzen da SHELL eta HOME ez badira ezarri. Hau arazo bat da cron , cgi scripts at eta, ingurune aldagai horiek ez dituztenak. Horrela, esplizituki ezarri behar dituzu - zer motatakoa izan ohi da. Zerbait ezarri behar da! Ondoren, kasu gehienetan nahikoa izango da.

ezarri env (SHELL) / bin / sh set env (HOME) / usr / local / bin

Ptys-en inplementazio batzuk diseinatuta daude, kernelek 10 eta 15 segundo bitarteko irakurketa irteera desaktibatzen dituela (benetako zenbakia aplikazioa menpe dago) prozesua fitxategi-deskriptorea itxita egon ondoren. Horrela, hala nola, programak espero

urtebetetze data lo 20 espero

huts egingo du. Hori ekiditeko, exekutagarriak diren programa ez-interaktiboak ezartzea baino ez dute abiarazi . Egoerak esaterako pentsa litezkeen arren, praktikan ez dut sekula aurkitu egoera hau benetan interaktiboa den produktuaren irteera galduko luketelako.

Bestalde, Cray UNICOS ptys-ek irteerako irakurri gabeko edozein irteera botako du berehala prozesua fitxategi-deskriptorea itxita. Cray-i jakinarazi diot eta konpondu egiten ari dira.

Batzuetan atzerapen bat eskatzen da gonbitaren eta erantzunaren artean, esate baterako, Tty interfazea UART ezarpenak aldatzen edo bateragarritasun tasak aldatzen baditu, abiadura / biteko bitak bilatzen dituzte. Oro har, hori guztia eskatzen da bigarren edo bi lo egiteko. Teknika sendoago bat berrabiarazi behar da hardwareak sarrera jasotzeko prest dagoen arte. Hurrengo adibidea bi estrategia erabiltzen ditu:

bidali "abiadura 9600 \ r"; lo 1 espero {timeout {bidali "\ r"; exp_continue} $ prompt}

Trap-kodea ez da Tcl-ren gertaera begiztan eserita dagoen komando batekin funtzionatzen, esate baterako lo. Arazoa da gertakariaren begiztapenean, Tclek asinkronoko kudeatzaileen itzulera-kodeak baztertzen ditu. Laburpen bat trap kodea duen bandera bat ezartzea da. Ondoren markatu bandera berehala komandoaren ondoren (hau da, lo egin).

The expect_background komandoa ignores -timeout argumentuak eta denbora-muga kontzeptuak ez du oro har.

& # 34; EXPECT HINTS & # 34;

Badira gauza pare bat espero izatea ez dela intuitiboa. Atal honek gauza horietako batzuk zuzendu nahi ditu iradokizun pare batekin.

Espero den arazo arruntak shell-ek nola aintzat hartzen dituen azaltzea da. Horrela pertsonek modu desberdinean pertsonalizatzen dute modu ezberdinean, pertsona eta maskorrak, eta, ondorioz, rlogin automatizatzea zaila izan daiteke galdetu gabe. Arrazoizko konbentzio bat da erabiltzaileek adierazpen erregular bat gordetzen dute euren galderara (bereziki, amaieran) EXPECT_PROMPT ingurune aldagaian. Ondorengo kode hau erabil daiteke. EXPECT_PROMPT ez badago, kodea oraindik ondo funtzionatzeko aukera ona du.

Ezarri galdetegia "(% | # | \\ $) $"; # default galdetu {set prompt $ env (EXPECT_PROMPT)} itxaron -re $ prompt

Espero dut eredu esperimentalak idazten dituzula ikustea espero duzunaren amaieran. Horrek gauza osoa ikusi aurretik galdera bati erantzutea ahalbidetzen du. Horrez gain, galderari erantzuteko gai izan arren, oso-osorik ikusi aurretik, lehenbailehen erantzuten baduzu, zure erantzuna galdera-erdian oihartzuna agertu daiteke. Bestela esanda, emaitza elkarrizketa zuzena izango da, baina nahaspilatuta.

Gehienek espazio-karaktere bat dute amaieran. Adibidez, ftp-ren gonbita 'f', 't', 'p', '>' eta. Galdera honi erantzuteko, karaktere horietako bakoitzaren kontua behar duzu. Akats komun bat da hutsik ez agertzea. Jarri zuriak esplizituki.

Forma X * eredua erabiltzen baduzu, * X amaieran jasotako irteera guztiak jasotako azken gauza jasoko du. Hau intuitiboa dirudi baina nahasgarria izan daiteke, "azken gauza jaso" esaldia ordenagailuaren abiaduraren arabera eta I / O prozesatzeko arabera kernelaren eta gailuaren gidariaren arabera alda daitekeelako.

Hain zuzen ere, gizakiek programazio irteerak zati trinkoetan (atomikoki) iristen direnean izaten ohi dute, gehienetan, gehienetan, irteera lerro bat sortzen dute aldi berean. Hori gertatuz gero, aurreko paragrafoaren ereduan * dagoen uneko lerroaren amaierarekin bat etorriko balitz ere, badirudi gehiago badago ere, jasotako irteera guztiak izan duen momentuan.

Espero ez da irteera gehiago lortzen jakitea, zure eredua zehazki kontatzen ezean.

Nahiz line-bideratutako bufferren arabera, zentzuzkoa da. Ez bakarrik programek oso gutxitan egiten dituzten buffer motak agintzen dituzten konpromisoak egiten dituzte, baina sistema indigestionek irteerako lerroak hautsi ditzakete, itxuraz ausazko lekuak apurtuz. Horrela, adierazleen azken karaktereak esanahia idaztean adierazi badezakezu, beraz, jakintsua da.

Programa baten azken irteeran eredua itxaroten baduzu eta programa beste zerbait igortzen baduzu, ezingo duzu denboraz kanpoko hitzarekin detektatu. Arrazoia da espero ez den denbora-muga gainditzea ; horren ordez, adierazpen bat jasoko du. Horren ordez erabili. Are hobeto, erabili biak. Horrela, lerro hori beti mugitzen bada, ez duzu lineaz aldatuko.

Lerro berriak automatikoki bihurtzen dira kargen itzulera, lerroen sekuentziak terminalaren kontrolatzaileak irteerara. Horrela, bi lerro, esplizituki bat datozen eredu bat nahi baduzu, from, say, printf ("foo \ nbar"), "foo \ r \ n" eredua erabili beharko zenuke.

Itzulpen antzeko bat gertatzen da erabiltzaileari irakurtzean, espero_user bidez. Kasu honetan, itzulera sakatzen duzunean, lerro berri batera itzuliko da. Modu gordinari (telnet bezalakoa) terminala ezartzen duen programara pasatzen bada itxaroten badago, arazo bat izango da, programa benetako itzulera espero baita. (Programak benetan barkatzen ari dira itzuliko lerroen automatikoki itzultzen dituztela, baina gehienek ez dute egiten.) Zoritxarrez, ez dago jakiteko programa bat bere terminala modu gordinetan jarri.

Berriro itzulkinak ordez eskuz ordezkatuz, irtenbidea "stty raw" komandoa erabiltzea da, itzulpenarekin geldituko dena. Oharra, ordea, horrek esan nahi du ez duzula jositako lerro-edizioaren ezaugarriak eskuratu.

elkarrekintzan interaktiboki zure terminal modua gordinarazten du, beraz, arazo hori ez da sortzen.

Sarritan erabilgarria da pasahitzak (edo beste informazio pribatua) gordetzeko espero diren script-ean. Hau ez da gomendagarria edonorentzat sar daitekeen edozein ordenagailutan gordetzen denetik. Horrela, script baten pasahitzak modu interaktiboan galdetzen du literalki txertatzen baino baino. Hala eta guztiz ere, batzuetan, kapsulatze hori aukera bakarra da.

Zoritxarrez, UNIX fitxategi sistemak exekutiboak baina irakurtezinak diren scriptak sortzeko modu zuzenik ez du. Sistemaren konfigurazioko script-ak onartzen dituzten sistemek honela zehazten dute honela:

Create the Expect script (datu sekretuak dituen) ohiko moduan. Egin baimenak 750 (-rwxr-x ---) eta fidagarria den talde batek dituen jabetzakoa da, hau da, irakurri ahal izateko talde bat. Behar izanez gero, sortu taldea horretarako. Ondoren, sortu / bin / sh script bat baimenekin 2751 (-rwxr-s - x) lehenago taldea da.

Emaitza edonor exekutatuko den (eta irakurri) script bat da. Aktibatuta dagoenean Expect script-a exekutatzen du.

& # 34; ESKATU ALSO & # 34;

Tcl (3), libexpect (3)
" Esperando Exploración: Programas Interactivos Automatizadores de Tcl-Based Toolkit" liburuak, 602 orrialdeak, ISBN 1-56592-090-2, O'Reilly eta Associates, 1995.
"Espero: Interactivity Kontrolik gabeko Kontratazio horiek zaindu" Don Libesek, 1990eko USENIXeko Udako Prozesuen 1990eko Anaheim, California, 1990eko ekainaren 11-15,
. "Liburutegiko Administrazioaren Eginkizunak Automatizatzeko Esperientzia" erabiliz, "1990 USENIX Instalazio Instalazio Handien Sistemaren Administrazioaren Jardunaldien 1990eko Prozesuak, Colorado Springs, Colorado, 1990eko urriaren 17-19ko" Espero erabiliz.
John Ousterhout-en "Tcl: bateratu komando hizkuntza" hitzaldia, 1990eko Neguko 1990eko USENIX biltzarrean, Washington, DC, urtarrilaren 22-26, 1990. "Espero: Programak interaktiboak kontrolatzeko gidoiak", Don Libesek, Informatika Sistemak , Vol. 4, 2. zk., Kaliforniako Unibertsitateko Prentsa Aldizkariak, 1991ko azaroa. "Regresion Testing and Conformance Testing Interactive Programs" liburuaren arabera, 1992ko Udako 1992ko USENIX Jardunaldiak, 135-144 orrialdeak, San Antonio, TX, Ekainaren 12-15, 1992..I "Kibitz - Hainbat programa interaktibo konektatzen elkarrekin", Don Libes-ek, Software - Praktika eta Esperientzia, John Wiley & Sons, West Sussex, Ingalaterra, Vol.

23, 5. zenbakia, 1993ko maiatza. "Liburutegiko Tcl aplikazioak" debugger bat, "1993 Tcl / Tk Workshop-eko Prozesuak", Berkeley, CA, 1993ko ekainaren 10etik 11ra.

AUTHOR

Don Libes, Instituto Nacional de Normas y Tecnología

ESKERRAK

John Ousterhout-i esker Tcl eta Scott Paisley inspirazioetarako. Rob Savoye esker, espero den autokonfigurazio kodea.

HISTORIA fitxategiak esperoaren eboluzioaren zati handi bat dokumentatzen du. Irakurketa interesgarria egiten du eta softwarearentzako informazio gehiago ematen du. Berean aipatu ditugun pertsonei esker, konpondu egin ditut eta beste laguntza eman.

Aurreikuspenen diseinua eta ezarpena AEBetako gobernuaren parte izan zen, eta, beraz, herri-domeinuan ordaindu zen. Hala eta guztiz ere, egileak eta NISTek nahi dute kreditua programa eta dokumentazio edo horien zatiak erabiltzen badira.