De Linux / Unix Command Erwuessen

Erwaart ass e Programm deen Gespréicher mat aneren interaktiven Programmer entsprécht engem Skript. No dem Skript, erwaart datt weess wat aus engem Programm erwaart gëtt a wat d'korrekt Äntwert soll sinn. Eng interpretéiert Sprooch bitt Branching- a High-level Kontrollstrukturen fir de Dialog ze lenken. Ausserdeem kann de Benotzer kontrolléieren an direkt interagéieren wann se se gewënscht sinn, duerno nees Kontroll a Skript zréckzekucken.

Expectk ass eng Mëschung aus Expect a Tk. Et verhält sech sou wéi den Erwaart an den Tk's Wons. Erwaart kann och direkt an C oder C ++ ouni Tcl benotzt ginn.

Den Numm "Erwaart" kënnt aus der Iddi vu Sende / Erwaard Sequenzen populariséiert vu uucp, kermit an aner Modem Kontrollprogrammer. Am Géigesaz zu uucp, Erfaasst ass generaliséiert ginn, sou datt et als Kommandant vum Benotzer op all Programm an op Titt opgefouert gëtt. Erwaart kann mat verschiddene Programmer och gläichzäiteg schwätzen.

Wat erwaart Iech kënnen maachen

Zum Beispill, hei si puer Saachen datt de Kommando kann erwaarden:

Et gëtt vill verschidden Ursaachen firwat d' Shell dës Aufgaben net fäeg maachen. All méiglech mat Expect.

Allgemeng, Waat ass nëtzlech fir all Programm ze laafen, deen Interaktiounen tëschent dem Programm an dem Benotzer erfuerdert. All dat ass néideg, datt d'Interaktioun programmatically ze charakteriséieren. Erwaart kann och d'Kontrolle vum Benotzer ze ginn ouni d'Kontroll kontrolléiert ze kontrolléieren. Andeems kann de Benotzer och nach all Kontrolle vum Skript leeën.

Verbrauch

Erwuessen liest cmdfile fir eng Lëscht vun Kommandoen fir auszeféieren. Et kann erwächt sinn implizit op Systemer déi de # ënnerstëtzen! Notation per Markéierung vum Skript als ausféierbar a fir déi éischt Zeil am Skript ze markéieren:

#! / usr / local / bin / ass d'Erwaart -f

Natierlech muss de Wee genau präziséieren, wou Expect live. / usr / local / bin ass just e Beispill.

De -c -Flag prefix e Kommando, dee virum e Script fonnt gëtt. De Kommando soll zitéiert ginn fir ze verhënneren, datt d'Shell opgebrach ass. Dës Optioun kann méi oft benotzt ginn. Verschidde Kommandoen kënnen mat engem eenzegen -c ausgeführt ginn, andeems se se mat Semicolonnen ze trennen. D'Kommanden gi ausgezeechent an d'Uerdnung déi se erscheinen. Wann Dir Expectk benotzt, gëtt dës Optioun als Kommandéiert uginn.

De -d-Fändel erméiglecht eng diagnostesch Ausgaassung, déi haaptsächlech intern intern Aktivitéit vu Befehle bericht wéi d'Erwaardung an d'Interagéieren. Dëse Fändel ass dee selwechte Effekt wéi "exp_internal 1" am Ufank vun e Skript Expect plus der Versioun vum Erwaardend gedréckt.

De -D-Fändel erméiglecht et eng interaktive Debugger. Eng ganz Integer sollte viru kommen. De Debugger féiert d'Kontroll virun der nächster Tcl Prozedur, wann de Wäert net Null ass oder wann en ^ C gedréckt gëtt oder e Breakpoint fonnt gëtt oder e anere passende Debugger-Kommando an de Skript erscheint. Wann Dir Expectk benotzt, gëtt dës Optioun als - Debug genannt.

De -f-Flag prefix e Fichier vun deem fir Kommandoen ze liesen. De Fändel selwer ass fakultativ, well et just nëtzlech ass wann Dir de #! Notation, sou datt aner Argumenter op der Kommandozeil ze lounen. Wann Dir Expectk benotzt, gëtt dës Optioun als - fichéiert.

Standard gespaart ass de Kommando-Datei geläscht a léisst sech ganz ausgefouert. Et ass heiansdo wënschenswäert, Dateien op eng Linn ze liesen. Fir dës Funktioun arbiträr Dateien ze zwéngen, benotzt de -B- Fändel. Wann Dir Expectk benotzt, gëtt dës Optioun als -buffer uginn.

Wann d'Sait "-" als Dateinumm geliwwert gëtt, gëtt d'Standardeingriff stattdessen gelies. Benotzt "./-" aus enger Datei déi "tatsächlech" genannt gëtt.

De -i Markéierter verursaacht Erwaart Iech interaktiv befollegen d'Befehre ze maachen anstatt se aus enger Datei ze liesen. Prompting ass ofgeschloss iwwer den Ausgabbefehl oder op EOF. De -i -Flag ass ugeholl, ob keng Kommando-Datei nor -c benotzt gëtt. Wann Dir Expectk benotzt, gëtt dës Optioun als -interaktiv uginn.

- kënnt benotzt fir d'Enn vun den Optiounen ze begrenzen. Dëst ass nëtzlech, wann Dir en optionalen Argument fir Är Skript passe wëllt, ouni datt Dir vun Expect interpretéiert gëtt. Dëst kann an der # sinn! Linn fir keng fläisslech Interpretatioun vum Erwaard ze vermeiden. Zum Beispill ginn déi folgend ursprénglech Argumenter wéi de Skriptnam am variablen Argv .

#! / usr / local / bin / ass -

Stëmmen datt déi üblech getopt (3) an exekutive (2) Konventioune mussen observéiert ginn wann et Argumenter op d'# gëtt! Linn.

De Fichier $ exp_library / expect.rc gëtt automatesch wann Dir kënnt, ausser den -N-Fändel benotzt. (Wann Dir Expectk benotzt, gëtt dës Optioun als -NORC bezeechent.) Direkt duerno ass d'Datei ~ / .expect.rc automatesch réckleefeg, ausser de -n-Fändel benotzt. Wann d'Ëmännerungsvariable DOTDIR definéiert ass, gëtt se als Verzeichnis behandelt an et .expect.rc gëtt ausgelies. Wann Dir Expectk benotzt, gëtt dës Optioun als -norc uginn. Dëst Sourcing trëfft nëmme nach e-c Flags aus.

-v bewirkt Erfaasst d 'Versiounsnummer an Ausfahrt auszeginn. De Korrespondenzflag in Expectk, deen laang Flaggenenn benotzt, ass d'Version.

Optional Arg sinn op eng Lëscht opgezielt an an der Variabel, déi agi agt a gespäichert ass. Argc gëtt un d'Länge vun argv initialiséiert.

Argv0 gëtt definéiert als Numm vum Skript oder binär, wann keen Skript benotzt gëtt. Zum Beispill dréckt den Numm vum Skript a d'éischt dräi Argumenter:

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

Commands

Erwaardt d'Tool Command Language. Tcl gëtt Kontroll Kontroll (wann, fir, breed), Ausdréck Evaluatioun a verschidde aner Fonktiounen wéi Rekursioun a Prozedur Definitioun. D'Commands déi hei gebraucht, awer net definéiert sinn (set, if, exec) Tcl Kommandë sinn. Erwaach ënnerstëtzt méi Befehle. Ass näischt anescht uginn, ginn d'Befehle de richtege String zréck.

D'Commanden ginn alphabetesch geläscht fir datt se séier kënne lokaliséiert ginn. Allerdéngs kënne nei Benotzer d'Méiglechkeet et einfach ze starten beim Liese vun den Beschreiwungen vun den Erfaassen, schécken, erwaarden an interagéieren an dës Reiefolleg.

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

schreift d'Verbindung zum aktuellen Prozess . Déi meeschten interaktive Programmer detektéieren EOF op hir stdin an eraus. also schroft ass normalerweis genuch fir den Prozess och ëmzebréngen. De -i Mark deklaréiert de Prozess deen dem entspriechende mam Numm de spawn_id schloss.

Wa se erwaarden an interagéieren erreechen wann de momentan Prozess ofgëtt an implizit eng zoumaachen, awer wann Dir de Prozess ëmzekréien andeems se "exec kill kill pid" brauch, musst Dir explizit zoumaachen .

De -onexec Fahne bestëmmt datt d'Erfëllung Id zu enger neier erfrëschender Prozedur geschloss gëtt oder wann de Prozess iwwerschreift. Fir e Spawn Id opzehuelen, benotzt den Wäert 0. Ee Net-Null-Integer-Wert zwéngt de Schwamm an all neie Prozesser zou.

De -laveschëppel schlooft de Sklave ass mat der Griichesch Id ass. Wann d'Verbindung geschlossen ass, gëtt de Sklave automatesch zougemaach, wann et nach ëmmer opgemaach gëtt.

Egal ob d'Verbindung verbonne implizit oder explizit geschriwwe gëtt, da sollt Dir warten op den aktuellen Kernelprozessplatz ze maachen . Den Nopeschbefehl nennt net op, well et keng Garantie ass datt d'Ofschneiden vun enger Prozessverbindung d'Ursaach erreechen.

Debug [[-now] 0 | 1]

kontrolléiert en Tcl-Debugger deen Iech erméiglecht duerch Aussoen a fixe Breakpoints.

Awer keng Argumenter, gëtt e 1 zréckgetruucht, wann de Debugger net opgefouert gëtt, soss ass en 0 erëm zréckkomm.

Mat engem Argument 1 gëtt de Debugger ugefaangen. Mat engem Argument 0 gëtt de Debugger gestoppt. Wann e 1 Argument virun der neier Markekonscht virungeheescht gëtt, gëtt de Debugger direkt gestart. Sinn den Debugger mat der nächster Tcl-Ausso unzefänken.

De Debug-Kommando ännert keng Fallen. Vergläicht dat mat der Startart Erwaart mat der -D Flagge.

De Kommando vun der Verbindung ze trennen e fëschent Prozess vum Terminal . Et geet weider am Hannergronn. De Prozess gëtt seng eege Prozessprozess uginn. Standard I / O gëtt op / dev / null ëmgeleet.

De folgend Fragment benotzt Trennung fir weider de Script am Hannergrond ze lafen.

Wann {{Gabel]! = 0} Auslaaf vun der Trennung. . .

De folgenden Skript liest e Passwuert a fiert dann e Programm pro Stonn, deen e Passwuert unzemellen wann et lafen. De Skript liefert de Passwuert fir datt Dir nëmmen eemol benotzt hutt.

"{password_to_to_go} = {} {} {{} {if {{fork]! = 0} {sleep 3600; continue} disconnect spawn priv_prog expect password: send" $ expect_out ( 1, Zeechekette) \ r ". . . Ausfahrt}

E Virdeel fir d'Trennung vun der Shell asynchroner Prozedur ze verwierklechen (&) ze trennen ass dat Erwaart déi Terminalparameter virun der Trennung ze späicheren an duerno spéider se nei nei Ptë weisen. Mat & & erwaart Dir hutt keng Chance fir d'Parameteren vum Terminal ze liwweren, well de Termin schonn ofgeschnidden ass vun der Zäit Ofhand vun der Kontrolle.

Ausfahrt [-opt] [Status]

Ursaachen eroflueden oder ze preparéieren.

De -onxitesche Fändel verursaacht den nächste Argument als Exit-Handler. Ouni Argument gëtt den aktuelle Ausgab vun engem Behënnerte zréckgezunn.

De -noexit Mark fällt erwaart Iech virzebereeden, fir ze rauszekommen, awer ze knapp vun der aktueller Kontrolle vum Operative System. De Benotzerdefinéiert Ausgab vun Handwierker lafen och als Expect 's own internal handlers. Kee weidere Kommando däerf gemaach ginn. Dëst ass nëtzlech, wann Dir lach Wann ech an aner Tcl-Extensionen oppassen. Den aktuellen Interpreter (an haaptsächlech Fënster wann an der Tk-Ëmfeld) bleiwen esou datt aner Tcl-Extensionen net opreegen. Wann d' Exit 'Ausfahrt erneiert gëtt (awer dëst kann geschéien), ginn d'Handler net erstallt.

Beim Ausgoen all d'Verbindungen op geschlossene Prozesser sinn zougemaach. Closure gëtt als EOF vu geschlossene Prozesser erkannt. Exit nennt keng aner Aktiounen wéi d'normale _exit (2) Prozedur. Dofir hu geklaute Prozesser déi net iwwerpréift fir EOF ze läschen. (Eng Rei Konditiounen sinn wichteg fir d'Bestëmmung, wéi zum Beispill, wat Signal en erfonnt Prozeze gëtt geschéckt ginn, awer si sinn systemabhängig, typesch ënner der Ausfahrt (3) dokumentéiert.) Spawned Prozesser déi weider lafen, gëtt vun inher'it geerbt.

Status (oder 0, wann net spezifizéiert) gëtt erëm als Exitstatus vum Erwaart zréckgezunn . Ausfahrt implizit ausgeführt gëtt wann d'Enn vum Skript erreecht gëtt.

Exp_Continue [-kontinuier_timer]
De Kommando Exp_Continue erwaart Iech datt Dir weider ausgezeechent gëtt anstatt zréckzekommen, wéi et normalerweis wier. Standard setzt Exp_Continue de Timeout Timer zréck. De Kontingent_timer- Fändel verhënnert dass Timer net opgeriicht ginn. (Méi erwaart Iech nach méi Informatioun.)

Exp_internal [-f Fichier] Wäert
bewierkt aner Befehle fir Diagnosesysteme intern ze schécken fir Erënnerung op stderr wa kee Wäert net Null ass. Dës Ausgab ass ofgeschalt ginn, wann de Wäert 0 ass. Déi diagnostesch Informatiounen beinhalt all Charakter kréien, an all Versuch, mat der aktueller Ausgab vu de Mustere passen.

Wann d'optional Datei zougeliwwert gëtt, gëtt all normal a Debugging-Ausgaach zu der Datei geschriwwen (egal vu de Wäert vum Wäert ). Eng virdrun diagnostic output file ass zou.

De -info- Flag bewäert exp_internal, fir eng Beschreiwung vun de jéngste Net-info Argumenten ze kréien zréckzeginn.

Exp_open [args] [-i spawn_id]
Dir kënnt e Tcl-Dateidentifizéierer, deen der urspréngleche Spawnnummer entsprécht. De Fichier identifizéiere kann dann als benotzt ginn wann se gefrot gouf vum Tcl-Kommando geäntwert . (De Spawn Id soll net méi benotzt ginn. A waat soll net ausgehandelt ginn.

De -leaveopen-Fanger léisst d'Spawn Id op fir Zougang duerch Expect Kommandë maachen. A waat muss op der Spawnnummer ausgezeechent ginn.

Exp_pid [-i spawn_id]
Kuckt d'Prozess Id korrespondéiert mam aktuell geläschte Prozess. Wann de -i- Fändel benotzt gëtt, entsprécht de Pid déi vun der geprüfter Iddi id.

Exp_send
ass en Alias ​​fir ze verschécken .

Exp_send_error
ass en Alias ​​fir send_error .

Exp_send_log
ass en Alias ​​fir send_log .

Exp_send_tty
ass en Alias ​​fir send_tty .

Exp_send_user
ass en Alias ​​fir send_user .

Exp_version [[-exit] Versioun]
ass nëtzlech fir ze garantéieren datt de Skript mat der aktueller Versioun vum Erwaard kompatibel ass.

Ouni Argumenter, gëtt déi aktuell Versioun vum Erwaard zréck. Dës Versioun kënnen deemno an Ärem Skript codéiert ginn. Wann Dir wësst genee datt Dir keng Features vu verëffentleche Versioune benotzt, kënnt Dir eng fréi Versioun spezifizéieren.

Versiounen besteet aus dräi Zuelen, déi duerch Punkten getrennt sinn. Éischt ass déi grouss Zuel. Skripte geschriwwe fir Versioune vun Wonsch mat enger anerer Majoritéit wäerte beweegend sécher net schaffen. Exp_version gëtt e Fehler fonnt, wann déi grouss Zuelen net iwwerhuelen.

Zweeter ass déi kleng Unzuel. Skripte fir eng Versioun mat enger méi grousser kleng Nummer wéi déi aktuell Versioun hänken vun e puer nei Feature a kënnen net ausgefouert ginn. Exp_version gëtt e Feeler geännert, wann d' Majorznummer matspillt, awer d'Skript Minorummer méi grouss ass wéi déi vum laangen Expect .

Drëtt as eng Nummer déi am Verglach vergläicht keen Deel. Allerdéngs gëtt et eropgetrënner wann d' Expect Software Verdeelung op irgendeng Weis geännert gëtt, wéi z. B. duerch weider Dokumentatioun oder Optimiséierung. Et gëtt op all nei kleng Versioun op 0 zréckgesat.

Mat der -exit Mark, erwaart druckt en Fehler an ass ofgefaangen wann d'Versioun ausserhalb vum Datum ass.

Erwaart [[-opts] pat1 body1] ... [-opts] patn [bodyn]
Waart bis een vun de Mustere vun der Erausfuerderung vun engem geläschte Prozess ofgeschloss ass, e spezifizéierten Zäitperiod gëtt oder en Enn vun der Datei gesi ginn. Wann de finalen Kierper leen ass, kënnt et weg.

Muster vun der jéngst erwuesse expect_before Kommando implizit viru all aner Modeller benotzt ginn. Muster vun der jéngster erwuesse -after Kommando ginn implizit no all aner Modeller benotzt.

Wann d'Argumenter op déi ganz Erwaardungserklärung méi wéi eng Zeil erfuerderen, all Argumenter kënnen "gespuert" sinn fir eng Vermeidung vun all Linn mat engem Réckschléi ze vermeiden. An dësem Fall ginn déi üblech Tcl-Ersatzunge sinn trotz der Klameren.

Wann e Muster d'Schlësselwuert ass, gëtt de korrespondéierte Kierper am Ende vun der Datei ausgezeechent. Wann e Muster d'Schlësselwuert ass, gëtt de korrespondenten Kierper beim Timeout ausgezeechent. Wann keen Keyword-Timeout benotzt gëtt, gëtt eng implizit Null Aktioun beim Timeout ausgeführt. D 'Default Timeout Period gëtt 10 Sekonnen awer kann opgesat sinn, zum Beispill op 30, duerch de Kommando "set timeout 30". Eng onendlech Zäitausdréck kann mat dem Wert -1 bezeechent ginn. Wann e Muster d'Schlësselwuert ass, gëtt de korrespondéierte Kierper op entweder Zäitattunn an Enn vun der Datei ausgezeechent.

Wann e Muster entsprécht, da gëtt de korrespondéierte Kierper ausgezeechent. Erwaart gitt d'Resultat vum Kierper zréck (oder déi eidel String, wann keen Muster mat ugepasst ass). Am Fall wou verschidde Modeller matenee verbonnen sinn, gëtt deen deen als éischt erspäert fir e Kierper ze wielen.

All Kéier wann d'nei Ausgab kënnt, gëtt et mat all Muster an der Ordonn verglach, déi se genannt hunn. Dofir musst Dir fir de Verloscht vun engem Match testen, andeems Dir déi lescht Muster eppes garantéiert ersat huet, wéi eng Virschau. An Situatiounen, wou et keng Ufro gëtt, musst Dir Zäitmoos benotzen (grad wéi Dir et géift Dir géift manuell maachen).

Muster sinn op dräi Weeër spezifizéiert. Par défaut sinn Muster ugewise wéi mam Stroumkampf vum Tcl- Match . (Dëse Mustern sinn och ähnlech wéi C-Shell regulär Ausdréck normalerweis "Globus" Musteren genannt). De -gl Fändel kann viraus benotze fir Musteren ze protégéieren déi eventuell d'Fändelen erwaarden datt se et maachen. All Muster mam Begrëff "-" sollt dee Wee geschützt sinn. (All Strang mat "-" reservéiert fir zukünfteg Optiounen reservéiert.)

Zum Beispill kuckt de folgend Fragment fir eng erfollegräich Login. (Schreift datt d' Ofbriechen virgesi sinn, datt et eng Prozedur, an där am Skript definéiert ass definéiert.)

Waart {beschäftegt {setzt beschäftegt \ n; Exp_Continue} ass ofgeschaaft "net validéiert Paart" ofgeschaaft Breakout ofgeschaaft verbannt}

Zitoten sinn op de véiert Muster noutwendeg, well en e Raum erfaasst, wat d'Muster eventuell vun der Aktioun ënnerscheet. Muster mat der selweschter Aktioun (z. B. den 3. oder 4) erfuerdert d'Aktiounen erof. Dëst kann vermeit ginn mat Regexp-Stil Musteren (kuckt hei ënnendrënner). Méi Informatiounen iwwer d'Globus-Stilmuster kënne benotzt ginn am Handbuch vum Tcl.

Regexp-Stil Muster folgen d'Syntax déi vum Tcl's Regexp definéiert gëtt (kuerz fir "regular expression"). Regexp Muster ginn agefouert mat dem Floss -re . Dee virdrun Beispill ka mat engem Regexp geschriwwe ginn wéi:

Waart {beschäftegt {setzt beschäftegt \ n; Exp_Continue} -re "fehlgeschriwwen | ongëltegt Passwuert" ofgeschaaft Breakout ofgeschaaft}

Déi zwee Aarte vun Mustern sinn "onverhuelt". Dëst bedeit datt Musteren net mat der gesamter String passen, mä kann de Match irgendwou an der Sait begrenzen (soulaang wéi et soss ass mat). Benotzt ^ fir den Ufank vun enger Sait ze passen, an $ mat dem Enn ze passen. Denkt datt wann Dir net um Enn vum String wart, da kënnt Äert Äntwerte ganz einfach an der Mëtt vun der Sait an der Saach, wéi se vun dem geläschte Prozess ëmgoe. Obwuel nach ëmmer korrekt Resultater produzéieren, kann d'Ausgab kann onnatürlech sinn. Dofir ass d'Benotzung vu $ encouragéiert wann Dir d'Charaktere genee am Enn vun enger Saach beschreift.

Bedenkt datt an de ville Redaktoren d'^ a $ mat dem Ufank an dem Enn vun den Zeilen passen. Awer well, well et net ze line orientéiert ass, sinn d'Zeeche mat dem Ufank an dem Enn vun den Daten (am Géigesaz zu Linnen) am Moment an der passender Puffer erwuewt. (Och kuckt d'Notiz hei ënnen op "Verdauung vum System".)

De -ex- Fändel verursaacht d'Muster als "genee" String. Kee Interpretatioun vu *, ..., etc gëtt gemaach (och wann déi üblech Tcl Konventioune nach ëmmer beobachtet ginn). Exakt Muster sinn ëmmer onverännert.

De -nocase- Flag mécht Groussbeamten Zeechen vun der Ausgab, fir ze vergläichen, wéi wa se e klengt Zeechen waren. De Muster gëtt net beaflosst.

Während der Liesung vun der Ausgab kënnt méi wéi 2000 Byte fir fréier Bytes ze "ze vergiessen". Dëst kann mat der Funktion match_max geännert ginn . (Bedenkt datt iwwer grouss grouss Wäerter d' Musterpartner verlangsamen .) Wann d' Patrëscht voll_buffer ass, gëtt de korrespondenten Kierper ausgezeechent datt match_max Bytes kritt ginn an keng aner Muster matenee passen. Egal ob de Voll_buffer Stëchwieder benotzt gëtt, sinn déi vergiessene Zeechen geschriwwe ginn fir expect_out (Buffer) ze schreiwen.

Wann de Patrëtt de Schlësselwuert null ass , an Nulls ginn erlabt (iwwer de command_nulls ), de korrespondéierte Kierper ausgezeechent gëtt wann een eenzegen ASCII 0 mat ugepasst ass. Et ass net méiglech mat 0 Globus mat Globus oder Regexp Muster ze passen.

Wann e mat engem Muster (oder eof oder full_buffer) passend ass, gëtt all passende an ongerechtes Output am variablen expect_out (Buffer) gespäichert. Bis zu 9 regexp Substring Matcher ginn an de Variablen expect_out (1, Zeechen) duerch expect_out (9, String) gespäichert . Wann d' Indikatiounskanner viru e Muster benotzt ginn, ginn d'Start- an Ennenditen (an enger Form lues a passen ) vun den 10 Saiten gespäichert an déi Variablen expect_out (X, Start) an erwartend_out (X, Enn), wou X eng Ziffer, entsprécht der Substringpositioun am Puffer. 0 bezitt sech op Strings, déi mat dem ganze Muster passen an fir Globelmuster generéiert gëtt wéi och Regexp Muster. Zum Beispill, wann e Prozess vun "abcdefgh \ n" produzéiert huet, ass d'Resultat vun:

"CD"

ass wéi wann déi folgend Aussoen ausgefouert goufen:

wait_out (0, String) cd set wait_out (buffer) abcd

an "efgh \ n" ass am Ausgabepuffer gelaf. Wann e Prozess d'Output "abbbcabkkkka \ n" produzéiert huet, ass d'Resultat vun:

Erwaart -indices -re "b (b *) * (k +)"

ass wéi wann déi folgend Aussoen ausgefouert goufen:

wait_out (0, Start) 1 set expectout (0, Enn) 10 set expectout (0, String) bbbcabkkkk set expect_out (1, start) 2 set waitout (1, Enn) 3 set waitout (1, string) bb set wait_out (2, Start) 10 erwuessen expect_out (2, Enn) 10 set expectout (2, string) k set expect_out (buffer) abbbcabkkkk

an "a \ n" ass am Ausgabepuffer gelaf. De Muster "*" (a -re ". *") Spillt den Output-Puffer ouni datt Dir méi Ausgaang aus dem Prozess liest.

Normalerweis gëtt d'Ausgabeleit vun den internen Puffer aus der Expect verworf. Dëst kann verhënnert ginn mat engem Muster mat der -notransfer- Fändel. Dëse Fändel ass besonnesch nëtzlech fir Experimentéiere (an ka sou "not note" fir d'Bequemlechkeet experimentéiert).

De Spawn Id ass mat der passende Ausgab (oder Eof oder full_buffer) ass verbonnen an erwartend_out (spawn_id) .

De -timeout Fahne verursacht den aktuellen Erwaardungsbefugnis, de folgenden Wäert als Zäitattunn ze benotzen anstatt de Wäert vun der Timeout Variabelen ze benotzen.

Par défaut sinn d'Muster mat der Ausgaang vum aktuellen Prozess ugesinn, awer de -i- Flag erklärt d'Ausgaang vun der benannten Spawn_id Lëscht mat all folgend Musteren (bis zum nächsten -i ). D'spawn_id Lëscht soll entweder eng Disponibilitéit opgetrueden sinn, déi opgedeckt sinn oder eng Variabel déi esou eng Lëscht vun Spawn_ids steet.

Zum Beispill kënnt de folgende Beispill op "verbonne" vum aktuellen Prozess, oder "beschäftegt", "falsch" oder "ongëlteg Passwuert" vun der spawn_id benannt duerch $ proc2.

Waart {-i $ proc2 beschäftegt {liwwert beschäftegt; Exp_Continue} -re "fehlgeschriwwen | ongëltegt Passwuert" ofgeschaaft Breakout ofgeschaaft}

De Wäert vun der globaler Variabele any_spawn_id kann benotzt ginn fir mat Muster mat all Spawn-Iddien ze passen, déi mat all anere Fändelen an dem aktuellen Erwaardungsbefehl benannt ginn . De Spawn_id vun engem -i- Fändel mat keen assoziéierte Muster (dh direkt vun engem aaner -i ) ass no all aner Mustere fir den selwechten Erwaardungsbefehl mat irgendwelchen_spawn_id verfügbar.

De -i- Fändel kann och eng globale Variable nennen, an deene Fäll d'Variabel fir eng Lëscht vun Offallverhalen liest. D'Variabel ass erëmverännert wann et ännert. Dëst bitt e Wee fir d'I / O Quell ze änneren, wann de Kommando an der Ausféierung kënnt. Spawnsaachen hunn dës Manéier genannt "indirekt" Spawndrécker genannt.

Aktiounen wéi Paus an weider verursachen Kontrollstrukturen (dh, fir , Proc ) op déi üblech Manéier z'änneren. De Kommando Exp_Continue erwaart Iech datt Dir weider ausgezeechent gëtt anstatt zréckzekommen, wéi et normalerweis wier.

Dëst ass nëtzlech fir d'explizite Loopen ze vermeiden oder heizou d'Erklärungen ëmmer erëm erwaarden. Dëst Beispill ass Deel vun engem Fragment fir Rlogin ze automatiséieren. De Exp_Continue vermeet datt Dir eng zweet Erwaardungserklärung schreift (fir nei d'Schrëtt weider ze sichen) wann de Rlogin op eng Passwuert opmécht.

Erwaart {Passwuert: {stty-echo send_user "Passwuert (fir $ Benotzer) op $ Host:" expect_user -re "(. *) \ n" send_user "\ n" "$ expect_out (1, String) \ r" stty Ech hoffen, datt et net an der Vergaangenheet ass, datt et net an der Rei ass. re $ prompt}

Zum Beispill kënnt de folgend Fragment e Usproch leeën eng Interaktioun déi scho komplett automatiséiert ass. An dësem Fall gëtt den Termin an e roude Modus agefouert. Wann de Benotzer "+" dréckt, gëtt eng Variabel inkrementéiert. Wann "p" gedréckt gëtt, ginn e puer Retouren un de Prozess verschéckt, vläicht fir et an iergendeppes ze pocken, an "i" léisst den Benotzer interagéieren mat dem Prozess, fir effektiv d'Kontroll vum Skript ze stehlen. An all Fall kann de Exp_Continue déi aktuell Erwaardung weider Muster passen, déi mat der aktueller Aktioun ausgefouert gëtt.

Awer stänneg-ech erwaarden_after {-i $ user_spawn_id "p" {schécken "\ r \ r \ r"; Exp_Continue} "+" {inkr foo; Exp_Continue} "i" {interact; Exp_Continue} "Bezeechent" exit}

Standard ass Exp_Continue de Timeout Timer zréck. De Timer gëtt net opgeruff, wann exp_continue mat dem -kontinu_timer Fändel geruff ginn.

expect_after [expect_args]
Wierker identesch mat der erwuesse_ virun deenen, datt wann Muster vun deenen erwaart an erwarten_after iwwerfall kënne ginn, d' Erwaardungsmuster benotzt. Kuckt de expect_before Kommando fir méi Informatiounen.

expect_background [expect_args]
D'selwecht Argumenter hu mer erwaart , awer et gëtt direkt zréck. Muster gi gepréift wann ëmmer nees nei Input kënnt. D'Muster Timeout an d' Standard si sinn sans to expect_background a si sinn verworf ginn. An der Vergaangenheet ass d' Erwaart_Béck kommando verwisen virwaat a erwuesse_after Muster genee wéi et erwaart .

Wann d' Erwaardunge_background Aktiounen evaluéiert ginn, gëtt d'Veraarbechtung vun der Uewerfläch fir déi selwecht Verspéidungsnummer blockéiert. Background Processing ass opgehuewen wann d'Aktioun ofgeschloss ass. Wann d'Veraarbechtung vun der Uewerfläch blockéiert ass, ass et méiglech (e Virdeel) ze erreechen op déi selwecht Versécherung Id.

Et ass net méiglech, en Erwaart ze erwaarden, wann e Erwaart_background onblockéiert ass. D'Erwaart_background fir eng bestëmmten Reavef Id is geläscht ginn andeems en en neit Erwaart_-Terrain mat der selwechter Spawn Id deklaréiert. Erwaart erwartend_background mat engem Muster ofgeschaaft dës geplatzt Iddi aus der Kapazitéit fir mat Muster am Hannergronn ze passen.

expect_before [expect_args]
D'selwecht Argumenter hu mer erwaart , awer et gëtt direkt zréck. Musteraktiounspaar vun der jéngst erwuegter expect_before mat der selweschten Spawn-Id ginn implizit an all folgend Erwaardungsbefehlen erwaart . Wann e Muster entsprécht, gëtt et behandelt wéi wann et am Kommando erwaart ginn ass, an den assoziéierten Kierper gëtt am Kontext vum Erwaardungsbefehl ausgezeechent . Wann d'Muster vun deenen erwuessen_efore erwuessen an erwaart kënne passen, ass d' expect_before Muster benotzt ginn.

Wann keen Muster genannt gëtt, gëtt d'Réckgangsnummer net fir all Muster gepréift.

Wann net iwwerdréit vun e -i flag ass, erwarten_ virun Muster mat der Liicht Id id definéiert zu der Zäit, datt de expect_before Kommando ausgezeechent gouf (net wann säi Muster matgestëmmt ass).

De -info-Flag bewäert datt expect_forefore d'aktuell Spezifikatioune vun deem wat mateneen entsprécht . Par défaut gëtt et de Rapport iwwer d'aktuell Iddi Id. Eng optional Spannungs Id Spezifikatioun ka ginn Informatiounen iwwer dës Spawn Id. Zum Beispill

expect_before -info -i $ proc

Déi meescht Spawn-Id-Spezifikatioun kann op d'mannst bestëmmt ginn. De Fändel -indirect dréit direkt direkten Ausdrocksdréck, déi nëmmen aus indirekt Spezifikatioune kommen.

Anstatt eng Spezies-ID-Spezifikatioun ze maachen, de Fändel "-all" de "-info" verëffentlecht fir iwwer all Reavefilleren ze reportéieren.

D'Ausgaang vum -info-Fändel kann Wiederverwendung als Argument erwuesse ginn_ virun.

expect_tty [expect_args]
Esou wéi ech erwaarden ass et gelies Zeechen aus / dev / tty (dh Tastature vu Benotzer). Standardast ass de Liesen a gekacht Modus ausgezeechent. Sou muss d'Leit mat engem Retour ophalen fir se ze erwaarden se ze gesinn. Dëst kann geännert ginn via stty (kuckt de stty Kommando down below).

expect_user [waiting_args]
Esou wéi et erwaart ass awer et liest Zeeche vu stdin (dh Tastendrechter vum Benotzer). Standardast ass de Liesen a gekacht Modus ausgezeechent. Sou muss d'Leit mat engem Retour ophalen fir se ze erwaarden se ze gesinn. Dëst kann geännert ginn via stty (kuckt de stty Kommando down below).

Forschett
e neie Prozess . Den neie Prozess ass eng exakt Kopie vum aktuellen Expect- Prozess . Op Erfolleg gelt d' Génératioun 0 op den neie (Kand) Prozess a gitt d' Prozedur ID vum Kand vum Prozess an den Elteren Prozess zréck . Ausféierlech (onwuel duerch d'Manktemittel vun de Ressourcen, z. B. Verännerplanz, Erënnerung) gëlt d'Gabel -1 zum Elterenprozess zréck, a kee Keeprozeß gëtt geschaf.

Gitt geschéckte Prozesser duerch den Ausgabbefehl exit , wéi den ursprénglechen Prozess . Gitt geschnidde Prozesser erlaabt an de Logbicher ze schreiwen. Wann Dir d'Majoritéit vun de Prozesser net debuggen oder ze protokolléieren, kann d'Resultat net duerchernee ginn.

E puer pty-Implementatioune kënnen e puer vu Lieser a Schrëftsteller verwiesselt ginn, souguer fir e Moment. Esou ass et sécherst Fuerderung ze laafen.

interagéieren [string1 body1] ... [stringn [bodyn]]
gëtt Kontroll iwwert den aktuellen Prozess fir de Benotzer, sou datt Tastungen op den aktuellen Prozess geschéckt ginn an den stdout a stderr vum aktuellen Prozess zréckginn.

String-Kéierspaar kënnen als Argumenter uginn ginn, a wéi engem Fall de Kierper ausgezeechent gëtt wann déi entspriechend String uginn ass. (Standardmäßeg ass de Sait net deen aktuellen Prozess geschéckt ginn .) De Kommutator gëtt iwwerholl, wann den éng Kierper fehlt.

Wann d'Argumenter op déi ganz Interaktiouns- Anweisung méi wéi eng Zeil erfordert, kënnen all d'Argumenter "verstouss" sinn fir een ze vermeiden, datt all Zeil mat engem Réckschléi enden. An dësem Fall ginn déi üblech Tcl-Ersatzunge sinn trotz der Klameren.

Zum Beispill gëtt de folgenden Kommando ausgefouert mat den folgenden Kierperpatrouen definéiert: Wann ^ Z gedréckt gëtt, gëtt Expect suspended. (De -reset flag erënnert den terminalen Modus.) Wann A ^ gedréckt ass, gesitt de Benotzer "Dir hutt e Kontroll-A" an de Prozess gëtt e ^ A geschéckt. Wann $ gedréckt ass, gesäit de Benotzer den Datum. Wann ^ C gedréckt gëtt, erwaart d' Ausgab. Wann "foo" agefouert gëtt, gesitt de Benotzer "Bar". Wann ~~ gedréckt ass, gëtt den Expo- Interpreter interaktiv ënnerstëtzt.

CTRLZ \ 032 interagéieren {-reset $ CTRLZ {exec kill -STOP [pid]} \ 001 {send_user "Dir hutt e Kontroll-A \ n" genannt; Send "\ 001"} $ {send_user "Den Datum ass [Taktformat [Taktfrequenz]]."} \ 003 Exit foo {send_user "bar"} ~~}

Bei String-Kierpereparameter si Stécker no der Ännerung déi si als Argumenter bezeechent sinn. Strings, déi deelweis iwwerdeneen, ginn net zum aktuellen Prozess an d'Erwaardung vum Reschtende komm. Wann d'Zeechen dann esou geliwwert ginn, datt et net méi méiglech ass e Match ze sinn, nëmmen de Deel vun der Saach gëtt op den Prozess geschéckt ginn deen net méi engem anere Match spillen kann. Also, Strings déi Substrings vun de Partial Matcher hu mateneen spéider matmaachen, wann déi ursprénglech Schnëtt, déi versicht ze passen, schliisslech léist.

Standard ass String passend genau mat wéineg Wildcards . (Am Géigendeel, d' Erwaardungskommissioun benotzt Standardfaarf mat globem Stil.) Den -ex- Fändel kann benotzt ginn fir Musteren ze protégéieren, déi soss eventuell interagéiert Fändelen ze maachen hunn. All Muster mam Begrëff "-" sollt dee Wee geschützt sinn. (All Strang mat "-" reservéiert fir zukünfteg Optiounen reservéiert.)

De -re Fändel zwéngt d'String als Uweisungsmuster ze interpretéieren. An dësem Fall passende Substrings sinn an der Variablen interact_out ähnlech wéi déi erwuessener Erwaardung hir Output am variablen expect_out . De -indices flag ass ähnlech ënnerstëtzt.

D'Muster eof stellt eng Aktioun vir, déi duerch d'Enn vun der Datei ausgezeechent gëtt. E separate Bezeechnungsmuster kann och den -Ausgangsflag verlaangen , an deem Fall ass matzemaachen, wann en Eof bei der Ausgab geschriwwe gëtt. D'Standard eof Aktioun ass "zréck", sou datt interagéiert einfach einfach op all EOF zréck.

De Muster Timeout féiert e Timeout (an e Sekonn) a Aktioun, déi ausgezeechent gëtt ouni nozeechent Zeeche fir eng gegebene Zeit gelies ginn. De Timeout- Muster gëlt fir den zënter kuerzem spezifizéierte Prozess . Et gëtt keng Standard Timeout. Déi speziell Variabel "Timeout" (déi vum Erwaardungsbefehl benotzt gëtt ) huet keen Afloss op dësen Ausmooss.

Zum Beispill konnt d'folgend Ausso zum Autowueten Benotzer benotzt ginn, déi net fir eng Stonn näischt fonnt gi sinn, mee déi ëmmer nach ëmmer Systemmeldung kréien:

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

Wann d'Muster d'Schlësselwuert null ass , an d'Nulls ginn erlabt (iwwer de Kommando remove_nulls ), de korrespondéierte Kierper ausgezeechent gëtt wann een eenzegen ASCII 0 mat ugepasst ass. Et ass net méiglech mat 0 Globus mat Globus oder Regexp Muster ze passen.

Virun engem Muster mat de Fändel bewunnt bewierkt de variablen interact_out (spawn_id) op de spawn_id déi op d'Muster (oder eof) passen.

Aktiounen wéi Paus an weider verursachen Kontrollstrukturen (dh, fir , Proc ) op déi üblech Manéier z'änneren. Allerdéngs kënnt d' Verzicht effektiv interagéieren ze zréck an säin Animateur, während Inter_return bewosst ass , fir eng Ruf zréckzekréien. Zum Beispill, wann "proc foo" genannt gëtt interagéiert deen dann d'Aktioun inter_return gemaach huet , géif de Proc foo erëmkommen . (Dëst bedeit datt wann Interaktiounsinterpreter interaktiv drop weise kënnen interagéieren an d'Interaktioun weiderfuere kënnen, während inter_return bewierkt datt d'Interaktioun fir säin Unzuel zréckzekommen.)

Während enger Interaktiv gëtt de roude Modus sou benotzt datt all Charaktere vum aktuellen Prozess iwwerholl ginn . Wann den aktuellen Prozess net Steiersignal fënnt, da stopps de wann e Stop-Signal geschéckt (standard2 Z). Fir d'Ersetzen vun engem neie Signal (z. B. mam "kill -CONT") ze schécken. Wann Dir wierklech e SIGSTOP fir e gudde Prozess (by ^ Z) schécke wëllt, kucke zuer ewech a wiere fir Äert Programm. Op där anerer Säit, wann Dir e SIGSTOP schécken wëllt fir sech selwer z'expulséieren, zéckt éischter Dolmetscher (vläicht mat engem Fluchzeechen) a dréckt dann ^ Z.

String-Kéierspaier kënnen als Këscht benotze fir ze vermeiden datt Dir den Interpreter annergitt an d'Kommandoen interaktiv maachen. De fréieren Terminmodus gëtt benotzt, während de Kierper vun engem String-Kierper Paar ausgezeechent gëtt.

Fir Schnelle maachen d'Aktiounen am Rohmodus par Default. De -reset flag setzt den Termin nees op de Modus, deen hie viru kommunaliséiert gouf (onwahrscheinlech, gekacht Modus). Remarkéiert datt d'Zeechentzeechen, wann de Modus ëmgeschalt ginn ass, verluer ginn (eng onmëssverständlech Feature vum Terminal Treiwer op e puer Systemer). Déi eenzegst Ursaach ze benotzen -reset ass wann Är Handlung hänkt dovun ofleeën am gekachten Modus.

De -echo Fändel schreift Zeechen, déi mat dem folgendem Muster mat dem Prozess erofgestréckt ginn , deen se agefouert huet wéi all Zeeche liest. Dëst kann nëtzlech sinn wann de Benotzer Réckblécke vun deelweis typesch Mustere gesinn.

Wann e Muster zougeholl gëtt, awer schliisslech net matdeelen, ginn d'Charaktere vum richtege Prozess gesat . Wann de opgekläerte Prozess dann opgeholl huet, kritt de Benotzer d'Zeechen zweemol gesinn. -echo ass wahrscheinlech nëmme just an de Situatiounen, wou de Benotzer unwahrscheinlech net d'Muster abegraff. Zum Beispill ass de folgend Auszug vu rftp, dem recursive-ftp Skript, wou de Benotzer probéiert gëtt a gitt ~ g, ~ p oder l, fir déi aktuell Verzeichnis rekursiv ze kréien, ze setzen oder ze liesen. Dës sinn esou wäit ewech vun den normalen FTP-Kommandoen, datt de Benotzer net wahrscheinlech fir nozedenken an nozekucken ass, ausser datt et falsch ass, a wéi engem Fall, si wahrscheinlech just d'Resultat trotzdem ignoréieren.

interagéieren {-echo ~ g {getcurdirectory 1} -echo ~ l {getcurdirectory 0} -echo ~ p {putcurdirectory}}

De -nobufferflag verschéckt Charaktere mat dem folgendem Muster op den Ausgabprozess wéi d'Zeeche geliest ginn.

Dëst ass nëtzlech wann Dir e Programm wëllt Echo erëmfannen. Zum Beispill kënnt déi folgend benotzt fir ze iwwerwaachen, wou eng Persoun en Dréck (e Hayes-Stil Modem) benotzt. All Kéier wann "atd" gesi gouf, gëtt de Skript Protokoll de Rescht vun der Linn.

deprot% 1 {interact -nobuffer -re "(. *) \ r" return returns $ log "[clock format]

Während der Interaktiv gëtt de fréiere Gebrauch vum Log_user ignoréiert. Insbesondere interagéieren se hir Ausgab uginn fir ze protokolléieren (an d'Standardausgangssignal) geschriwwe ginn, well se ugeholl datt de Benotzer net blann aginn.

De -o Fliger verursaacht folgend Schlësselkäerpaar fir de Ausgang vum aktuellen Prozess applizéiert ze ginn . Dëst kann nëtzlech sinn, zum Beispill, beim Ëmgank mat Hosten déi onerwaart Zeechen während enger Telnet Sessioun verschécken.

Par défaut gëtt d' Interaktioun erwart datt de Benotzer schreift stdin a liesen stdout vum Erwaardungsprozess selwer. De -u Fändel (fir "Benotzer") mécht Interaktioun fir de Benotzer als de Prozess, deen duerch säin Argument genannt gëtt (dat muss e spawned id) sinn.

Dëst erméiglecht zwee onverwandte Prozeduren zesumme mat engem explizite Loop zesummenzestellen. Fir ze hëllefen, ze debuggen, Diagnostics erwaart ëmmer op stderr (oder stdout fir verschidde Protokollen an Debuggen). Aus dem selwechte Grond ass de Kommandant vun der Interpretatioun lëschteg interaktiv aus Stdin ze liesen.

Zum Beispill erënnt de folgend Fragment e Login- Prozess . Duerfir knäppt de Benotzer (net gezeechent) an endlech verbënnt déi zwee zesummen. Natierlech kann all Prozess fir den Login zoumaachen. E Shell, zum Beispill, erméiglecht de Benotzer d'Aarbecht ouni Kont a Passwuert ze liwweren.

spawn login login login $ spawn_id spawn tip modem # wielt zeréck op User # connect user to login interact -u $ login

Fir Ausguelung op verschidde Prozesser ze schécken, liesen all Lëscht vun de Spannungsnummer Lëscht mat engem -Ausgangsflag . D'Input fir eng Grupp vun Output-Spawn-Iddien kann duerch e Spawn-Id-Lëscht festgeluecht ginn mat engem Input- Flag. (Béid -input an -Ausgang kënnen Lëschten an der selwechter Form féieren wéi de -i- Fändel am Erwaardungsbefehl , ausser datt any_spawn_id net interaktiv ass bedeitend.) All folgend Fändelen an Saiten (oder Muster) gelten dës Input fir eng aner - Input Flags. Wa keng Input erscheint, -output implizéiert "-innput $ user_spawn_id -output". (Ähnlech wéi mat Muster déi net -inputéieren .) Wann een -input spezifizéiert gëtt, gëtt dat überschritt $ user_spawn_id. Wann en zweeter Input spezifizéiert gëtt, heescht dat% inversioun $ spawn_id. Zousätzlech Input Flaam kann uginn ginn.

Déi zwee implizéiert Input Prozesser default fir hir Ausgänge wéi $ spawn_id an $ user_spawn_id (an ëmgekéiert). Wann e Input- Fluch mat No- Output- Flag erscheint , ginn d'Zeeche vun deem Prozess verworf.

De -i -Flag féiert e Ersatz fir den aktuellen Spawn_id wann keng aner Input- oder Ausgabfuerderen benotzt ginn. A -i Fändel implizéiert en -o Fändel.

Et ass méiglech, déi Prozesser ze veränneren, déi interagéiert ginn duerch indirekt Spawn-Iddien. (Indirekt Spawn-Iden sinn am Abschnitt iwwert de Kommando erwärt.) Indirekt Spawn-Iddien ginn mat der -i, -u, -input oder -output Fahne genannt.

Interpreter [args]
bewierkt datt de Benotzer interaktiv fir Erwuesse- a Tcl-Kommandoen opgefuerdert gëtt. D'Resultat vun all Kommando gëtt gedréckt.

Aktiounen wéi Paus an weider verursachen Kontrollstrukturen (dh, fir , Proc ) op déi üblech Manéier z'änneren. Allerdéngs rufft d' Interpreter fir säin Ament zréckzekommen, während inter_return verwierklecht en Interpreter verursaacht fir e Retour an sengem Animateur ze verursaachen. Zum Beispill, wann "proc foo" genannt Dolmetscher, déi dann d'Aktioun inter_return gemaach huet , géif de Proc foo erëmkommen . All aner Kommando verwiesselt de Dolmetscher weider fir nei Kommandoen ze bastelen.

Par défaut enthält d'Prompter zwee ganz aner. Déi éischt Integer beschreift d'Tiefe vum Evaluatiounsstack (dh, wéi vill Mol Tcl_Eval genannt gouf). Déi zweet Ganzt ass d'Tcl Geschichtkennung. D'Prompter kënnen festgeluegt ginn andeems een Prozedur "prompt1" genannt gëtt, deem säi Wäertwert d'nächst Ufro gëtt. Wann eng Ausso Opener Quotes, Parens, Klameren oder Klammern huet, eng sekundärer Optrag (standard "+>") op Newline erausgeet. D'sekundärer Optragsoptioun kann festleeën andeems ee Prozedur "prompt2" genannt gëtt.

Während dem Interpreter , de gekachte Modus benotzt, och wann de Ruffe sou rau an de Modus benotzt.

Wann stdin zougemaach gëtt, wäert den Interpreter zréckginn, ausser de -eof Flag gëtt benotzt, an deem Fall gëtt de spéider Argument opgeruff.

log_file [args] [[-a] Datei]
Wann e Dateinumm agefouert gëtt, solle log_file eng Transkriptioun vun der Sitzung (ufänkt uewen ) an der Datei opgefëllt ginn. log_file stoppt d' Astellung wann keen Argument gegeben gëtt. Alle virdrun Log Datei gëtt zou.

Amplaz e Dateinumm kann e Tcl-Dateidentifikatioun iwwer d' Zeechen -open oder -leaveopen Flags versuergt ginn . Dëst ass ähnlech wéi de Spawnbefehl . (Kuckt dofir fir méi Info.)

De -a Fändel zwéngt d'Ausgab ze protokolléieren, déi vum Kommando vum Log_user suppriméiert gouf.

Standard gespaart den Befehl log_file hänkt mat eeleren Dateie anstatt ewechzehalen, fir d'Bequemlechkeet ze widderstëmmen ze sichen an e puer mol an enger Sessioun ze schécken. Fir d' Fënster opzehuelen , benotzt de -noappend Fändel.

De -info- Flag bewäert log_file fir eng Beschreiwung vun de jüngste Net-info Argumenten ze kréien zréckzeginn.

log_user-info | 0 | 1
Standardastréckt gëtt de Sende / d'Erwaardung vum Dialog logéiert a stdout (an e Logbuch wann se geännert ginn). De Logbatch zu stdout gëtt duerch de Kommando "log_user 0" deaktivéiert a gëtt mat "log_user 1" erneed ginn. Logged un den Logbuch steet onverännert.

De -info- Fändel verursaacht log_user fir eng Beschreiwung vun de jéngste Net-info Argumenten ze kréien zréckzeginn.

Match_max [-d] [-i spawn_id] [Gréisst]
definéiert d 'Gréisst vum Puffer (an Bytes) intern benotzt gëtt. Mat Argument mat der Gréisst ass d'aktuell Gréisst nees zréckkomm.

Mat der -d flag ass d'Standard Gréisst uginn. (D'initial Standard ass 2000.) Mat dem -i Mark ass d'Gréisst ugeluecht fir déi benannt Spawn Id, soss ass et fir den aktuellen Prozess gespaart .

Iwwerlagerung [- # spawn_id] [- # spawn_id] [...] Programm [args]
"Programms Argument" aus dem aktuellen Expect- Programm aus, deen ofgeschloss ass. E klenge Bindegargument kritiséiert e Bindestrich virun de KommandoName wéi wann et en Login-Shell ass. All spawn_ids ginn zougemaach, ausser fir déi sougenannten Argumenter. Dës ginn op déi genannte Dateiidentifizéierer zougemaach.

Spawn_ids ginn opgetruëcht fir Dateipenner fir den neie Programm ze erliewen. Zum Beispill gëtt d'folgend Linn e Schach erausgesicht an et erméiglecht et duerch den aktuellen Prozess ze kontrolléieren - soten e Schachmeeschter.

Dee Sproch_id -1 $ spawn_id -2 $ spawn_id Schach

Dëst ass méi effizient wéi "interact -u", awer et mécht d'Fähigkeit, programmiséiert Interaktioun ze maachen, well den Expect- Prozess net méi kontrolléiert gëtt.

Bedenkt datt keen Kontrollkontroll gëtt. Also, wann Dir de Standardeingang trennt oder remappet, ginn Programmer déi d'Gestiounskontroll (Schuppen, Login, etc) net richteg funktionnéieren.

Paritéit [-d] [-i spawn_id] [value]
definéiert ob d'Paritéit sollt halen oder aus der Ausgab vu geschwatenen Prozesser stéieren. Wa Wäertung Null ass, gëtt Paritéit ewechgeholl, soss ass et net entlooss. Mat engem Wäert Argumenter gëtt de aktuellen Wäert net zréckgesat.

Mat dem -D- Fändel ass de Standardparameterecht festgeluegt. (Déi éischt Standard gëtt 1, also Paritéit gëtt net gestoppt.) Mat dem -i Mark ass de Paritéitse value fir déi benannt Spawnnummer gesetzt, soss ass et fir den aktuellen Prozess gespaart .

[änneren] [änneren | Quelltext änneren]
definéiert oder net Nulls beibehalen oder aus der Ausgab vun ausgeriichtte Prozesser ginn ier e Muster passen oder an de variablen expect_out oder interact_out gespäichert ginn . Wann de Wäert 1 ass, sinn Nulls geläscht. Wann de Wäert 0 ass, sinn Nulls net erofgaangen. Mat engem Wäert Argumenter gëtt de aktuellen Wäert net zréckgesat.

Mat der -d Flagge ass de Standardwert ugesat. (Déi éischt Standard gëtt 1, also nulls ofgeschaaft.) Mat dem -i Mark ass de Wäert fir déi benannt Spawnnummer gesetzt, soss ass et fir den aktuellen Prozess gespaart .

Egal ob Nullen erofgeholl ginn, Erwaart Null Bytes op de Log an stdout.

schécken [-flag] Zeecheketten
Sendt String dem aktuellen Prozess . Zum Beispill, de Kommando

"Hallo Welt" r "

schéckt d'Zeechen, helloworld op den aktuellen Prozess . (Tcl beinhalt en printf -like Kommando (sougenannte Format ), deen arbiträr komplex Stéckwierker bauen kann.)

Charaktere ginn direkt geschéckt, obwuel Programme mat Zeil-Pufferter Input déi Zeechen net liesen bis e Retourchef gëtt geschéckt. E Remboursement Zeechen ass "+ r" bezeechent.

De Fändel zwéngt den nächste Argument ze interpretéieren als e String als e Fändel. All String kann virausgesat mat "-" ob et net wierklech e Fändel ausgesäit. Dëst bitt e zouverléissegem Mechanismus fir variable Variatiounen ze spezifizéieren ouni sech vun deenen, déi versehentlech aussieke wéi Flags aus. (All Strang mat "-" reservéiert fir zukünfteg Optiounen reservéiert.)

De -i Mark deklaréiert datt d'String un de benennere Spawn_id geschéckt ginn ass. Wann de spawn_id user_spawn_id ass, an den Terminal gëtt an de richtege Modus, Newlines an der Zeechekette sinn iwwersaat ginn fir zréckzefëllen-Sequenzen, sou datt se erscheinen wéi wann de Terminal an de Kach Modus war. D' Beweegungslëscht sëtzt dës Iwwersetzung.

De -null Fahne sendet null Zeechen (0 Bytes). Par défaut gëtt e Null geschéckt. Eng ganz Integer kann de -null folgen fir unzeginn wéi vill Null un ze schécken.

D' Bremse-Flak generéiert eng Paus Zustellung . Dëst ass nëmme Sënn, wann d'Spawn Id bezweckt op e tty-Apparat, deen iwwer "Spawn -open" geöffnet gouf. Wann Dir e Prozess wéi Spëtz geläscht hutt, sollt Dir tip-convention fir eng Paus generéieren.

De -s- Fändel zwéngt d'Ausgruew ze lues ze lues "verschlësselt" ze vermeiden, sou datt déi gemeinsam Situation evitéiert datt e Computer e Puffer ausgitt, dee fir e Mënsch entwéckelt gouf deen net dee selwechte Puffer géift ginn. Dës Ausgab ass kontrolléiert duerch den Wäert vun der Variabel "send_slow", déi eng zwou Elementerelongn. Dat éischt Element ass eng Ganzt, déi d'Zuel vu Bytes beschreiwt an atomesch ze schécken. Déi zweet Element ass eng richteg Zuel déi beschreiwt d'Nummer vun de Sekonnen, duerch déi d'Atommeschreiwe getrennt sinn. Zum Beispill, "set_slow {10 .001}" setze wäert "send -s" zwéngen, Strings mat 1 Millisekonn zwëschen 10 verschécken ze verschécken.

De -h Mark Kräiz trëtt fir d'Ausgruew ze schécken (e bësse wéi e menschlechen tatsächlechen Typ). Mënschlech wéi d'Verzögerungen sinn tëscht den Zeechen. (De Algorithmus baséiert op enger Weibull Verdeelung, mat Ännerunge fir dës speziell Applikatioun.) Dës Ausgab ass kontrolléiert duerch den Wäert vun der Variablen "Send_ Human", déi eng fënnef Elementerelëscht halen. Déi éischt zwee Elementer sinn duerchschnëttlech Interarrivalzäit vun Zeechen a Sekonne. Déi éischt gëtt standardiséiert. Déi zweet gëtt mat Wuertesendungen benotzt, fir d'subtile Pausen ze simuléieren déi heiansdo bei sou Iwwergangsmoossnamen geschitt. Den drëtten Parameter ass e Verhältnisser vun der Variabilitéit, wou .1 ganz variabel ass, 1 ass verhältnisméisseg verännerlech, an 10 ass ganz invasioun. Déi Extremer sinn 0 bis onendlech. Déi lescht zwee Parameteren sinn eng respektiv Minimal- a maximum Interarrivalzäit. De Minimum a maximum ginn déi lescht genotzt a "klickt" d'endgülteg Zäit. Den ultimative Durchschnëtt ka ganz verschidden sinn wéi déi gegebene Moyenne, wann de Minimum a maximal Klick genuch Wäerter.

Als Beispill dréit de folgenden Kommando eng séier a konsequent Typist:

set_human {.1 .3 .0 1 .05 2} Schécken -h "Ech sinn hongereg. Loosst et a Mëttegiessen".

während déi folgend méi eegent wéi ee Kandeläus:

set_human {.4 .4 .2 .5 100} schécken -h "Goodd Party Nuetsstatioun!"

Bedenkt datt d'Feeler net simuléiert sinn, obwuel Dir Faustkorrekturkissiounen selwer duerch Ersetzen vu Feeler a Korrekturen an engem Sendungsargument ka agefouert hunn.

D'Fändelen fir d'Null-Zeechen ze verschécken, fir Broscht ze schécken, fir ze luesen Output auszelechnen an fir d'humanistesch Ausgäeregung exklusiv ausschliisslech. Nëmme gëtt de leschte spezifizéiert benotzt. Ausserdeem kann keen String Argument mat de Fändelen fir Null Charaktere oder Breaken spezifizéiert ginn.

Et ass eng gutt Iddi fir de éischten ofzeschécken fir e Prozess ze erwëschen . Erwaart Iech de Prozess ze waarden fir ze starten, wann Dir schéckt net. Besonnesch, wann den éischte Send fäerdeg ass virum Prozess ofgeschloss ze ginn, fuerdere mir de Risiko datt Är Daten ignoréiert hunn. An Situatiounen, wou interaktive Programmer keng éischt Promix agefouert hunn, kënnt Dir ufänken mat enger Verzögerung wéi an:

# Fir Iech Hacker ze hindeiten hintsehnt wéi Dir se breet, # gëtt dësen System net fir eng extern Passwuert ze maachen. # Waart 5 Sekonne fir d'Exekutioun op de komplette Spann Telnet very.secure.gov schlofen 5 Passwuert verschécken

Exp_send ass en Alias ​​fir ze verschécken. Wann Dir Expectk oder eng aner Variant vun Erwaardung an der Tk-Umellung benotzt, gëtt d' Sende definéiert duerch Tk fir eng ganz aner Zilsetzung. Exp_send ass fir Kompatibilitéit tëscht Ëmfeld. Ähnlech Aliasen ginn fir aner Sendungsbefehl ugebueden.

send_error [-flag] Zeecheketten
ass wéi se schécken , ausser dass d'Ausgab an d'stderr anescht wéi den aktuellen Prozess geschéckt gëtt .

Send_log [-] Zeecheketten
ass wéi se schécken , ausser datt de Saitestéck nëmmen an d'Log Datei geschéckt gitt (kuckt log_file .) Déi Argumenter ginn ignoréiert wann keen Logbicher opgemat ass.

send_tty [-flags] Zeecheketten
Et gëtt wéi gesandt , ausser datt d'Ausgab an / dev / tty anescht wéi déi aktuell Prozedur geschriwwe gëtt .

send_user [-flag] Zeecheketten
Et gëtt wéi gesandt , ausser datt d'Ausgäerde stdout an den aktuellen Prozess geschickt gëtt .

schlofen Sekunden
verursacht de Skript fir d'bestëmmte Zuel vu Sëch ze schlofen . Seconds kënnen e Dezimalzuel sinn. Interrupts (a Tk-Eewäisser, wann Dir Expectk benotzt) gi veraarbecht, wa se erwaart.

Spawn [args] Programm [args]
schafft en neie Prozess deen "Programm Argued" lafen. Se stdin, stdout a stderr si verbonne mat Erweiderung, sou datt se geläscht a geschriwwe ginn vun aneren Expect Kommandoen. D'Verbindung gëtt geblooft, oder wann de Prozess selwer ee vun den Dateinidentifizéierter zou.

Wann e Prozess duerch Spawn ugefaang ass , gëtt de variablen spawn_id op en Descriptor opgesat, deen dem Prozess entsprécht . De Prozess, dee vum spawn_id beschriwwe gëtt, gëtt als "aktuell Prozess " bezeechent. Spawn_id kann gelies oder geschriwwe ginn, an doduerch Aarbechtsplazkontrolle gëtt.

user_spawn_id ass eng globale Variabel, déi e Deskriptor enthält, wat fir de Benotzer steet. Zum Beispill, wann spawn_id op dësen Wäert setzt ass, erwächt sech wéi erwuessen_user .

. Error_spawn_id ass eng globale Variabel, déi e Deskriptor enthält, deen d'Standardfehler referséiert. Zum Beispill, wann spawn_id op dësem Wäert gesetzt ass, fügt ze behuelen wéi send_error .

tty_spawn_id ass eng globale Variabel mat engem Descriptor, déi op / dev / tty steet. Wann / dev / tty net existéiert (z. B. an engem cron, at oder batch script), dann tty_spawn_id ass net definéiert. Dëst ka gepréift ginn wéi:

Wann {{vars tty_spawn_id]} {# / dev / tty existéiert} else {# / dev / tty existéiert net # wahrscheinlech a Cron, Batch, oder am Skript}

Spawn gëtt den Unix Prozess ID. Wann kee Prozess erageet gëtt, gëtt 0 erëm zréck. De variablen spawn_out (Sklave, den Numm) gëtt op den Numm vum pty-Sklave-Gerät gesat.

Par défaut, repetéiert de Numm an d'Argumenter. De -noecho Fändel stoppt elo aus gesinn dat ze maachen.

De Konsolenconsole verursaacht Konsolengréichheet op de geschlossene Prozess . Dëst gëtt net op all System ënnerstëtzt.

Intern gouf Spawn benotzt en pty, initialiséiert d'selwecht wéi déi vum tty vum user. Dëst gëtt weidergefouert, sou datt all Astellunge "verännert" sinn (entsprécht stty (1)). Wann d'Variable stty_init definéiert ass, gëtt et am Stil vun den Argumente wéi eng weider Konfiguratioun interpretéiert. Zum Beispill, "set stty_init raw" verursaacht méi weidergeleefeg Prozesser fir Terminals fir am Rohmodus ze starten. -Nottycopie versprécht d'Initialisatioun baséiert op dem Benotzert tty. -nottyinit spritzt d'"verännert" Initialiséierung.

Normalerweis fënnt den Séi net genuch Zäit fir auszeféieren. Wann Dir bemierkt datt Spawn mat enger erheblecher Zäit geschriwwe gi sinn, ass et wahrscheinlech op Optiker, déi gekillt sinn. Eng Rei Testen ginn op PTys lafen, fir verwéckelt Prozesser ze vermeiden. (Déi 10 Sekonne pro Kéi gedreest.) Laafen Erwaart mat der -d Option weist op datt Expect op ville Pseudo'en an ongefälschte Staaten opgetratt ass. Wann Dir d'Prozesser, op déi dës Pest verbonnen sinn, ëmzebréngen, ass Är eenzeg Ausgrenzung ze rebootéieren.

Wann de Programm net gutt gelongen ass, well de exec (2) schlägt (z. B. wann de Programm net existéiert), gëtt eng Fehlermeldung vun der nächster Interaktioun zréckgezunn oder ofginn , wéi wann de Programm de Fehlermeldung als Output ausgeführt huet. Dëst Verhalen ass eng natierlech Konsequenz vun der Ëmsetzung vun den Ermëttelen . Intern kënnen d'Gonvosgusser, no deenen de spawne Prozess net ka mat dem ursprénglechen Erweidungsprozess kommunizéieren , ausser duerch d'Kommunikatioun iwwer de spawn_id.

De -open flag assuréiert datt d'nächst Argument als Tcl- Dateekenner interpretéiert gëtt (dh, vun opgemaach gëtt .) D'Spawn Id kann dann benotzt ginn, als ob et en erfonnt ginn ass . (De Fichierkenner soll net méi gebraucht ginn.) Dëst léisst Iech grondsätzlecht Apparater, Dossieren a Pipelines souveränen Prozesser behandelen ouni ouni Pty. 0 ass zréckgetruede fir ze weisen datt et keen ass associéierte Prozess ass . Wann d'Verbindung mat dem opgekläerte Prozess zougemaach gëtt, sou ass d'Tcl-Dateidentificateur. De -leaveopen -Flag ass ähnlech wéi -open, ausser dass -leaveopen verursaacht datt d' Dateinéiler souguer nach der Réckgang Id geschloss ginn ass.

De -poût verursaacht e pty opzemaachen, awer keen Prozess huet geschaaft. 0 ass zréckgetruede fir ze weisen datt et keen ass associéierte Prozess ass . Spawn_id ass wéi gewinnt.

De variablen spawn_out (Sklave, fd) gëtt op eng Datei Identifizéierter korrespondéiert mat dem pty Sklave. Et kann geschloe ginn mat "schliesseg -slave".

De -ignore Fahne bezeechent een Signal an de geschlossene Prozess ignoréiert. Sinn d'Signaler de Standardverhalen. D'Signaler ginn esou wéi am Trapbefehl benannt , ausser datt all Signal e separate Mark ausmécht.

Straffiveau
Ursaache fir Aussoen ze gedréckt, ier se ausgezeechent ginn. (Tcl-Spurbefehl verfolgt Variablen.) Niveau weist op, wéi wäit am Rackstack ze spueren. Zum Beispill, de nächste Kommando verlangt Iwwerraschend beim Tracing vun den éischten 4 Niveauen vun Uriff, awer net méi ënnert.

Waat -c "strafe 4" script.exp

De -info- Fändel verursaacht Strafe fir eng Beschreiwung vun de jüngste Argumenter déi net-info geännert ginn.

stty args
Ännerungen vun Terminalmodus ähnlech wéi de externe stty Kommando.

Par défaut gëtt de kontrolléierten Termin iwwerrannt. Aner Terminë kënnen ofgerappt ginn, andeems "apps Requests for status returns" als Resultat vum Kommando ginn. Wann nach keen Status gefrot gëtt an déi kontrolléiert Terminal accessibel ass, gëtt de Status vum roude a echo-Attribut mat engem Formular, deen spéider vum Kommando benotzt.

Zum Beispill hunn d'Argumenter roude oder gekäppt de Terminal an de roude Modus. Déi Argumenter - du hunn oder gekacht hues de Terminal an de gekachten Modus. D'Argumenter Echo an -echo hunn d'Terminal an Echo- a Noecho-Modus gespaart.

De nächste Beispiller illustréiert wéi ech ze kuerz ze evakuéieren sinn. Dëst konnt an anere System automatesch Scripte benotzt ginn fir Passwierder ze verbannen. (Kuckt méi Diskussioun iwwert dëst ënnert EXPECT HINTS.)

stty -echo send_user "Passwuert:" expect_user -re "(. *) \ n" Passwuert $ expect_out (1, String) stty echo

System Argumenter
D' Argumente gi sh (1) als Input, genee wéi wann et als Kommando vum Terminal gefeelt ginn ass. Erwaart dat waart bis de Shell ofgeschloss ass. De Status vum Status vu sh gëtt d'selwecht behandelt wéi d' exec execéiert den zréckfluchstatus.

Am Géigesaz zu der Ausféierung , déi de Réck a stdout op de Skript ännert, féiert d' System keng Ofleckung (ausser den vun der Sait selwer). Dofir ass et méiglech Programmer ze benotzen déi direkt op / dev / tty schwätzen. Aus dem selwechten Grond sinn d'Resultater vum System net am Logbuch opgefaang.

Zäitstempel [args]
kënnt e Timestamp zréck. No Argumenter ass d'Zuel vun de Sekonnen zënter der Epoch zréckkomm.

De -format Fändel féiert e String, deen zréckkomm ass, awer mat Auswiesselungen, déi gemengt d'POSIX-Regelen fir Strampele gemaach ginn. Zum Beispill% a gëtt duerch e korrespondéierte Wochendeel (dh Sat) ersat. Aner sinn:

% e Korrespondenz Wochendaag% E komplette Wochdag% b abkënnegten Mountbezuel% B volle Mountbezuel% c Datum-Zäit wéi an: Mi 6. 11 11:45:56 1993% d Dag vum Mount (01-31% H Stonn (00-23)% Ech Stonn (01-12)% j Dag (001-366)% m Mount (01-12)% M Minute (00-59)% p am oder pm% S zweeter (00-61) % u Dag (1-7, Méindeg ass den éischten Dag vun der Woch)% U Woch (00-53, éischten Sonndeg ass den éischten Dag vun der Woch ee)% V Woch (01-53, ISO 8601 Stil)% w Dag (0- 6)% W Woch (00-53, éischten Méindeg ass de éischten Dag vun der Woch 1)% x Datum-Zäit wéi an: Mi 6 Oct 1993% X Zäit wéi am: 23:59:59% y Joer (00-99) % Y Joer wéi an: 1993% Z Zeitzone (oder näischt wann net net feststellbar) %% a bloze Prozent Zeechen

Aner% Spezifikatiounen sinn net definéiert. Aner Zeechen ginn duerch onberéiertes. Nëmmen d'C Locale gëtt ënnerstëtzt.

De -Sechtsflag stellt e puer Sekonne vir, well d'Epoch als Quelle benotzt gëtt, vun der zum Format benotzen. Soss gëtt d'aktuell Zäit benotzt.

De -gmt Fahnam setzt d'Ausnam vum Timestamp fir d' GMT Zeitzone ze benotzen. Et gëtt kee Fluch, déi lokal Zäitzone benotzt.

Trap [[Kommando] Signaler]
bewosst datt de bestëmmte Kommando op zukünfteg Erhalt vun engem vun de gegebene Signaler ausgeführt gëtt. De Kommando gëtt am globalen Ëmfang ausgezeechent. Wann de Kommando abruecht gëtt, gëtt d'Signalaktioun zréck. Wann de Kommando de Saat SIG_IGN ass, ginn d'Signaler ignoréiert. Wann de Kommando de Saach SIG_DFL ass, ginn d'Signaler d'System default. Signaler ass e Signal oder eng Lëscht vun Signaler. Signaler kënnen numeresch oder symbolesch uginn ugeluecht ginn wéi e Signal (3). Den "SIG" Präfix kéint weggoen.

Duerch Argumenter (oder Argumentnummer) fiert d' Trap nees d'Signal Nummer vum aktuell gefollegt Trap zeréck.

De Kodeband benotzt den Rückgabcode vum Kommando an der Plaz vu wéi en Code Tcl waart zréckzekommen, wann de Kommando ursprünglech ugefaang ass.

De -interp- Fändel verursaacht datt de Kommando gëtt mat dem Iwwersetzer aktiv ass beim aktive Kommando anstatt wéi d'Trap deklariéiert ass.

De -name- Fändel verursaacht den Trapbefehl fir den Signalbefehl vum Trap- Command zréckzekommen.

De -max- Flag bewirkt de Trapbefehl fir déi gréisst Signalnummer zréckzekommen, déi gespaart gëtt.

Zum Beispill gëtt de Kommando "Trap {Send_user" Ouch! "} SIGINT" gedréckt "Ouch!" All Kéier wann de Benotzer dréckt ^ C.

Par défaut sinn SIGINT (déi normalerweis generéiert ginn duerch Dréck ^ C) an SIGTERM Ursaach Eroflueden ze verléieren. Dëst ass wéinst der folgender Trap, déi per Default erstallt gëtt wann Expect beginn.

Trap Exit {SIGINT SIGTERM}

Wann Dir de -D-Fändel benotzt fir de Debugger ze starten, gëtt SIGINT definéiert fir de interaktive Debugger ze starten. Dëst ass wéinst der folgender Trap:

Trap {exp_debug 1} SIGINT

De Debugger Trap kann geännert ginn andeems d'Ëmwelt variabel EXPECT_DEBUG_INIT zu engem neien Trapbefehl setzt.

Dir kënnt natierlech vun deenen zwee just andeems Dir Trapskommandäre fir Ären Skript ze addéieren. Besonnesch, wann Dir Är eegen "Trapausfahrt SIGINT" hutt, wäert dat d'Debugger Trap überschränken. Dëst ass nëtzlech, wann Dir de Benotzer verhënnert datt jiddereen den Debugger erreecht.

Wann Dir Är eegent Fallef un SIGINT definéieren wëllt, awer falen fir de Debugger wann et geschitt ass, benotzen:

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

Alternativ kënnt Dir op den Debugger oppassen andeems Dir e puer aner Signal huet.

Trap wäert Iech d'Aktioun fir SIGALRM net überschrëcken, well dëst intern benotzt gëtt fir erwähnt ze ginn . De Kommando vum Trennen set SIGALRM op SIG_IGN (ignoréieren). Dir kënnt dëst erneierbar ginn esou laang Dir se während der spéiderer Spawn-Kommandoen ausschalten.

Kuckt Signal (3) fir méi Informatiounen.

Waart [args]
Verspéidungen bis e geschwatenen Prozess (oder den aktuellen Prozess, wann keen nominéiert gëtt) of.

Waart normalerweis zréck eng Lëscht vu véier ganzen. Déi éischt Integer ass de Pid vum Prozess dee gewaart gouf. Déi zweet Ganzt ass d'Entspriechung ID. Déi drëtt Integer ass -1 wann e Betribssystemfehler opgetruet ass oder soss näischt. Wann d'drëtt Integer 0 ass, ass de véierten Integer de Status vum richtegen Prozess . Wann déi drëtt Integer -1 ass, ass de véierten Integer de Wäert vum Rechner, dee vum Betriebssystem bezeechent gëtt. De globale verännerleche FehlerCode ass och festgeluegt.

Zousätzlecht Elementer kënnen am Ende vum Rembourséicht vu Wuecht erscheinen. E optionalem fënneft Element identifizéiert eng Klasse vu Informatioun. Am Moment ass den eenzegen méiglecher Wäert fir dëst Element CHILDKILLED, a wou d'nächst zwou Wäerter den C-Stil SignalName an eng kuerz Textualbeschreiwung sinn.

De -i Mark deklaréiert de Prozess , fir dem Numm Spawn_id (NET der Prozess Id) entspriechend ze waarden. An engem SIGCHLD Handler, ass et méiglech fir all opgekläerte Prozess ze waarden, andeems d'Spawn Id -1 benotzt.

De -nowait Marker verursaacht déi Wart direkt mat der Angscht vun engem erfollegräichen Wart. Wann de Prozess erof kënnt (spéider) gëtt et automatesch ofgeschnidden ouni de Bedierfnes fir e explizit Warten.

De Kommando wait kann och benotzt ginn fir e Forced Prozess mat den Argumenter "-i -1" ze waarden. Am Géigesaz zu senger Verwécklung mat opgeréckten Prozesser kann dëse Kommando zu all Moment ausgeführt ginn. Et gëtt keng Kontroll iwwer dee Prozesser erausgesat gëtt. Allerdéngs kann de Retourwierk kann op d' Prozess Id iwwerpréift ginn.

LIBRARIEN

Erwaart automatesch iwwer zwee Buedbicher fir Skripten Ofleeën. Dës sinn definéiert duerch d'Verzeichnungen, déi an de Variablen exp_library an exp_exec_library benannt sinn. Déi zwee gi bestëmmt fir Utility-Dateien ze presentéieren, déi vun anere Skripten benotzt ginn.

Exp_library enthält architektonesch onofhängeg Dateien. Exp_exec_library enthält Architektur-abhängige Dateien. Ofhängeg vun Ärem System sinn zwee Verzeichnungen komplett total leien. D'Existenz vun der Datei $ exp_exec_library / cat-buffer beschreift ob Är / bin / cat Buffers par défaut.

PRETTY-DRUCK

A vgrind Definitioun ass fir zimlech gedréckt Erwaard Skripte. Assuming d'Vgrinddefinitioun déi mat der Erwuessene Verdeelung geliwwert gëtt korrekt installéiert ass, kënnt Dir et als:

vgrind -lexpektiv Datei

Beispiller

Et ass net vill ze kucken wéi alles zesumme fäeg, datt d' Manpage Säit beschreift. Ech encouragéieren Iech ze liesen an probéieren d'Beispiller an dem Beispill Verzeichnis vun der Expect Verteilung. E puer vun hinnen sinn echt Programmer. Aanerer sinn einfach illustrativ fir verschidde Techniken, an natierlech e puer Koppel méi hacks. D'INSTALL Datei féiert e Quick Iwwerbléck iwwert dës Programmer.

D' Expectpapiere (kuck SEE ALSO) sinn och nëtzlech. Während e puer Aarbechten Syntax benotzen déi virdru fréier Versioune vun Expect korrespondéiere sinn, sinn déi begleet Rationales nach ëmmer valabel a ginn et vill méi Detail wéi dës Manpage.

CAVEATS

Extensiounen kollidéieren mat Kommandantennen vum Expect. Zum Beispill gëtt de Sende vun Tk definéiert fir eng ganz aner Zilsetzung. Aus dësem Grond sinn déi meescht vun den Expect- Kommandoen och als "exp_XXXX" disponibel. Kommandéiere a Variablen, déi mam "exp", "inter", "spawn" an "timeout" begéinen, hu kee Aliasen. Benotzt den erweiderten Kommando-Numm wann Dir dës Kompatibilitéit tëscht Ëmfeld brauch.

Erwaart da gët e zimlech liberal Vue vu Scoping. Speziell Variablen déi duerch Kommandoen spezifesch dem Erweekungsprogramm geliesen ginn, ginn zuerst zuerst vum lokalen Ëmfang gesicht an wann net fonnt, am globalen Ëmfang. Zum Beispill dodréis dës Notzung "global timeout" zu all Schrëtt déi Dir schreift déi benotzt Dir erwënscht . Aanescht, schrëftbar Variablen sinn ëmmer am lokalen Ëmfang (ausser datt en "globale" Kommando gouf erausginn). Déi am meeschten allgemengen Problem ass dëst Ursaachen, wann d'Erfaassung an enger Prozedur ausgeführt gëtt. Ausser der Prozedur gëtt spawn_id net méi existéiert, sou datt de spawned Prozess net méi zougänglech einfach ass wéinst dem Scoping. Fügt eng "global spawn_id" zu esou enger Prozedur.

Wann Dir d'Multiplattéierungsfunktiounen net aktivéiere kann (dh Äre System ënnerstëtzt keng Wielt (BSD *. *), Umellung (SVR> 2), nach eppes Äquivalent), erwaart datt nëmmen ee Prozess ze kontrolléieren. An dësem Fall probéiert et spawn_id net ze setzen, an och net, wéi Dir Prozesser duerch Ausféierung ausgefuehrt , wann e richtegen Prozess weider geet. Ausserdeem kënnt Dir net méi vun ville Prozesser (zum Beispill vum Benotzer als ee) erwaarden .

Terminalparameter kënnen e groussen Effekt op Skripten hunn. Zum Beispill, wann e Skript geschriwwe steet fir echoend ze sichen, gëtt et e bësseg Behandlungsverännerung, wann de Echoing ausgeschalt gëtt. Aus dësem Grond, Fuerderung Kräfte verständlech Terminalparameter. Leider kann dat eppes Saache fir onse Programmer unangenehm maachen. Als Beispill kënnt d'Emacs-Shell d'"gewéinlech" Mappinge veränneren: Newlines ginn op Newlines ofgesat, anstatt de Wagoner-Nei zréckzebréngen, an de Echoing ass ofgeschalt. Dëst erlaabt een Emacë fir d'Input- Linn ze änneren. Leider kann erwaart datt dëst net méiglech wier.

Dir kënnt ufroen, datt Expect net onbedéngt seng Standard-Parameteren vun Terminalparameter überschneiden, awer Dir musst dann ganz véiericht si beim Scripts fir esou Environnemente schreiwen. Am Fall vun Emacë vermeit hannerloossen wéi d'Echoing- an Enn-Ofline-Mappel.

D'Kommandoen, déi Argumenter akzeptéiert hunn, déi an enger eenzeger Lëscht gestëmmt goufen (déi Varianten a Weidere kënnen ) benotzen eng Heuristik fir ze entscheeden ob d'Lëscht eigentlech e Argument oder e puer ass. Den Heuristik kann nëmmen am Fall falen, wann d'Lëscht wierklech e puer Argumenter representéiert ass, déi méi wéi en Embedded \ n mat net whitespace Charakteren tëscht hinnen huet. Dëst schéngt genuch Fehler ze beäntweren, awer de Argument "-nobrace" kann benotzt ginn fir een eenzegt Argument ze zwéngen, als eenzeg Argument ze handelen. Dëst kéint ee mat der Maschinn erstallt Eroplueden sinn. Ähnlech, zwéngt - Eenheetsargument eng eenzeg Argument fir méi Muster / Aktiounen ze behandelen.

BUGS

Et war wierklech ze versécheren, de Programm "Sex" (fir "Smart Exec" oder "Send-Expect") ze nennen, mee gutt Sënn (oder vläicht nëmme Puritanismus) huet sech duerchgesat.

Op verschidden Systemer, wann e Shell erfaasst gëtt, beschloe et Bescheed iwwer déi net op den tty Zougang, awer iergendwou lass. Dëst bedeit datt Äre System e Mechanismus fir d'Kontroll kontrolléiert huet, déi erwuesse weess net. Gitt weg wat et ass a schéckt dës Informatioun zréck un.

Ultrix 4,1 (zumindest déi lescht Versioun ëm hier) hält Zäitoutsperren vun iwwer 1000000 an entsprécht 0.

Digital UNIX 4.0A (a vläicht aner Versiounen) refuséiert fir ptys ze luede wann Dir e SIGCHLD Handler definéiert. Kuckt d'Gewënn Säit Säit fir méi Informatiounen.

IRIX 6.0 erlaabt net de Pty-Permissiounen richteg ze maachen, wann wann Expect Versuche fir e pty ze benotzen, déi virdrun vun engem aneren benotzt huet, fällt se net. Upgrade op IRIX 6.1.

Telnet (verifizéiert nëmmen ënner SunOS 4.1.2) hänkt wann TERM net festgeluecht gëtt. Dëst ass e Problem ënnert Cron, a a cgi Scripten, déi d'TERM net definéieren. Dofir musst Dir et explizit feststellen - a wéi eng Zort ass normalerweis irrelevant. Et muss just eppes geschat ginn! Déi folgend wahrscheinlech genuch fir déi meeschten Fäll.

Den env (TERM) vt100

Tipp (verifizéiert nëmmen ënner BSDI BSD / OS 3.1 i386) hänkt wann SHELL a HOME net festgeluegt ginn. Dëst ass e Problem ënnert Cron , an a cgi Scripten, déi dës Umännerungsvariablen net definéieren. Also musst Dir se explizit feststellen - a wéi eng Zort ass normalerweis irrelevant. Et muss just eppes geschat ginn! Déi folgend wahrscheinlech genuch fir déi meeschten Fäll.

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

E puer Implikatiounen vu Ptys sinn esou entwéckelt datt den Kernel all ongeléist Ausgänge no 10 bis 15 Sekonnen gedréckt gëtt (d'aktuell Zuelen si implementéiert abegraff), nodeems de Prozess den Dateekriptor zougemaach huet. So erwarten Programmer wéi

Spawn Datum Schlof 20 erwaarden

fällt. Fir dëst z'erreechen, invocatioun net interaktive Programmer mat Executioun éischter wéi opmaachen . Well sou Situatioune sinn denkbar, an der Praxis hunn ech nach ni eng Situatioun fonnt, an där d'Endproduktioun vun engem wierklech interaktive Programm duerch dëse Verhalen verluer wärten.

Op der anerer Säit wëlle Cray UNICOS ptys jidder net ongeléist Ausgab direkt nodeems de Prozess de Datei-Descriptor geschloss huet. Ech hunn dat gemellt an Cray a si schaffen op enger Fix.

Heiansdo gëtt eng Verzögerung tëscht enger Enquête an enger Äntwert verëffentlecht, wéi wann eng tty Interface UART-Astellungen a passende Baud séier ufänkt andeems Dir Start / Stop Bits kuckt. Normalerweis ass et duer fir fir eng zweet oder zwee ze schlofen. Eng méi robust Technik ass et nees erof ze zearbeiten, bis d'Hardware natierlech fäerdeg ass fir Input ze kréien. Dëst Beispill benotzt zwee Strategien:

"Geschéck 9600 \ r" schécken; Schlof 1 erwaarden {timeout {schécken "\ r"; Exp_Continue} $ prompt}

Trap-Code funktionnéiert net mat all Kommando, déi an der Tcl-Evenement Schleppt huet, wéi zum Beispill Schlof. De Problem ass datt bei der Eventregelung Tcl d'Réservencoden vun async Eventhandlers verloscht. Eng Schrëftgréisst ass e Fändel am Trappcode festzeleeën. Da kontrolléiert de Fändel direkt no der Command (dh Schlof).

D'Erwaardungs_Béckkommissem ignoréiert - Zäitrege Argumenter a kee Konzept vun Zäitmoosser am Allgemengen.

& # 34; EXPECT HINTS & # 34;

Et ginn e puer Saachen iwwer Erwaart dat kéint net intuitiv sinn. Dëse Sektioun probéiert e puer vun dësen Saachen mat e puer Suggestiounen anzehuelen.

Ee gemeinsame Erwaardungsproblem ass wéi d'Shell Prompts ze erkennen. Well dës sinn anescht wéi verschidde Leit a verschidden Muschelen individuell kennenzeléiert, kann portabel automatiséiert Rlogin schwiereg sinn ouni datt de Prompter wësst. Eng vernifizéiert Konventioun ass fir Benotzer Benotzer regelméisseg Äusdréck ze schreiwen (virun allem am Ende vu senger) an der Ëmbauaarbecht EXPECT_PROMPT. Kode wéi déi folgend kann benotzt ginn. Wann EXPECT_PROMPT net existéiert, huet de Code nach ëmmer eng gutt Chance fir sech korrekt ze maachen.

opfuerderen "(% | # | \\ $) $"; # Standardkommissioun opfuerderen {set prompt $ env (EXPECT_PROMPT)} expect -re $ prompt

Ech encouragéieren Iech ze schreiwen Erënnerungen , déi d'Enn vun deem wat Dir erwaart ze gesinn erwähnen. Dëst vermeit d'Méiglechkeet un eng Fro beäntwert ze ginn, ier déi ganz Saach gesinn. Zousätzlech, wann Dir vläicht emol an Äntwerten beäntweren kann, ier se se ganz bemierkt, wann Dir fréi äntwert, da kënnt Äer Äntwert an der Mëtt vun der Fro erëm zeréck. An anere Wierder, de resultéierte Dialog gëtt korrekt, awer scheinbar verwonnt.

Déi meescht Prompts schloen eng Raumfigur am Enn. Zum Beispill ass d'Fragele vun FTP sinn 'f', 't', 'p', '>' an. Fir dës Ufro matzemaachen, musst Dir fir jiddereen vun dësen Zeechen äntwerten. Et ass e gemeinsame Feeler, de Leer net ze beaflossen. Setzt den Leer explizit.

Wann Dir e Muster vun der Form X * benotzt, kritt d'* all d'Ausgab mat dem Enn X vun der leschter Saach mat. Dëst kléngt intuitiv, awer kann e bëssche verwiesselt ginn, well d'Phrase "lescht Saach krut" kann ofhängeg vun der Geschwindegkeet vum Computer an der Veraarbechtung vun der I / O vun der Kernel an dem Gerätentreiber variéieren.

Virun allem de Mënsch tendéiert d'Programmausstellung an d'grouss Stécker (atomar) anzeginn wann et an Wierklechkeet déi meeschte Programme fir eng Zeil ze produzéieren. Assuming dat ass de Fall, den * am Muster vum alen Paragraf kéint nëmmen mat der Enn vun der aktueller Linn passen obwuel et méi ginn ass, well zu der Zäit vum Match war déi all Ausgab, déi schonn erreecht gouf.

Dir erwaart datt et keen Wëssen ass datt Dir wësst datt Dir weider Ausgabe kënnt wann Dir Äre Muster spezifesch de Konten hutt.

Selbst abegraff op line-orientéierter Pufferung ass schlecht. Net nëmme Programmer selten Verspriechen iwwert d'Art vu Pufferung, déi si maachen, mee System Verdauung kann Ausgabele fir d'Ausléisung briechen, sou datt d'Zeilen op scheinbar zoufälleg Plazen briechen. Also, wann Dir d'leschte puer Zeeche vun enger Schrëftgréisst ausdrécke kann, wann Dir Schreifmuster schreiwt, et ass schlau fir dat ze maachen.

Wann Dir en Muster an der leschter Ausgab vun engem Programm gewaart hutt, gëtt e Programm iergendwou eppes anescht uginn, an Dir kënnt et net fäeg kennen dat mat dem Timeout Keyword. D'Ursaach ass dat erwaart net Zäitlimite - anescht ass et e gächen Indikatioun. Benotzt dat awer statt. Sogar besser, benotzen déi zwee. Wann dës Linn ëmmer sou geschwenkt ass, musst Dir d'Linn net änneren.

Newlines ginn normalerweis an d'Wagon zréckgezunn, linefeed Sequenzen beim Output vum Terminal Chauffer. Also, wann Dir e Muster wëllt, deen explizit an zwou Linnen matgedeelt, ausdréckt, printf ("foo \ nbar"), sollt Dir d'Muster "foo \ rbar" benotzen.

Eng ähnlech Iwwersetzung trëfft beim Liese vun dem Benotzer, via erwuess_user . An dësem Fall, wann Dir se drécke kënnt, gëtt et op eng Newline iwwersat ginn. Wann Expect then passes dat zu engem Programm deen seng Termin zu roude Modus (wéi Telnet) setzt, wäert et e Problem sinn, wéi de Programm e richtege Retour erwaart. (E puer Programmer verféieren eigentlech datt si automatesch nei Newlines iwwersetzen fir zréckzekommen, awer meescht meeschten net.) Leider ass et net méiglech, datt een Programm säi Terminal an de roude Modus kritt.

Anstatt Iech Newlines mat Récker manuell ze ersetzen, ass d'Léisung fir de Kommando "stty raw" ze benotzen, wat d'Iwwersetzung stoppt. Remarque awer datt dat heescht datt Dir net méi dee gekachten Line Editing Funktiounen kritt.

interagéiert implizit implizit Äre Terminal op de roude Modus sou datt dëst Problem net opstinn.

Et ass oft nëtzlech fir Passwuert (oder aner perséinlech Informatioune) ze späicheren an Expect Scripts. Dëst ass net recommandéiert, well alles dat op engem Computer gespäichert ass sinn empfindlech fir jiddereen z'erreechen. Dofir ass eng interaktiv Konschtwierk fir Passwuert aus engem Skript sinn eng cleverer Iddi wéi si litterlech verbueden. Niewebäi, heiansdo esou eng Embeddingheet ass déi eenzeg Méiglechkeet.

Leider ass de UNIX Dateisystem keng direkt Méiglechkeet fir Skripte z'erreechen, déi ausführbar sinn a net ze liesen. Systeme déi Ënnerstëtzte Shell-Scripter ënnerstëtzen ënnerstëtzen dës indirekt simuléieren:

Erstellt de Skript Expect (dat enthält d'geheime Daten) wéi gewinnt. Gitt seng Rechter op 750 (-rx xx) a gehéieren vun enger vertrauenswürdege Grupp, also eng Grupp déi erlaabt ze liesen. Wann néideg, kreéieren ech eng nei Grupp fir dësen Zweck. Niewendréift e / bin / sh Skript mat Permissiounen 2751 (-rxx-s - x) vun der selwechter Grupp wéi virdrun.

D'Resultat ass e Skript deen duerch all méiglecher (a liesen) ausgeführt ginn. Wann invokéiert ass, féiert de Skript Expect .

& # 34; SEE ALSO & # 34;

Tcl (3), Libexpect (3)
"Exploration Expect: A Tcl-baséiert Toolkit fir Automatiséiert Interaktive Programmer" vun Don Libes, Säit 602, ISBN 1-56592-090-2, O'Reilly an Associates, 1995.
"Erwaart: Här fir dës onkontrollabel Passt fir Interaktivitéit" vun Don Libes, Proceedings vum Summer 1990 USENIX-Konferenz, Anaheim, Kalifornien, 11. Juni 1990.
Ech benotzen d'Verwaltungstaxen vum Don Libes automatiséieren, Proceedings vun der 1990 USENIX Large Installation System Administration Konferenz, Colorado Springs, Colorado, den 17. bis 19. Oktober 1990.
"Tcl: eng Embeddable Command Language" vum John Ousterhout, Proceedings of the Winter 1990 USENIX Konferenz, Washington, DC, den 22. bis 26. Januar 1990 ... Ech "erwaarden: Scripte fir Containere Interactive Programme" vun Don Libes, Computing Systems , Vol. 4, Nr 2, Universitéit vu Kalifornien Press Journals, November 1991 ... Ech "Regression Testing a Konformitéit Test Interactive Programme", vum Don Libes, Proceedings of Summer 1992 USENIX Konferenz, S. 135-144, San Antonio, TX, Den 12. bis 15. Juni 1992 ..... "Kibitz - Verbündete méi interaktive Programmer zesummen", vum Don Libes, Software - Praxis & Erfahrung, John Wiley & Sons, West Sussex, England, Vol.

23, No. 5, Mee 1993 ..... "A Debugger for Tcl Applications", vum Don Libes, Proceedings vum 1993 Tcl / Tk Workshop, Berkeley, CA, 10-11-11 1993.

AUTHOR

Don Libes, National Institut d'Standards an Technologie

ACKNOWLEGMENTS

Dank John Ousterhout fir Tcl, a Scott Paisley fir Inspiratioun. Dank Rob Savoye fir den Autoconfiguratiounscode vun der Autosconfiguratioun.

D'HISTORY Datei dokumentéiert e groussen Deel vun der Entwécklung vu Erwaardung . Et mécht interessant Lektméiglechkeet a kënnt Iech weider Intresse fir dës Software benotzen. Dank de Leit, déi et erwähnt hunn, déi mech missen Ficheren fixéieren an aner Assistenz hunn.

Design an Ëmsetze vu Erwaardungen gouf deelweis vun der US Regierung bezuelt a läit dofir am ëffentleche Bereich. Den Autor a NIST hätt awer gär Kreditt wann dëst Programm an d'Dokumentatioun oder d'Portioun vu se benotzt.