Expect este un program care discută cu alte programe interactive conform unui scenariu. În urma scenariului, Expect știe ce poate fi așteptat de la un program și care ar trebui să fie răspunsul corect. O limbă interpretată oferă ramificații și structuri de control la nivel înalt pentru a direcționa dialogul. În plus, utilizatorul poate prelua controlul și interacționa direct atunci când se dorește, după ce întoarce controlul la scenariu.
Expectk este un amestec de Expect și Tk. Se comportă exact ca dorința lui Expect și Tk. Asteptarile pot fi de asemenea folosite direct in C sau C ++ fara Tcl.
Numele "Așteptați" vine de la ideea secvențelor de trimitere / așteptare popularizate de uucp, kermit și alte programe de control al modemului. Totuși, spre deosebire de uucp, Expect este generalizat astfel încât să poată fi rulat ca o comandă la nivel de utilizator, având în vedere orice program și sarcină. Asteptati ca puteti vorbi simultan cu mai multe programe.
Ce pot aștepta
De exemplu, aici sunt câteva lucruri pe care se poate aștepta comanda:
- Pentru ca computerul să vă apeleze înapoi, astfel încât să vă puteți conecta fără a plăti apelul.
- Începeți un joc și, dacă configurația optimă nu apare, reporniți-l din nou și din nou), până când acesta se întâmplă, apoi transferați-vă controlul.
- Rugați-vă pe fsck și, răspunzând la întrebările sale, răspundeți "da" sau "nu" sau dați controlul înapoi, bazându-vă pe criterii predeterminate.
- Conectați-vă la altă rețea și preluați automat e-mailul astfel încât să apară ca și cum ar fi fost inițial trimis la sistemul dvs. local.
- Transportați variabilele de mediu, directorul curent sau orice fel de informații în rlogin, telnet, tip, su sau chgrp
Există o varietate de motive pentru care shell-ul nu poate îndeplini aceste sarcini. Toate sunt posibile cu Expect.
În general, Expect este util pentru rularea oricărui program care necesită interacțiune între program și utilizator. Tot ceea ce este necesar este că interacțiunea poate fi caracterizată programatic. Aspectul poate, de asemenea, să dea controlul înapoi utilizatorului, fără a opri programul care este controlat. În mod similar, utilizatorul poate reveni la control în orice moment.
folosire
Se așteaptă ca citește cmdfile pentru o listă de comenzi de executat. Asteptarea poate fi invocata implicit pe sistemele care sustin #! notație marcând scriptul ca executabil și făcând prima linie în script:
#! / usr / local / bin / așteptați-f
Desigur, calea trebuie să descrie cu exactitate unde așteaptă viața. / usr / local / bin este doar un exemplu.
Parametrul -c prefațează o comandă care trebuie executată înainte de orice în script. Comanda ar trebui să fie citată pentru a împiedica ruperea de către coajă. Această opțiune poate fi utilizată de mai multe ori. Comenzile multiple pot fi executate cu un singur -c separându-le cu punct și virgulă. Comenzile sunt executate în ordinea în care apar. Când se utilizează Expectk, această opțiune este specificată ca comanda.
Parametrul -d permite o anumită ieșire de diagnosticare, care raportează în principal activitatea internă a comenzilor cum ar fi așteptarea și interacțiunea. Acest steguleț are același efect cu "exp_internal 1" la începutul unui script Expect, plus versiunea Expect este tipărită.
Parametrul -D permite un program de depanare interactiv. Trebuie să urmeze o valoare întregă. Debuggerul va prelua controlul înainte de următoarea procedură Tcl, dacă valoarea este diferită de zero sau dacă este apăsat un ^ C sau dacă un punct de întrerupere este lovit sau dacă în script apare o altă comandă de depanare corespunzătoare. Când utilizați Expectk, această opțiune este specificată ca -Debug.
Parametrul -f prefațează un fișier din care să citească comenzile. Steagul în sine este opțional deoarece este util doar atunci când se utilizează #! notație, astfel încât alte linii de comandă să poată fi furnizate pe linia de comandă. Când utilizați Expectk, această opțiune este specificată ca fișier.
În mod implicit, fișierul de comandă este citit în memorie și executat în întregime. Este uneori de dorit să citiți fișierele pe rând câte unul. Pentru a forța fișierele arbitrare să fie tratate în acest fel, utilizați pavilonul -b. Când utilizați Expectk, această opțiune este specificată ca -buffer.
Dacă șirul "-" este furnizat ca nume de fișier, se va citi intrarea standard. Utilizați "./-" pentru a citi dintr-un fișier numit "-".
Parola -i cauzează Expectați să solicitați interactiv comenzi în loc să le citiți dintr-un fișier. Solicitarea este terminată prin comanda de ieșire sau prin EOF. Parametrul -i este asumat dacă nu se utilizează nici un fișier de comandă și nici -c. Când utilizați Expectk, această opțiune este specificată ca fiind "interactivă".
- poate fi utilizat pentru a delimita capătul opțiunilor. Acest lucru este util dacă doriți să transmiteți un script ca opțiune scriptului dvs. fără a fi interpretat de către Expect. Acest lucru poate fi util plasat în #! pentru a preveni orice interpretare de către Expect. De exemplu, următoarele vor lăsa argumentele inițiale, inclusiv numele de script în variabila argv .
#! / usr / local / bin / așteptați -
Rețineți că convențiile getopt (3) și execve (2) obișnuite trebuie să fie respectate atunci când adăugați argumente către #! linia.
Fișierul $ exp_library / expect.rc este furnizat automat dacă este prezent, cu excepția cazului în care se utilizează stegulețul -N. (Când se folosește Expectk, această opțiune este specificată ca -NORC.) Imediat după aceasta, fișierul ~ / .expect.rc este furnizat automat, cu excepția cazului în care se folosește flagul -n. Dacă variabila de mediu DOTDIR este definită, este tratată ca un director și se citește .expect.rc de acolo. Când utilizați Expectk, această opțiune este specificată ca -norc.Acest aport se produce numai după executarea tuturor steagurilor -c.
-v cauzează Expect să-și imprime numărul versiunii și să iasă. Drapelul corespunzător din Expectk, care folosește nume de pavilion lung, este -versiunea.
Plăcile opționale sunt construite într-o listă și stocate în variabila denumită argv și. argc este inițializat la lungimea argv.
Argv0 este definit a fi numele scriptului sau binar dacă nu este folosit nici un script. De exemplu, următoarele afișează numele scriptului și primele trei argumente:
send_user "$ argv0 paranteză $ argv 0 2 n"
comenzi
Asteptati ca se foloseste limba de comanda a instrumentului. Tcl asigură fluxul de control (dacă, pentru, pauză), evaluarea expresiei și alte câteva caracteristici, cum ar fi definirea recursului și a procedurii. Comenzile utilizate aici dar nu sunt definite (set, if, exec) sunt comenzi Tcl. Asteptati ca sunt acceptate comenzi suplimentare. Dacă nu se specifică altfel, comenzile returnează șirul gol.
Comenzile sunt listate în ordine alfabetică, astfel încât acestea să poată fi localizate rapid. Cu toate acestea, noii utilizatori ar putea fi mai ușor să înceapă prin citirea descrierilor de spawn, trimite, aștepta și interacționa în ordinea respectivă.
închide -slave -onexec 0 | 1 -i spawn_id
închide conexiunea la procesul curent. Cele mai multe programe interactive vor detecta EOF pe stdin și pe ieșire; prin urmare închide de obicei, este suficient să omoare procesul. Flagul -i declară procesul de închidere corespunzător spawn_id numit.
Ambele se așteaptă și interacționează când va ieși din procesul curent și se va închide implicit, dar dacă ucizi procesul, să zicem "exec kill killpid", trebuie să închizi în mod explicit închiderea.
Flagul -onexec determină dacă ID-ul spawn este închis în orice proces nou introdus sau dacă procesul este suprapus. Pentru a lăsa un id spawn deschis, utilizați valoarea 0. O valoare întreagă diferită de zero determină ca spașul să fie închis în orice proces nou.
Flagul -Slave închide robul asociat cu ID-ul spawn. Când conexiunea este închisă, slave-ul este închis automat și dacă este încă deschis.
Indiferent dacă conexiunea este închisă implicit sau explicit, trebuie să apelați așteptați pentru a șterge slotul corespunzător procesului de kernel. Comanda de închidere nu apelează așteptați, deoarece nu există nicio garanție că închiderea unei conexiuni de proces va determina ieșirea.
depanare -în prezent 0 | 1
controlează un debugger Tcl care vă permite să treceți prin declarații și să setați puncte de întrerupere.
Cu nici un argument, un 1 este returnat dacă debuggerul nu rulează, în caz contrar este returnat un 0.
Cu un argument 1, debuggerul este pornit. Cu un argument 0, debuggerul este oprit. Dacă un argument 1 este precedat de flagul -now, debuggerul este pornit imediat. În caz contrar, debuggerul este pornit cu următoarea instrucțiune Tcl.
Comanda de depanare nu modifică nicio capcană. Comparați acest lucru cu începutul Așteptați cu steagul -D.
Comanda de deconectare deconectează un terminal din terminal. Continuă să ruleze în fundal. Procesul are propriul grup de procese. Standard I / O este redirecționat către / dev / null.
Următorul fragment utilizează deconectarea pentru a continua să executați scriptul în fundal.
dacă {fork! = 0} ieșire deconectați. . .
Următorul script citește o parolă și apoi execută un program la fiecare oră care necesită o parolă de fiecare dată când este rulată. Scriptul furnizează parola, astfel încât trebuie doar să o introduceți o singură dată.
trimite_user "parola? " expect_user -re "(. *) n" pentru {} 1 {} {if {fork! = 0} {sleep 3600; 1, șir) r ". . . Ieșire }
Un avantaj al utilizării deconectării peste caracteristica procesului asincron al shell-ului (&) este faptul că Expect poate salva parametrii terminalului înainte de deconectare și apoi le poate aplica mai târziu în ptys noi. Cu &, Expect nu are nici o șansă să citească parametrii terminalului, deoarece terminalul este deja deconectat de momentul în care Expect primește controlul.
ieșiți din -opts status
Cauze Expectați să ieșiți sau să vă pregătiți în alt mod să faceți acest lucru.
-onexit flagul determină ca următorul argument să fie folosit ca un handler de ieșire. Fără un argument, managerul de ieșire curent este returnat.
-Nu Este Ieșire cauze de pavilion Aştepta pentru a vă pregăti să ieșiți, dar nu mai mult de a reveni la sistemul de operare. Operatorul de ieșire definit de utilizator este rulat, precum și propriile dispozitive de lucru interne ale Expect. Nu mai trebuie executate comenzi de așteptare. Acest lucru este util dacă rulați Expect cu alte extensii Tcl. Interpretul actual (și fereastra principală dacă există în mediul Tk) rămân astfel încât alte extensii Tcl să poată curăța. Dacă așteaptă Ieșire este chemat din nou (cu toate acestea, acest lucru s-ar putea întâmpla), manipulatorii nu sunt repetați.
La ieșire, toate conexiunile la procesele generate sunt închise. Închiderea va fi detectată ca un EOF prin procese înregistrate. Ieșire nu ia nici o altă acțiune dincolo de ceea ce face procedura normală _exit (2). Astfel, procesele spawned care nu verifică pentru EOF pot continua să ruleze. (O varietate de condiții sunt importante pentru a determina, de exemplu, ce semnale vor fi transmise unui proces înmulțit, dar acestea sunt dependente de sistem, în mod tipic documentate sub ieșire (3).) Procesele procesate care continuă să funcționeze vor fi moștenite de init.
stare (sau 0, dacă nu este specificat) este returnat ca statutul de ieșire din Aştepta . Ieșire este executată implicit dacă se ajunge la sfârșitul scriptului.
exp_continue -continue_timer
Comanda exp_continue permite aştepta ea însăși să continue să execute, mai degrabă decât să se întoarcă în mod normal. În mod implicit exp_continue resetează temporizatorul. -continue_timer flag previne temporizarea de a fi repornit. (Vedea aştepta pentru mai multe informatii.)
valoarea exp_internal -f file
cauzează comenzi suplimentare pentru a trimite informații de diagnostic intern la Aştepta la stderr dacă valoare este non-zero. Această ieșire este dezactivată dacă valoare este 0. Informațiile de diagnosticare includ fiecare caracter primit și fiecare încercare făcută pentru a se potrivi cu ieșirea curentă cu modelele.
Dacă opțional fişier este furnizat, toate ieșirile normale și de depanare sunt scrise în acel fișier (indiferent de valoarea lui valoare ). Orice fișier de ieșire de diagnostic anterior este închis.
-info flagul cauzează exp_internal pentru a returna o descriere a celor mai recente argumente non-info date.
exp_open args -i spawn_id
returnează un identificator de fișier Tcl care corespunde id-ului inițial al spawn. Identificatorul de fișier poate fi folosit ca și cum ar fi fost deschis de către Tcl deschis comanda. (ID-ul spawn nu trebuie să mai fie folosit) aștepta nu ar trebui executate.
-lasa deschis steagul părăsește ID-ul spawn deschis pentru acces prin comenzile Expect. A aștepta trebuie să fie executat pe ID-ul spawn.
exp_pid -i spawn_id
returnează ID-ul procesului corespunzător procesului în care a fost înregistrată. În cazul în care -i se utilizează pavilionul, pid-ul returnat corespunde cu cel al id-ului dat.
exp_send
este un alias pentru trimite .
exp_send_error
este un alias pentru send_error .
exp_send_log
este un alias pentru send_log .
exp_send_tty
este un alias pentru send_tty .
exp_send_user
este un alias pentru send_user .
exp_version -exit versiune
este util pentru a vă asigura că scriptul este compatibil cu versiunea curentă a Expect.
Cu nici un argument, versiunea curentă a Aştepta este returnat. Această versiune poate fi apoi codată în scriptul dvs. Dacă știți de fapt că nu utilizați funcții ale versiunilor recente, puteți specifica o versiune anterioară.
Versiunile constau din trei numere separate prin puncte. Primul este numărul major. Scripturi scrise pentru versiuni de Aştepta cu un număr mare diferit, aproape sigur nu va funcționa. exp_version returnează o eroare dacă numerele majore nu se potrivesc.
Al doilea este numărul minor. Scripturile scrise pentru o versiune cu un număr mai mic decât versiunea curentă pot depinde de unele caracteristici noi și s-ar putea să nu fie difuzate. exp_version returnează o eroare dacă se potrivesc numerele majore, dar numărul minor al scriptului este mai mare decât cel al execuției Aştepta .
Al treilea este un număr care nu are nici un rol în compararea versiunii. Cu toate acestea, este incrementat atunci când Aştepta distribuția de software se modifică în orice mod, cum ar fi prin documentație sau optimizare suplimentară. Se reseta la 0 la fiecare nouă versiune minoră.
Cu -Ieșire steag, Aştepta imprimă o eroare și iese din lista dacă versiunea nu este actualizată.
așteptați -opts pat1 body1 … -opts patn bodyn
așteaptă până când unul dintre modele se potrivește cu ieșirea unui proces spawned, o perioadă de timp specificată a trecut sau se vede un sfârșit de fișier. Dacă corpul final este gol, acesta poate fi omis.
Modele de la cele mai recente expect_before comandă sunt implicit utilizate înainte de orice alte modele. Modele de la cele mai recente expect_after comandă sunt implicit utilizate după orice alte modele.
Dacă argumentele pentru întreg aştepta instrucțiunea necesită mai mult de o linie, toate argumentele pot fi "încorporate" într-o singură linie, pentru a evita încheierea fiecărei linii cu un backslash. În acest caz, substituțiile obișnuite de Tcl vor avea loc în ciuda armăturilor.
Dacă un model este cuvântul cheie EOF , corpul corespunzător este executat la sfârșitul dosarului. Dacă un model este cuvântul cheie pauză , corpul corespunzător este executat după expirarea timpului. Dacă nu este utilizat niciun cuvânt cheie cu timp de expirare, o acțiune implicită este executată la expirarea timpului. Perioada de expirare implicită este de 10 secunde, dar poate fi setată, de exemplu la 30, prin comanda "set timeout 30". Un interval de timp infinit poate fi desemnat de valoarea -1. Dacă un model este cuvântul cheie Mod implicit , corpul corespunzător este executat fie la expirarea fie la sfârșitul fișierului.
Dacă se potrivește un model, atunci corpul corespunzător este executat. aştepta returnează rezultatul corpului (sau șirul gol dacă nu se potrivește modelul). În cazul în care se potrivesc mai multe modele, cea care apare mai întâi este utilizată pentru a selecta un corp.
De fiecare dată când apare o nouă ieșire, se compară cu fiecare model în ordinea în care sunt listate. Astfel, puteți testa pentru absența unui meci, făcând ultimul model garantat să apară, cum ar fi un prompt. În situațiile în care nu există prompt, trebuie să utilizați pauză (la fel cum ați face dacă interacționați manual).
Modelele sunt specificate în trei moduri. În mod prestabilit, modelele sunt specificate ca la Tcl șir de potrivire comanda. (Aceste modele sunt, de asemenea, similare cu expresiile regulate din C-shell, de obicei denumite modele globale). -gl steagul poate fi folosit pentru a proteja modele care altfel ar putea fi potrivite aştepta steaguri de a face acest lucru. Orice model care începe cu un "-" ar trebui protejat în acest fel. (Toate șirurile care încep cu "-" sunt rezervate pentru opțiunile viitoare.)
De exemplu, fragmentul următor caută un login de succes. (Rețineți că avorta se presupune a fi o procedură definită în altă parte a scriptului.)
așteptați {ocupat {pune ocupat n; exp_continue} nu a reușit să întrerupă "parola nevalidă" abort timeout abort conectat}
Citatele sunt necesare pe modelul al patrulea, deoarece conțin un spațiu, care altfel ar separa modelul de acțiune.Modelele cu aceeași acțiune (cum ar fi cea de-a treia și a patra) necesită afișarea din nou a acțiunilor. Acest lucru poate fi evitat prin utilizarea modelelor în stil regexp (a se vedea mai jos). Mai multe informații despre modelarea modelelor în stilul globului pot fi găsite în manualul Tcl.
Modelele în stilul Regexp urmează sintaxa definită de Tcl regexp (scurt pentru "expresie regulată"). Modelele regexp sunt introduse cu steagul -re . Exemplul anterior poate fi rescris folosind un regexp ca:
așteptați {ocupat {pune ocupat n; exp_continue} -re "nu a reușit | parola nevalidă" abort timeout abort conectat}
Ambele tipuri de modele sunt "neanchise". Acest lucru înseamnă că modelele nu trebuie să se potrivească întregului șir, dar pot începe și încheia meciul oriunde în șir (atâta timp cât se potrivește totul). Utilizați ^ pentru a potrivi începutul unui șir și $ pentru a se potrivi cu sfârșitul. Rețineți că dacă nu așteptați sfârșitul unui șir, răspunsurile dvs. pot ajunge cu ușurință în mijlocul șirului, deoarece acestea sunt reluate de la procesul de reproducere. În timp ce produce încă rezultate corecte, producția poate să arate nefiresc. Astfel, folosirea lui $ este încurajată dacă puteți descrie exact caracterele de la sfârșitul unui șir.
Rețineți că la mulți editori, ^ și $ se potrivesc cu începutul și sfârșitul liniilor. Cu toate acestea, deoarece se așteaptă să nu fie orientată pe linie, aceste caractere se potrivesc cu începutul și sfârșitul datelor (spre deosebire de linii) aflate în așteptarea tamponului de potrivire. (De asemenea, consultați nota de mai jos despre "indigestia sistemului.")
-ex steagul face ca modelul să corespundă cu un șir "exact". Nu se face nici o interpretare a *, ^, etc (deși convențiile obișnuite Tcl trebuie totuși respectate). Modelele exacte sunt întotdeauna neatinse.
-nocase steagul face ca caracterele majuscule ale ieșirii să fie comparate ca și cum ar fi caractere minuscule. Modelul nu este afectat.
În timp ce lectură de ieșire, mai mult de 2000 de octeți pot forța bytes mai devreme să fie "uitat". Acest lucru poate fi schimbat cu funcția match_max . (Rețineți că valorile excesiv de mari pot încetini matcherul de tipare.) Dacă patlist este full_buffer , corpul corespunzător este executat dacă match_max octeții au fost primiți și nu au fost potrivite alte modele. Indiferent dacă este sau nu full_buffer este folosit cuvântul cheie, caracterele uitate sunt scrise la expect_out (tampon).
Dacă patlist este cuvântul cheie nul , iar nullurile sunt permise (prin remove_nulls ), corpul corespunzător este executat dacă se potrivește un singur ASCII 0. Nu este posibil să se potrivească 0 bytes prin glob sau regexp modele.
După potrivirea unui model (sau eof sau full_buffer), orice ieșire de potrivire și de neegalat anterior este salvată în variabila expect_out (tampon) . Până la 9 potriviri de subreversare regexp sunt salvate în variabile expect_out (1, string) prin expect_out (9, string) . În cazul în care -indices steagul este utilizat înainte de un model, indicii de început și de sfârșit (într-o formă adecvată pentru daca lrange ) din cele 10 șiruri sunt stocate în variabile expect_out (X, start) și expect_out (X, end) unde X este o cifră, corespunde poziției substring din buffer. 0 se referă la șiruri de caractere care se potrivesc întregului model și sunt generate pentru modele globale, precum și modele regexp. De exemplu, dacă un proces a produs rezultatul "abcdefgh n", rezultatul a:
așteptați "cd"
este ca și cum ar fi executat următoarele afirmații:
set expect_out (0, șir) cd set expect_out (tampon) abcd
și "efgh n" este lăsat în bufferul de ieșire. Dacă un proces a produs rezultatul "abbbcabkkkka n", rezultatul a:
așteptați-indici -re "b (b *). * (k +)"
este ca și cum ar fi executat următoarele afirmații:
set așteptați (0, începe) 1 set expect_out (0, sfarsit) 10 set expect_out (0, sfarsit) 10 set expect_out (0, string) (2, start) 10 set expect_out (2, sfarsit) 10 set expect_out (2, string) k set expect_out (tampon) abbbcabkkkk
și "a n" este lăsată în bufferul de ieșire. Modelul "*" (și -re ". *") Va elimina tamponul de ieșire fără a citi mai multă ieșire din proces.
În mod normal, ieșirea corespunzătoare este eliminată din tampoanele interne ale Expect. Acest lucru poate fi prevenit prin prefixarea unui model cu -notransfer steag. Acest steguleț este util în special în experimentare (și poate fi abreviat la "-not" pentru confort în timpul experimentării).
ID-ul spawn asociat cu ieșirea de potrivire (sau eof sau full_buffer) este stocat în expect_out (spawn_id) .
-pauză flagul determină comanda curentă să aștepte să utilizeze următoarea valoare ca un timeout în loc să utilizeze valoarea variabilei timeout.
În mod implicit, modelele sunt potrivite cu ieșirea din procesul curent, cu toate acestea -i flag declară că ieșirea din lista spawn_id numită este potrivită cu toate celelalte modele (până la următoarea -i ). Lista spawn_id ar trebui să fie o listă separată de spawn_ids sau o variabilă care se referă la o astfel de listă de spawn_ids.
De exemplu, următorul exemplu așteaptă pentru "conectat" din procesul curent sau "ocupat", "eșuat" sau "parolă nevalidă" din spawn_id numit de $ proc2.
așteptați {-i $ proc2 ocupat {pune ocupat n; exp_continue} -re "nu a reușit | parola nevalidă" abort timeout abort conectat}
Valoarea variabilei globale any_spawn_id pot fi utilizate pentru a se potrivi modelelor cu orice spawn_ids numite cu toate celelalte -i steaguri în curent aştepta comanda. Sporul de la -i steagul fără model asociat (adică, urmat imediat de altul -i ) este pus la dispoziția oricăror alte modele în același aştepta comandă asociată cu any_spawn_id.
-i steagul poate numi, de asemenea, o variabilă globală, caz în care variabila se citește pentru o listă cu ID-urile spawn. Variabila este recitită ori de câte ori se schimbă. Aceasta oferă o modalitate de modificare a sursei I / O în timp ce comanda este în execuție. ID-urile de plantă furnizate astfel sunt denumite "indirecte".
Acțiuni cum ar fi pauză și continua provoacă structuri de control (adică, pentru , proc ) să se comporte în mod obișnuit. Comanda exp_continue permite aştepta ea însăși să continue să execute, mai degrabă decât să se întoarcă în mod normal.
Acest lucru este util pentru evitarea buclelor explicite sau a declarațiilor de așteptare repetate. Următorul exemplu face parte dintr-un fragment pentru automatizarea rlogin. exp_continue evită să scrie o secundă aştepta (pentru a căuta prompt din nou) dacă rlogin solicită o parolă.
așteptați {password: {stty -echo send_user "pentru $ user) pe $ host:" expect_user -re "(. *) n" send_user " n" send "$ expect_out echo exp_continue} incorect {send_user "parola nevalidă sau contul n" ieșire} timeout {send_user "conexiune la $ host timed out n" ieșire} eof {send_user re $ prompt}
De exemplu, următorul fragment ar putea ajuta ghidul utilizatorului să interacționeze deja complet automatizat. În acest caz, terminalul este pus în modul brut. Dacă utilizatorul apasă "+", o variabilă este incrementată. Dacă "p" este apăsat, mai multe returnări sunt trimise procesului, probabil pentru a-l împinge într-un fel, iar "i" permite utilizatorului să interacționeze cu procesul, furtând efectiv controlul de la scenariu. În fiecare caz, exp_continue permite curentului aştepta pentru a continua potrivirea modelului după executarea acțiunii curente.
stty raw -echo expect_after {-i $ user_spawn_id "p" {trimite " r r r"; exp_continue} "+" {incr foo; exp_continue} "i" {interacționează; exp_continue} "ieșire" ieșire}
În mod implicit, exp_continue resetează temporizatorul. Cronometrul nu este repornit, dacă exp_continue este apelat cu -continue_timer steag.
expect_after expect_args
funcționează identic cu expect_before cu excepția faptului că în cazul modelelor din ambele aştepta și expect_after se poate potrivi, aştepta modelul este utilizat. Consultați expect_before comanda pentru mai multe informații.
expect_background expect_args
are aceleași argumente ca șiaştepta , totuși se întoarce imediat. Modelele sunt testate de fiecare dată când sosesc noi intrări. Modelulpauză șiMod implicit sunt lipsite de sensexpect_background și sunt tăiate în tăcere. În caz contrar,expect_background comandăexpect_before șiexpect_after modele similareaştepta face.
Candexpect_background acțiunile sunt evaluate, prelucrarea de fundal pentru același id spawn este blocată. Procesarea de fundal este deblocată când acțiunea este finalizată. În timp ce procesarea de fundal este blocată, este posibilă efectuarea unui proces (în prim-plan)aştepta pe acelasi idol.
Nu este posibilă executarea unuiaştepta în timp ce unexpect_background este deblocat.expect_background pentru un anumit id spawn este șters prin declararea unui nou expect_background cu același id spawn. Declarareaexpect_background fără un model elimină idul spawn dat de la capacitatea de a se potrivi cu modelele din fundal.
expect_before expect_args
are aceleași argumente ca șiaştepta , totuși se întoarce imediat. Modele perechi de acțiuni de la cele mai recenteexpect_before cu același id spawn sunt adăugați implicit la oricare dintre următoareleaştepta comenzi. Dacă un model se potrivește, acesta este tratat ca și cum ar fi fost specificat înaştepta comanda însăși, iar organismul asociat este executat în contextulaştepta comanda. Dacă modele din ambeleexpect_before șiaştepta se poate potrivi,expect_before modelul este utilizat.
Dacă nu este specificat niciun model, ID-ul spawn nu este verificat pentru niciun model.
Cu excepția cazului în care sunt suprascrise de a-i steag,expect_before modele se potrivesc cu ID-ul spawn definit la momentul în careexpect_before comanda a fost executată (nu atunci când modelul său se potrivește).
Parola -info cauzeazăexpect_before pentru a returna specificațiile actuale cu privire la ce tipare se va potrivi. În mod prestabilit, raportează codul de identificare al spawnului curent. Este posibil să se furnizeze o specificație opțională id spawn pentru informații despre ID-ul spawn. De exemplu
expect_before -info -i $ proc
Se poate specifica cel mult o specificație id spawn. Steagul - suprimă indirect indiciile directe ale spaților care provin doar din specificații indirecte.
În loc de o specificație id spawn, pavilionul "-all" va provoca "-info" pentru a raporta despre toate idiotul icrelor.
Ieșirea pavilionului -info poate fi reutilizată ca argument pentru a aștepta înainte.
expect_tty expect_args
este caaştepta dar citește caracterele din / dev / tty (adică apăsările de la tastatură de la utilizator). În mod prestabilit, citirea este efectuată în modul gătit. Astfel, liniile trebuie să se încheie cu o întoarcere pentru a fiaştepta sa ii vedem. Acest lucru poate fi schimbat prin intermediulstty (a se vedeastty comanda de mai jos).
expect_user expect_args
este caaştepta dar citește caracterele de la stdin (adică apăsările de la tastatură de la utilizator). În mod prestabilit, citirea este efectuată în modul gătit. Astfel, liniile trebuie să se încheie cu o întoarcere pentru a fiaştepta sa ii vedem.Acest lucru poate fi schimbat prin intermediulstty (a se vedeastty comanda de mai jos).
furculiţă
creează un nou proces. Noul proces este o copie exactă a curentuluiAştepta proces. Cu privire la succes,furculiţă returnează 0 la noul proces (copil) și returnează ID-ul procesului procesului copil la procesul părinte. La eșec (invariabil din cauza lipsei de resurse, de exemplu, spațiu de schimb, memorie)furculiţă returnează -1 procesului părinte și nu este creat niciun proces copil.
Procesele procesate încetează prinIeșire comandă, la fel ca procesul original. Procesele procesate sunt permise să scrie în fișierele jurnal. Dacă nu dezactivați depanarea sau logarea în majoritatea proceselor, rezultatul poate fi confuz.
Unele implementări pty pot fi confundate de mai mulți cititori și scriitori, chiar și momentan. Astfel, este cel mai sigurfurculiţă înainte de procesele de reproducere.
interacționa string1 body1 … stringn bodyn
oferă controlul procesului actual către utilizator, astfel încât intrările de taste sunt trimise la procesul curent, iar stdout și stderr procesului curent sunt returnate.
Șirul de perechi de caractere pot fi specificate ca argumente, caz în care corpul este executat atunci când este introdus șirul corespunzător. (Implicit, șirul nu este trimis la procesul curent.)interpret comanda este presupusa, daca corpul final lipseste.
Dacă argumentele pentru întreginteracționa instrucțiunea necesită mai mult de o linie, toate argumentele pot fi "încorporate" într-o singură linie, pentru a evita încheierea fiecărei linii cu un backslash. În acest caz, substituțiile obișnuite de Tcl vor avea loc în ciuda armăturilor.
De exemplu, următoarea comandă rulează interacționează cu următoarele perechi de string-corp definite: Când apăsați ^ Z,Aştepta este suspendat. (The-reset flag-ul restabilește modurile terminale.) Când apăsați ^ A, utilizatorul vede "ați tastat un control-A" și procesul este trimis a ^ A. Când se apasă $, utilizatorul vede data. Atunci când apăsați ^ C,Aştepta ieșiri. Dacă se introduce "foo", utilizatorul vede "bar". Cand apasati ~~, butonulAştepta interpretul rulează interactiv.
setați CTRLZ 032 interacționați între {-reset $ CTRLZ {exec kill -STOP pid} 001 {send_user "ați tastat un control-A n"; trimiteți " 001"} $ {send_user "Data este formatul ceasului ceas secunde"} 003 exit foo {send_user "bar"} ~~}
În perechile string-corp, șirurile sunt potrivite în ordinea în care sunt enumerate ca argumente. Stringurile care se potrivesc parțial nu sunt trimise procesului actual în așteptarea venirii restului. Dacă apoi sunt introduse caracterele astfel încât nu mai poate exista o potrivire, numai partea din șir va fi trimisă procesului care nu poate începe altul. Astfel, șirurile care sunt substringuri ale potrivirilor parțiale se pot potrivi mai târziu, dacă șirurile originale care încearcă să fie potrivite nu reușesc în cele din urmă.
În mod implicit, potrivirea șirului este exactă, fără cărți sălbatice. (În contrast,aştepta comanda utilizează în mod implicit modele de tip glob.)-ex steagul poate fi utilizat pentru a proteja modelele care ar putea altfel să se potriveascăinteracționa steaguri de a face acest lucru. Orice model care începe cu un "-" ar trebui protejat în acest fel. (Toate șirurile care încep cu "-" sunt rezervate pentru opțiunile viitoare.)
-re steagul forțează șirul să fie interpretat ca un model în stil regexp. În acest caz, substringurile potrivite sunt stocate în variabilă interact_out în mod similar cu modulaştepta își stochează producția în variabilăexpect_out .-indices steagul este susținut în mod similar.
ModelulEOF introduce o acțiune care este executată la sfârșitul fișierului. O separatăEOF model poate urma, de asemenea,-output pavilion, caz în care se potrivește dacă se detectează un eof în timp ce se scrie o ieșire. Valoarea implicităEOF acțiunea este "întoarcere", așa căinteracționa se întoarce pur și simplu la orice EOF.
Modelulpauză introduce un timeout (în secunde) și o acțiune care este executată după ce nu s-au citit caractere pentru o anumită oră.pauză model se aplică procesului cel mai recent specificat. Nu există un interval de timp prestabilit. Variabila specială "timeout" (folosită deaştepta ) nu are nici un efect asupra acestui interval de timp.
De exemplu, următoarea afirmație ar putea fi utilizată pentru autologizarea utilizatorilor care nu au tastat nimic pentru o oră, dar care primesc încă mesaje frecvente de sistem:
interacționați-introduceți $ user_spawn_id timeout 3600 return -output $ spawn_id
Dacă modelul este cuvântul cheienul , iar nullurile sunt permise (prinremove_nulls ), corpul corespunzător este executat dacă se potrivește un singur ASCII 0. Nu este posibil să se potrivească 0 bytes prin glob sau regexp modele.
Prefabricarea unui model cu steagul-eu scriu determină variabila interact_out (spawn_id) pentru a fi setat la spawn_id care corespunde modelului (sau eof).
Acțiuni cum ar fipauză șicontinua provoacă structuri de control (adică,pentru , proc ) să se comporte în mod obișnuit. in orice cazîntoarcere cauze interacționează pentru a reveni la apelantul său, în timp ceinter_return cauzeinteracționa pentru a provoca o întoarcere în apelantul său. De exemplu, dacă "proc foo" a sunatinteracționa care apoi a executat acțiuneainter_return , proc foo s-ar întoarce. (Aceasta înseamnă că dacăinteracționa apeluriinterpret interactiv tastândîntoarcere va determina continuarea interacțiunii, în timp ceinter_return va determina interacțiunea să se întoarcă la apelantul său.)
Pe parcursulinteracționa , modul brut este utilizat astfel încât toate caracterele să poată fi transmise procesului curent.Dacă procesul actual nu capturează semnalele de control al funcției, se va opri dacă este trimis un semnal de oprire (implicit ^ Z). Pentru a reporni, trimiteți un semnal continuu (cum ar fi "ucide -CONT"). Dacă doriți cu adevărat să trimiteți un SIGSTOP la un astfel de proces (cu ^ Z), luați în considerare mai întâi cash-ul de reproducere și apoi executați programul. Pe de altă parte, dacă doriți să trimiteți un SIGSTOP laAştepta el însuși, primul interpret de apel (poate folosind un caracter de evacuare), apoi apăsați pe Z.
Șirul de perechi de caractere poate fi folosit ca o scurtă durată pentru a evita intrarea în interpret și executarea comenzilor interactiv. Modul terminal anterior este utilizat în timp ce corpul unei perechi de string-corp este executat.
Pentru viteză, acțiunile se execută în modul brut în mod prestabilit.-reset flag-ul restabilește terminalul la modul pe care la avut înainteinteracționa a fost executat (invariabil, modul fierte). Rețineți că caracterele introduse în timpul comutării modului pot fi pierdute (o caracteristică nefericită a driverului terminalului în unele sisteme). Singurul motiv care trebuie folosit-reset este dacă acțiunea dvs. depinde de funcționarea în modul gătit.
-ecou steagul trimite caracterele care corespund modelului următor înapoi la procesul care le-a generat pe măsură ce fiecare caracter este citit. Acest lucru poate fi util atunci când utilizatorul trebuie să vadă feedback din modele tipărite parțial.
În cazul în care un model este în curs de ecou, dar în cele din urmă nu reușește să se potrivească, caracterele sunt trimise procesului spawned. În cazul în care procesul de reproducere apoi ecou lor, utilizatorul va vedea caracterele de două ori.-ecou este probabil potrivită numai în situațiile în care este puțin probabil ca utilizatorul să nu finalizeze modelul. De exemplu, următorul fragment este din rftp, scriptul recursiv-ftp, în cazul în care utilizatorul este rugat să intre, ~ p, sau ~ l, pentru a obține, a pune sau a afișa directorul curent recursiv. Acestea sunt atât de departe de comenzile obișnuite de ftp, că este puțin probabil ca utilizatorul să scrie ~ urmat de orice altceva, cu excepția greșelilor, caz în care probabil va ignora oricum rezultatul.
interacționează {-echo ~ g {getcurdirectory 1} -echo ~ l {getcurdirectory 0} -echo ~ p {putcurdirectory}}
-nobuffer steagul trimite caractere care se potrivesc cu modelul următor în procesul de ieșire, pe măsură ce sunt citite caracterele.
Acest lucru este util atunci când doriți să permiteți unui program să redea modelul. De exemplu, următoarele ar putea fi utilizate pentru a monitoriza locația unei persoane (un modem în stil Hayes). De fiecare dată când se vede "etc", scriptul înregistrează restul liniei.
proc lognumber {} {interact -nobuffer -re "(. *) r" întoarcere pune $ log "format ceas ceas secunde: dialed $ interact_out (1, string)" interactiv -nobuffer "atd"
Pe parcursulinteracționa , utilizarea anterioară alog_user este ignorată. În special,interacționa va forța rezultatele sale să fie înregistrate (trimise la ieșirea standard), deoarece se presupune că utilizatorul nu dorește să interacționeze orbește.
o- steagul face ca următoarele perechi de chei-corp să fie aplicate la ieșirea procesului curent. Acest lucru poate fi util, de exemplu, atunci când se ocupă cu gazde care transmit caractere nedorite în timpul unei sesiuni telnet.
În mod implicit,interacționa se așteaptă ca utilizatorul să scrie stdin și să scrie lecturăAştepta proces în sine.-u (pentru "utilizator")interacționa căutați utilizatorul ca proces numit prin argumentul său (care trebuie să fie un id spawned).
Acest lucru permite ca două procese independente să fie îmbinate fără a utiliza o buclă explicită. Pentru a ajuta la depanare, așteptați diagnosticarea întotdeauna să mergeți la stderr (sau stdout pentru anumite informații de logare și de depanare). Din același motiv,interpret comanda va citi interactiv de la stdin.
De exemplu, următorul fragment creează un proces de conectare. Apoi se formează utilizatorul (nu este prezentat) și, în final, leagă cele două. Desigur, orice proces poate fi înlocuit de autentificare. O cochilie, de exemplu, ar permite utilizatorului să lucreze fără a furniza un cont și o parolă.
spawn conectare set login $ spawn_id spawn vârf modem # dial înapoi la utilizator # conectare utilizator pentru conectare interacționează -u $ login
Pentru a trimite ieșirea la mai multe procese, listați fiecare listă de iduri prefabricate prin a-output steag. Intrările pentru un grup de idiomuri de ieșire pot fi determinate de o listă de ID-uri care precede a-intrare steag. (Ambii-intrare și-output pot prelua liste în aceeași formă ca și-i pavilion înaştepta comanda, cu excepția faptului că any_spawn_id nu are semnificație îninteracționa .) Următoarele steaguri și șiruri (sau șabloane) următoare se aplică acestei intrări până când apare un alt semn de intrare. Daca nu-intrare apare,-output implică "-input $ user_spawn_id -output". (În mod similar, cu modele care nu au-intrare .) Daca unul-intrare este specificat, suprascrie $ user_spawn_id. Dacă o secundă-intrare este specificat, suprascrie $ spawn_id. Adiţional-intrare pot fi specificate steaguri.
Cele două procese de intrare implicite implicit au ca rezultat ieșirile specificate ca $ spawn_id și $ user_spawn_id (în sens invers). În cazul în care un-intrare steagul apare cu nr-output steagul, caracterele din acest proces sunt aruncate.
-i steagul introduce un înlocuitor pentru spawn_id curent atunci când nu există altul-intrare sau-output sunt folosite steaguri. Flagul A -i implică o pictogramă -o.
Este posibil să se schimbe procesele cu care se interacționează folosind id-uri indirecte ale spaților. (Identificările indirecte ale spaților sunt descrise în secțiunea de pe comanda așteptare.) Identificările indirecte ale spaților pot fi specificate prin intermediul semnalizatoarelor -i, -u, -inputul sau -output.
interpret args
determină solicitarea interactivă a utilizatoruluiAştepta și Tcl. Se imprimă rezultatul fiecărei comenzi.
Acțiuni cum ar fipauză șicontinua provoacă structuri de control (adică,pentru , proc ) să se comporte în mod obișnuit. in orice cazîntoarcere determină ca interpretul să se întoarcă la apelant, în timp ceinter_return cauzeinterpret pentru a provoca o întoarcere în apelantul său. De exemplu, dacă "proc foo" a sunatinterpret care apoi a executat acțiuneainter_return , proc foo s-ar întoarce. Orice altă comandă cauzeazăinterpret pentru a continua să solicitați comenzi noi.
În mod implicit, promptul conține două numere întregi. Primul întreg descrie adâncimea stivei de evaluare (adică de câte ori a fost apelată Tcl_Eval). Cel de-al doilea întreg este identificatorul istoricului Tcl. Promptul poate fi setat prin definirea unei proceduri numite "prompt1" a cărei valoare de întoarcere devine următorul prompt. Dacă o declarație are citate deschise, paranteze, brațe sau paranteze, se emite un prompt secundar (implicit "+>") la rândul nou. Instrumentul secundar poate fi setat prin definirea unei proceduri numite "prompt2".
Pe parcursulinterpret , se utilizează modul gătit, chiar dacă apelantul său folosea modul brut.
Dacă stdin este închis,interpret se va întoarce dacă nu-eof se utilizează un flag, caz în care se invocă argumentul următor.
log_file args -a fișier
Dacă este furnizat un nume de fișier,fișier jurnal va înregistra o transcriere a sesiunii (începând de la acel punct) în fișier.fișier jurnal va opri înregistrarea dacă nu este dat nici un argument. Orice fișier jurnal anterior este închis.
În locul unui nume de fișier, poate fi furnizat un identificator de fișier Tcl utilizând-deschis sau-lasa deschis steaguri. Acest lucru este similar cuicre comanda. (Vedeaicre pentru mai multe informatii.)
-A semn de forțe de ieșire pentru a fi logat, care a fost suprimată de cătrelog_user comanda.
În mod implicit, funcțiafișier jurnal comanda adaugă la fișierele vechi, mai degrabă decât să le trunchieze, pentru a vă permite să vă dezactivați și de mai multe ori într-o singură sesiune. Pentru a trunchia fișierele, utilizați-noappend steag.
-info flagul cauzează log_file pentru a returna o descriere a celor mai recente argumente non-info date.
log_user -info | 0 | 1
În mod implicit, dialogul trimitere / așteptare este înregistrat la stdout (și un jurnal dacă este deschis). Logarea la stdout este dezactivată de comanda "log_user 0" și este activată de "log_user 1". Logarea la fișierul log este neschimbată.
-info flagul determină log_user să returneze o descriere a celor mai recente argumente non-info date.
match_max -d -i spawn_id dimensiune
definește dimensiunea bufferului (în octeți) utilizat intern de cătreaştepta . Cu nu mărimea argument, mărimea curentă este returnată.
Cu-d , dimensiunea implicită este setată. (Implicit inițial este 2000.) Cu-i flag, mărimea este setată pentru numele id spawn, altfel este setat pentru procesul curent.
suprapunere - # spawn_id - # spawn_id … program args
Executa "program args "în locul curentuluiAştepta program, care se termină. Un argument cu cratimă goală forțează o cratimă în fața numelui comenzii ca și cum ar fi fost o coajă de conectare. Toate spawn_ids sunt închise, cu excepția celor numite ca argumente. Acestea sunt mapate pe identificatorii de fișiere numiți.
Spawn_ids sunt mapate la identificatorii de fișiere pentru ca noul program să moștenească. De exemplu, următoarea linie rulează șahul și permite să fie controlată de procesul actual - să spunem, un maestru de șah.
suprapunere -0 $ spawn_id -1 $ spawn_id -2 $ spawn_id șah
Acest lucru este mai eficient decât "interacționează -u", totuși, ea sacrifică abilitatea de a face interacțiune programată de laAştepta procesul nu mai este în control.
Rețineți că nu este prevăzut niciun terminal de control. Astfel, dacă deconectați sau remapați intrarea standard, programele care fac controlul funcției (shell-uri, login etc.) nu vor funcționa corect.
paritate -d -i spawn_id valoare
definește dacă paritatea ar trebui reținută sau eliminată de la ieșirea proceselor spawned. Dacă valoare este zero, paritatea este dezbrăcată, altfel nu este dezbrăcată. Cu nu valoare argument, valoarea curentă este returnată.
Cu-d , valoarea parității implicită este setată. (Valoarea implicită inițială este 1, adică paritatea nu este dezbrăcată)-i , valoarea valorii parității este setată pentru numele id spawn, altfel este setat pentru procesul curent.
remove_nulls -d -i spawn_id valoare
definește dacă nullurile sunt reținute sau eliminate din ieșirea proceselor spawned înainte de potrivirea modelului sau stocarea în variabilă expect_out sau interact_out . Dacă valoare este 1, nulls sunt eliminate. Dacă valoare este 0, nulls nu sunt eliminate. Cu nu valoare argument, valoarea curentă este returnată.
Cu-d , valoarea implicită este setată. (Implicit inițial este 1, adică, nulls sunt eliminate.) Cu-i flag, valoarea este setată pentru numele spawn id, altfel este setat pentru procesul curent.
Indiferent dacă sunt sau nu nulls sunt eliminate,Aştepta va inregistra octeti nula la jurnal si stdout.
trimiteți șirul -flaguri
trimite şir la procesul actual. De exemplu, comanda
trimite "hello world r"
trimite caracterele, pe care le-a lăsat în fața procesului actual. (Tcl include o comandă asemănătoare cu printf (numităformat ) care pot construi șiruri complexe arbitrar.)
Caracterele sunt trimise imediat, deși programele cu intrare tamponată în linie nu vor citi caracterele până când nu este trimis un caracter de retur. Un caracter de retur este notat " r".
-- steagul forțează ca următorul argument să fie interpretat mai degrabă ca un șir, nu ca un steag.Orice șir poate fi precedat de "-" dacă arată sau nu de fapt un steag. Acest lucru oferă un mecanism de încredere pentru a specifica șiruri variabile fără a fi împiedicat de aceia care arata în mod accidental ca steaguri. (Toate șirurile care încep cu "-" sunt rezervate pentru opțiunile viitoare.)
-i flag declară că șirul este trimis către spawn_id numit. Dacă spawn_id este user_spawn_id , iar terminalul este în modul brut, liniile noi din șir sunt traduse în secvențe return-newline, astfel încât să apară ca și cum terminalul era în modul fiert.-brut steagul dezactivează această traducere.
-nul steag trimite caractere nula (0 octeți). În mod prestabilit, este trimis un null. Un număr întreg poate urma-nul pentru a indica numărul de nuli trimisi.
-pauză steagul generează o condiție de pauză. Acest lucru are sens numai dacă ID-ul spawn se referă la un dispozitiv tty deschis prin intermediul "spawn-open". Dacă ați dat naștere unui proces, cum ar fi sfat, ar trebui să utilizați convenția tipului pentru generarea unei pauze.
-s puterea de ieșire a forțelor va fi trimisă încet, evitând astfel situația comună în care un computer depășește un tampon de intrare proiectat pentru un om care nu ar depăși niciodată același tampon. Această ieșire este controlată de valoarea variabilei "send_slow" care are o listă cu două elemente. Primul element este un număr întreg care descrie numărul de octeți care se trimit în mod atomic. Cel de-al doilea element este un număr real care descrie numărul de secunde prin care atomul trimite trebuie să fie separat. De exemplu, "set send_slow {10 .001}" ar forța "send -s" să trimită șiruri cu 1 milisecundă între fiecare 10 caractere trimise.
-h puterea de ieșire a forțelor va fi trimisă (oarecum) ca o tastare umană. Între personaje apar întârzieri asemănătoare omului. (Algoritmul se bazează pe o distribuție Weibull, cu modificări care se potrivesc acestei aplicații particulare.) Această ieșire este controlată de valoarea variabilei "send_human" care are o listă cu cinci elemente. Primele două elemente sunt un interval mediu de timp între caractere al caracterelor în câteva secunde. Primul este utilizat în mod implicit. Al doilea este folosit la terminațiile cuvintelor, pentru a simula pauzele subtile care apar ocazional la astfel de tranziții. Al treilea parametru este o măsură de variabilitate unde .1 este destul de variabilă, 1 variabilă în mod rezonabil, iar 10 este invariabil. Extremele sunt de la 0 la infinit. Ultimii doi parametri sunt, respectiv, un interval minim și maxim interarrival. Valoarea minimă și maximă sunt folosite ultima dată și "clip" ultima dată. Media maximă poate fi destul de diferită de media dată dacă valorile minime și maxime ale clipului sunt suficiente.
De exemplu, următoarea comandă emula un dactilograf rapid și consistent:
set send_human {.1 .3 1 .05 2} trimite -h "Îmi este foame, hai să luăm prânzul."
în timp ce următoarele ar putea fi mai potrivite după o mahmureală:
set trimite_human {.4 .4 .2 .5 100} trimite -h "Goodd petrecere noapte barbati!"
Rețineți că erorile nu sunt simulate, deși puteți să vă configurați singur situațiile de corectare a erorilor prin încorporarea greșelilor și corecțiilor într-un argument de trimitere.
Steagurile pentru trimiterea de caractere nulă, pentru trimiterea pauzelor, pentru forțarea ieșirii lente și pentru ieșirea în stil uman se exclud reciproc. Se va utiliza numai cea specificată ultima dată. Mai mult, nu şir argumentul poate fi specificat cu steagurile pentru trimiterea caracterelor sau pauzelor null.
Este o idee bună să precedi primatrimite la un proces de către unaştepta. aştepta va aștepta începerea procesului, în timp cetrimite nu poti. În special, în cazul în care primultrimite completează înainte de începerea procesului, riscați să ignorați datele. În situațiile în care programele interactive nu oferă nici un prompt inițial, puteți să precedețitrimite printr-o întârziere ca în:
# Pentru a evita să oferi hackerilor sfaturi despre cum să pătrundă, # acest sistem nu solicită o parolă externă. # Așteptați 5 secunde pentru exec pentru a finaliza spawn telnet very.secure.gov somn 5 trimite parola r
exp_send este un alias pentru trimite. Dacă utilizați Expectk sau altă variantă de Expect în mediul Tk,trimite este definit de Tk pentru un scop cu totul diferit.exp_send este prevăzută pentru compatibilitatea între medii. Alije similare sunt furnizate și altor comenzi de trimitere ale celorlalte Expect.
șirul send_error -flags
este catrimite , cu excepția faptului că producția este trimisă mai degrabă la stderr decât la procesul curent.
send_log - șir
este catrimite , cu excepția faptului că șirul este trimis numai în fișierul jurnal (a se vedeafișier jurnal .) Argumentele sunt ignorate dacă nici un fișier jurnal nu este deschis.
send_tty -flags șir
este catrimite , cu excepția faptului că ieșirea este trimisă / dev / tty mai degrabă decât procesului curent.
send_user -flags șir
este catrimite , cu excepția faptului că ieșirea este trimisă mai degrabă la stdout decât la procesul curent.
dormi secunde
determină scenariul să doarmă pentru numărul dat de secunde. Secundele pot fi un număr zecimal. Întreruperile (și evenimentele Tk dacă utilizați Expectk) sunt procesate în timp ce Expect dormește.
spawn args program args
creează un nou proces care rulează "program "Stdin, stdout și stderr sunt conectați la Expect, astfel încât aceștia să poată fi citiți și scrise de alțiAştepta comenzi. Conexiunea este întreruptăînchide sau dacă procesul însuși închide oricare dintre identificatorii de fișiere.
Când un proces este început de cătreicre , variabila spawn_id este setat la un descriptor referitor la acel proces. Procesul descris de spawn_id este considerat "actual proces ". spawn_id pot fi citite sau scrise, în practică oferind controlul locului de muncă.
user_spawn_id este o variabilă globală care conține un descriptor care se referă la utilizator. De exemp