Gaidīt ir programma, kas pārrunā citas interaktīvas programmas saskaņā ar skriptu. Sekojot skriptam, gaidīt zina, ko var sagaidīt no programmas un kādai jābūt pareizai atbildei. Interpretēta valoda nodrošina atzarošanas un augsta līmeņa kontroles struktūras, lai vadītu dialogu. Turklāt, ja nepieciešams, lietotājs var kontrolēt un mijiedarboties tieši, pēc tam atkārtojot kontroli skriptā.
Expectk ir Expect un Tk maisījums. Tā uzvedas tāpat kā Expect un Tk vēlēšanās. Expect arī var izmantot tieši C vai C ++ bez Tcl.
Nosaukums "Expect" nāk no idejas par sūtīt / sagaidīt sekvences, kuras popularizē uucp, kermit un citas modema kontroles programmas. Tomēr atšķirībā no uucp, Expect ir vispārināts, lai to varētu palaist kā lietotāja līmeņa komandu, ņemot vērā jebkuru programmu un uzdevumu. Sagaidiet, ka varat vienlaikus sarunāties ar vairākām programmām.
Ko gaidīt var darīt
Piemēram, šeit ir dažas lietas, ko sagaida komanda:
- Izraisiet, ka jūsu dators atgriezīsies, lai jūs varētu pieteikties, nemaksājot par zvanu.
- Sāciet spēli un, ja optimālā konfigurācija neparādās, restartējiet to atkal un atkal), kamēr tas nenotiek, un pēc tam nododiet jums kontroli.
- Palaidiet fsck un, atbildot uz saviem jautājumiem, atbildiet uz "jā" vai "nē" vai dodiet kontroli pār jums, pamatojoties uz iepriekš noteiktiem kritērijiem.
- Savienojiet ar citu tīklu un automātiski ielādējiet savu pastu, lai tas tiktu parādīts tā, it kā tas sākotnēji tika nosūtīts uz jūsu vietējo sistēmu.
- Pārnēsājiet vides mainīgos, pašreizējo direktoriju vai jebkāda veida informāciju no rlogin, telnet, tip, su vai chgrp
Ir dažādi iemesli, kāpēc apvalks nevar izpildīt šos uzdevumus. Visi ir iespējami ar Expect.
Parasti Expect ir noderīgs, lai palaistu jebkuru programmu, kas prasa mijiedarbību starp programmu un lietotāju. Viss, kas ir nepieciešams, ir tas, ka mijiedarbību var raksturot programmīgi. Gaidīt var arī atdot kontroli lietotājam, neapturot programmas vadību. Tāpat lietotājs jebkurā laikā var atgriezties pie skripta.
Izmantošana
Expect skan cmdfile komandu izpildei sarakstā. Gaidīt var netieši atsaukties uz sistēmām, kas atbalsta #! apzīmējumu, atzīmējot skriptu kā izpildāmo un padarot pirmo rindiņu skriptā:
#! / usr / local / bin / expect-f
Protams, ceļam ir precīzi jāapraksta kur gaidīt dzīvību. / usr / local / bin ir tikai piemērs.
K-c karodziņš prefiksē komandu, kas tiek izpildīta pirms jebkura skripta. Komandai jābūt citētai, lai novērstu to, ka to izkliedē čaula. Šo iespēju var izmantot vairākas reizes. Vairākas komandas var izpildīt ar vienu -c, atdalot tos ar semikoloniem. Komandas tiek izpildītas tādā secībā, kādā tās parādās. Lietojot Expectk, šī opcija ir norādīta kā -command.
Ar -d karodziņš ļauj veikt dažus diagnostikas rezultātus, kas galvenokārt norāda komandu iekšējo darbību, piemēram, sagaidīt un mijiedarboties. Šim karodziņam ir tāds pats efekts kā "exp_internal 1" gaidīšanas skripta sākumā, kā arī tiek izdrukāta paredzētā versija.
Ar-D karogs ļauj izveidot interaktīvu atkļūdotāju. Jāizpilda vesels skaitlis. Atkļūdotājs uzņemsies kontroli pirms nākamās Tcl procedūras, ja vērtība nav nulle, vai ja tiek nospiests ^ C vai tiek pārtraukts pārtraukums, vai cita atbilstoša atkļūdotāju komanda parādās skriptā. Izmantojot Expectk, šī opcija ir norādīta kā -Atkļūdošana
-F liek prefiksu failu, no kura lasīt komandas. Karogs nav obligāts, jo tas ir noderīgi, tikai izmantojot #! apzīmējumu, lai komandrindā varētu tikt piegādāti citi argumenti. Izmantojot Expectk, šī opcija ir norādīta kā -file.
Pēc noklusējuma komandfails tiek lasīts atmiņā un tiek izpildīts pilnībā. Dažkārt ir vēlams lasīt failus vienā rindā vienlaikus. Lai piespiestu patvaļīgus failus apstrādāt šādā veidā, izmantojiet -b karodziņu. Lietojot Expectk, šī opcija tiek norādīta kā -buffer.
Ja virkne "-" tiek piegādāta kā faila nosaukums, tā vietā tiek nolasīta standarta ievade. Izmantojiet "./-", lai lasītu no faila, kura patiešām tiek nosaukta "-".
-I karodziņš izraisa Gaidīt interaktīvi uzaicināt komandas, nevis lasīt tās no faila. Uzvedne tiek pārtraukta, izmantojot izejas komandu vai EOF. Paraugs -i tiek pieņemts, ja neizmanto ne komandu failu, ne-c. Izmantojot Expectk, šī opcija ir norādīta kā -interaktīvā.
- var izmantot, lai nošķirtu opciju beigas. Tas ir noderīgi, ja vēlaties skriptam pārsūtīt variantu līdzīgu argumentu, to neinterpretējot ar Expect. To var ērti ievietot #! lai izvairītos no jebkura laba interpretācija ar Expect. Piemēram, šādi atstās sākotnējos argumentus, tostarp mainīgā skripta nosaukumu argv .
#! / usr / local / bin / expect -
Ņemiet vērā, ka pievienojot argumentus #! Ir jāievēro parastās getopt (3) un execve (2) konvencijas. līnija
Fails $ exp_library / expect.rc automātiski tiek iegūts, ja ir, ja nav izmantots -N karodziņš. (Izmantojot Expectk, šī opcija tiek norādīta kā -NORC.) Tūlīt pēc tam fails ~ / .expect.rc tiek iegūts automātiski, ja vien nav izmantots -n karodziņš. Ja vides mainīgais DOTDIR ir definēts, tas tiek uzskatīts par direktoriju un no. Lasāms .expect.rc. Izmantojot Expectk, šī opcija ir norādīta kā -ncorc.Šī iegūšana notiek tikai pēc jebkura-c karodziņu izpildes.
-v cēloņi Paredzēt drukas versijas numuru un iziet. Atbilstošais karogs Expectk, kas izmanto garus karogu nosaukumus, ir -versions.
Neobligātie args tiek izveidoti sarakstā un saglabāti mainīgā ar nosaukumu argv un. argc tiek inicializēts ar argv garumu.
Argv0 tiek definēts kā skripta vai bināro nosaukumu, ja nav izmantots neviens skripts. Piemēram, šādi izdrukā skripta nosaukumu un pirmos trīs argumentus:
send_user "$ argv0 lrange $ argv 0 2 n"
Komandas
Gaidīt izmanto rīku komandu valodu. Tcl nodrošina kontroles plūsmu (ja tiek pārtraukta), izteiksmes novērtējumam un vairākām citām funkcijām, piemēram, rekuperācijas un procedūras definēšanai. Komandas, kas šeit tiek izmantotas, bet nav definētas (set, if, exec), ir Tcl komandas. Expect atbalsta papildu komandas. Ja vien nav noteikts citādi, komandas atdod tukšu stīgu.
Komandas ir uzskaitītas alfabētiskā secībā, lai tās varētu ātri atrast. Tomēr jaunajiem lietotājiem var būt vieglāk sākt, lasot nārsta, nosūtīšanas, sagaidīšanas un mijiedarbības aprakstus šādā secībā.
aizvērt -slavas -onexec 0 | 1 -i spawn_id
aizver savienojumu ar pašreizējo procesu. Lielākā daļa interaktīvo programmu atklāt EOF par to stdin un izejas; tādējādi tuvu parasti ir pietiekami, lai nogalinātu procesu arī. -I karogs paziņo, ka aizvēršanas process atbilst nosauktajam spawn_id.
Gan sagaida, gan mijiedarbosies, atklāsies, kad pašreizējais process beigsies un netieši tuvināsies, bet, ja jūs nogalināsiet procesu, teiksim, piemēram, "exec kill $ pid", jums ir skaidri jāzvana tuvu.
"-Onexec" karodziņš nosaka, vai nūjošanas ID ir aizvērts jebkurā jaunā procesā, kas radīts, vai ja process ir pārklāts. Lai atstātu nārstojošo ID atvērtu, izmantojiet vērtību 0. Nulles vesela skaitļa vērtība padara nārstošanos aizvērtu jebkurā jaunā procesā.
Vakances karogs aizver vergu, kas saistīts ar nārsta ID. Kad savienojums ir aizvērts, pakārtotā ierīce tiek automātiski aizvērta, ja tā joprojām ir atvērta.
Neatkarīgi no tā, vai savienojums ir netieši vai nepārprotami aizvērts, jums vajadzētu piezvanīt uzgaidīt, lai notīrītu attiecīgo kodola procesa slotu. Aizvērtā komanda neuzklikšķina uz "jāgaida", jo nav garantijas, ka procesa savienojuma aizvēršana izraisīs tā izeju.
atkļūdošana -now 0 | 1
kontrolē Tcl atkļūdotāju, kas ļauj jums soli pa paziņojumiem un noteikt pārtraukuma punktus.
Bez argumentiem 1 tiek atgriezts, ja atkļūdotājs nedarbojas, pretējā gadījumā tiek atgriezts 0.
Ar vienu argumentu, atkļūdotājs ir sākts. Ar 0 argumentu atkļūdotājs tiek apturēts. Ja pirms 1 argumenta iezīmē jauno karodziņu, atkļūdotājs tiek sākts nekavējoties. Pretējā gadījumā atkļūdotājs tiek palaists nākamajā Tcl paziņojumā.
Atkļūdošanas komanda neizmaina nekādus slazdus. Salīdziniet to ar sākuma Expect ar -D karogu.
Atvienošanas komanda no termināla atvieno noformējumu. Tas turpina darboties fonā. Procesam tiek dota sava procesa grupa. Standarta I / O tiek novirzīts uz / dev / null.
Šāds fragments izmanto atvienošanu, lai turpinātu skripta darbību fonā.
ja {fork! = 0} iziet no savienojuma. . .
Šāds skripts nolasa paroli un pēc tam katru stundu palaiž programmu, kas prasa paroli katru reizi, kad tā tiek palaista. Skripts piegādā paroli tā, lai to ievadītu tikai vienu reizi.
send_user "parole? " expect_user -re "(. *) n" par {} 1 {} {if {fork! = 0} {miegs 3600; turpināt} atvienot nerunāt priv_prog gaidīt Parole: sūtīt "$ expect_out 1, virkne) r ". . . Izeja }
Priekšrocība, kā izmantot atvienošanu no apvalka asinhronās procesa funkcijas (&), ir tā, ka Expect var saglabāt termināļa parametrus pirms atvienošanas un vēlāk tos pielietot jauniem ptys. Izmantojot &, Expect nav iespēju nolasīt termināļa parametrus, jo terminālis jau ir atvienots, kad laiks, ko gaidīt saņem kontroli.
iziet -opts statuss
izraisa gaidīt iziet vai citādi sagatavoties to darīt.
The -inoksīts karodziņš liek nākamajam argumentam izmantot kā izejas apstrādātāju. Bez argumentiem tiek atgriezts pašreizējais izejas apstrādātājs.
The -noeksitēt karogs cēloņi Gaida lai sagatavotos, lai izietu, bet pietrūkst, lai faktiski atgrieztu kontroli operētājsistēmai. Lietotāja definēts izejas apstrādātājs tiek palaists, kā arī Expect paša iekšējie apstrādātāji. Nav vairs Gaidīt komandas būtu jāizpilda. Tas ir noderīgi, ja jūs izmantojat Expect ar citiem Tcl paplašinājumiem. Pašreizējais tulks (un galvenais logs Tk vidē) paliek tādā veidā, ka citi Tcl paplašinājumi var iztīrīt. Ja gaidīt ir Izeja tiek izsaukta atkārtoti (tomēr tas var notikt), apstrādātāji netiek atkārtoti palaisti.
Pēc iziešanas visi savienojumi ar radītajiem procesiem ir slēgti. Slēgšana tiks atklāta kā EOF, ko radījuši procesi. Izeja neveic citas darbības, kas pārsniedz parasto _exit (2) procedūru. Tādējādi turpinās darboties radītie procesi, kas nekontrolē EOF. (Dažādi nosacījumi ir svarīgi, lai noteiktu, piemēram, kādi signāli parādīs izveidoto procesu, bet tie ir atkarīgi no sistēmas, kas parasti tiek dokumentēti saskaņā ar izeju (3).) Nerādītos procesus, kas turpina darboties, mantos init.
statuss (vai 0, ja nav norādīts) tiek atgriezts kā izejas statuss Gaida . Izeja tiek netieši izpildīts, ja tiek sasniegts skripta beigas.
exp_uzturēt -continue_timer
Komanda exp_ turpināt atļauj sagaidīt pati turpināt izpildīt, nevis atgriezties, kā parasti. Pēc noklusējuma exp_ turpināt noņem laika taimeri. The -pārtraukt_timēru karogs neļauj taimerim atsākt. (Skat sagaidīt lai iegūtu vairāk informācijas.)
exp_internal -f faila vērtība
izraisa turpmākas komandas nosūtīt diagnostikas informāciju iekšējai informācijai Gaida stderr ja vērtība nav nulle. Šī izeja ir atspējota, ja vērtība ir 0. Diagnostikas informācija ietver katru saņemto rakstzīmi un katru mēģinājumu saskaņot pašreizējo izvadi ar modeļiem.
Ja tas nav obligāts fails tiek piegādāts, visa parastā un atkļūdošanas izlaide tiek rakstīta šim failam (neatkarīgi no vērtības vērtība ) Jebkura iepriekšējā diagnostikas izejas fails ir aizvērts.
The -info karogs izraisa exp_internal, lai atgrieztu jaunāko ne-info argumentu aprakstu.
exp_open args -i spawn_id
atgriež Tcl faila identifikatoru, kas atbilst oriģinālajam nārstojošajam ID. Tad faila identifikatoru var izmantot tā, it kā to atvērtu Tcl atvērts komandu (Nevajadzētu izmantot nārstojošo id pagaidiet nevajadzētu izpildīt.
The -leaveopen karogs atstāj nārsta id atvērtu piekļūšanai, izmantojot Expect komandas. A pagaidiet ir jāizpilda uz nārsta ID.
exp_pid -i spawn_id
atgriež process id, kas atbilst pašreiz izveidotajam procesam. Ja -i karodziņš tiek izmantots, pid atgriezies atbilst attiecīgā nerūsnas id.
exp_send
ir aizstājvārds par nosūtīt .
exp_send_error
ir aizstājvārds par send_error .
exp_send_log
ir aizstājvārds par send_log .
exp_send_tty
ir aizstājvārds par send_tty .
exp_send_user
ir aizstājvārds par send_user .
exp_version -izvērt versija
ir noderīgi, lai nodrošinātu, ka skripts ir saderīgs ar pašreizējo Expect versiju.
Bez argumentiem, pašreizējā versija Gaida tiek atgriezta. Šo versiju pēc tam var kodēt jūsu skriptā. Ja jūs faktiski zināt, ka jūs neizmantojat jaunāko versiju funkcijas, varat norādīt agrāku versiju.
Versijas sastāv no trim numuriem, kas atdalīti ar punktiem. Pirmais ir lielākais numurs. Scripts rakstīts versijām Gaida ar citu lielu skaitu gandrīz noteikti nedarbosies. exp_version atgriež kļūdu, ja galvenie numuri nesakrīt.
Otrais ir mazais numurs. Skripti, kas rakstīti versijai ar lielāku nelielu skaitu nekā pašreizējā versija, var būt atkarīgi no dažām jaunām funkcijām un, iespējams, nedarbosies. exp_version atgriež kļūdu, ja galvenie skaitļi sakrīt, bet skripta mazais numurs ir lielāks par rādītāja skaitli Gaida .
Trešais ir skaitlis, kas versijā salīdzinājumā nav saistošs. Tomēr tas tiek palielināts, kad Gaida programmatūras izplatīšana tiek mainīta jebkādā veidā, piemēram, ar papildu dokumentāciju vai optimizāciju. Katram jaunajam papildu versijai tas tiek atiestatīts uz 0.
Ar -Izeja karogs Gaida izdrukā kļūdu un iziet, ja versija ir novecojusi.
gaidīt -opts pat1 body1 … -opts patn bodyn
gaida, kamēr viens no modeļiem neatbilst izveidotā procesa rezultātam, ir pagājis noteiktais laika periods vai redzams faila beigas. Ja pēdējā iestāde ir tukša, to var izlaist.
Modeļi no jaunākajiem gaidīt pirms komanda tiek netieši izmantota pirms jebkura cita modeļa. Modeļi no jaunākajiem gaidīt pēc komanda tiek netieši izmantota pēc jebkura cita modeļa.
Ja argumenti uz visu sagaidīt apgalvojums pieprasa vairāk nekā vienu rindiņu, visus argumentus var "piestiprināt" vienā, lai izvairītos no katras rindas pārtraukšanas ar atpakaļzīmi. Šajā vienā gadījumā parastās Tcl aizvietošanas notiks, neraugoties uz breketēm.
Ja modelis ir atslēgvārds eof , atbilstošā iestāde tiek izpildīta pēc faila beigām. Ja modelis ir atslēgvārds pārtraukums , atbilstošā iestāde tiek izpildīta pēc datuma. Ja nav izmantots taimautu atslēgvārds, pēc netiešās null darbības tiek izpildīts pēc taimauta. Noklusējuma beigu laiks ir 10 sekundes, bet to var iestatīt, piemēram, 30, ar komandu "set timeout 30". Bezgalīgu taimautu var norādīt ar vērtību -1. Ja modelis ir atslēgvārds noklusējums , attiecīgais ķermenis tiek izpildīts pēc datuma vai beigu datuma.
Ja paraugs sakrīt, tad tiek izpildīts atbilstošais ķermenis. sagaidīt atgriež ķermeņa rezultātu (vai tukšu virkni, ja nav atbilstoša parauga). Gadījumā, ja ir vairāki modeļi, pirmais, kas parādās pirmais, tiek izmantots, lai atlasītu ķermeni.
Katru reizi, kad tiek parādīta jauna izlaide, to salīdzina ar katru modeli secībā, kādā tie ir uzskaitīti. Tādējādi jūs varat pārbaudīt, vai nav spēles, padarot pēdējo modeli kaut ko garantētu parādīties, piemēram, ātru. Situācijās, kad nav tūlītējas, jums ir jāizmanto pārtraukums (tāpat kā jūs, ja jūs mijiedarbojat manuāli).
Raksti ir norādīti trīs veidos. Pēc noklusējuma modeļi ir norādīti kā ar Tcl string match komandu (Šādi modeļi ir līdzīgi C-shell regulārajām izteiksmēm, ko parasti sauc par "glob" modeļiem). The -gl karogs var tikt izmantots, lai aizsargātu modeļus, kas citādi varētu atbilst sagaidīt karodziņus to darot. Jebkurš raksts, kas sākas ar "-", ir jāaizsargā šādā veidā. (Visas rindas, kas sākas ar "-", ir rezervētas turpmākajām opcijām.)
Piemēram, sekojošais fragments meklē veiksmīgu pieteikšanos. (Pieraksti to pārtraukt tiek uzskatīts par procedūru, kas noteikta citur skriptā.)
sagaidīt {aizņemts {ielieciet aizņemts n; exp_continue} neizdevās pārtraukt "nederīgu paroli" pārtraukt taimautu pārtraukt savienojumu}
Ceturtajā modelī ir nepieciešami citāti, jo tajā ir atstarpe, kas citādi varētu atšķirt modeli no darbības.Modeļi ar vienu un to pašu darbību (piemēram, 3. un 4. vieta) prasa vēlreiz uzskaitīt darbības. To var izvairīties, izmantojot regexp stila modeļus (skatiet zemāk). Plašāku informāciju par glob stila modeļu veidošanu var atrast Tcl rokasgrāmatā.
Regexp stila modeļi atbilst Tcl's definētajam sintakses veidam regexp (īss vārds "regulāras izteiksmes") komandai. regexp modeļi tiek ieviesti ar karodziņu -re . Iepriekšējo piemēru var pārrakstīt, izmantojot regexp kā:
sagaidīt {aizņemts {ielieciet aizņemts n; exp_continue} -re "neizdevās | nederīga parole" pārtraukt taimautu pārtraukt savienojumu}
Abi modeļu tipi ir "nesaskaņoti". Tas nozīmē, ka modeļiem nav jāatbilst visai virknei, taču var sākt un beigt spēli jebkurā virknē (tik ilgi, kamēr viss pārējais sakrīt). Izmantojiet ^, lai atbilstu virknes sākumam, un $, lai tas atbilstu beigām. Ņemiet vērā, ka, ja jūs negaidīsiet virknes beigas, jūsu atbildes var viegli nokļūt virknes vidū, jo tās tiek atdalītas no izveidotā procesa. Kamēr tiek iegūti pareizi rezultāti, izlaide var izskatīties nedabiska. Tādējādi ieteicams izmantot $, ja jūs varat precīzi aprakstīt rakstzīmes virknes beigās.
Ņemiet vērā, ka daudzos redaktoros ^ un $ atbilst līniju sākumam un beigām. Tomēr, tā kā paredzams, ka tas nav orientēts uz līniju, šīs rakstzīmes atbilst datu sākumam un beigām (atšķirībā no rindām), kas pašlaik ir sagaidāmajā atbilstošajā buferšķīdumā. (Skatīt arī tālāk sniegto piezīmi par "sistēmas gremošanas traucējumiem.")
The -eks karodziņš nosaka, ka modelis ir saskaņots kā "precīzs" virkne. Netika veikta *, ^, utt. Interpretācija (lai gan parasti jāievēro parastās Tcl konvencijas). Precīzi modeļi vienmēr ir vienoti.
The -nocase karodziņš izraisa lielos burtus, lai salīdzinātu, it kā tie būtu mazo burtu simboli. Paraugs netiek ietekmēts.
Lasot produkciju, vairāk nekā 2000 baitu var piespiest agrāk baitus par "aizmirst". To var mainīt ar funkciju match_max . (Ņemiet vērā, ka pārlieku lielas vērtības var palēnināt modelēšanas matricu.) Ja patlist ir full_buffer , atbilstošā iestāde tiek izpildīta, ja match_max ir saņemti baitu un nav citu paraugu. Vai tas ir vai nav full_buffer atslēgvārds tiek izmantots, aizmirstās rakstzīmes tiek rakstītas expec_out (buferšķīdumā).
Ja patlist ir atslēgvārds null un nulls ir atļauti (izmantojot remove_nulls komanda), tiek izpildīta atbilstošā iestāde, ja tiek saskaņota viena ASCII 0. Nav iespējams saskaņot 0 bitus ar glob vai regexp modeļiem.
Pēc atbilstoša modeļa (vai eof vai full_buffer), jebkura saskaņošana un iepriekš nesaskaņota izlaide tiek saglabāta mainīgajā expect_out (buferis) . Mainīgajos lielumos saglabā līdz pat 9 regexp apakšvirknes atbilstības expect_out (1, virkne) cauri expect_out (9, virkne) . Ja -indeksi karogs tiek izmantots pirms parauga, sākuma un beigu indeksi (formā, kas piemērota longa ) no 10 virknes tiek saglabāti mainīgajos lielumos expect_out (X, sākums) un expect_out (X, beigas) kur X ir cipars, atbilst bufera apakšvirknes pozīcijai. 0 attiecas uz virknes, kas atbilst visam paraugam un tiek ģenerētas glob modeļiem, kā arī regexp modeļiem. Piemēram, ja process ir radījis "abcdefgh n" produkciju, rezultāts:
sagaidīt "cd"
it kā būtu izpildīti šādi apgalvojumi:
set expec_out (0, string) cd set expec_out (buffer) abcd
un "efgh n" paliek izvades buferī. Ja process radīja izvadi "abbbcabkkkka n", rezultāts:
gaidīt -indeksus -re "b (b *). * (k +)"
it kā būtu izpildīti šādi apgalvojumi:
set expec_out (0, start) 1 set expec_out (0, end) 10 set expec_out (0, string) bbbcabkkkk set expec_out (1, start) 2 set expec_out (1, end) 3 set expec_out (1, string) bb set expec_out (2, starts) 10 set expec_out (2, end) 10 set expec_out (2, string) k set expec_out (buffer) abbbcabkkkk
un "a n" ir atstāts izvades buferī. Veidne "*" (un -re ". *") Izlauzās izvades buferi, neizlasot procesa rezultātus.
Parasti saskaņotais izvads tiek noraidīts no Expect iekšējiem buferiem. To var novērst, prefiksējot modeli ar -pārnese karogs Šis karodziņš ir īpaši noderīgs eksperimentējot (un, eksperimentējot, to var saīsināti ar "-not").
Nokopts ID, kas saistīts ar atbilstošo izvadi (vai eof vai full_buffer), tiek saglabāts expect_out (spawn_id) .
The -pārtraukums karodziņš liek pašreizējai sagaidāmajai komandai izmantot šādu vērtību kā taimautu, nevis izmantot taimautu mainīgā lielumu.
Pēc noklusējuma modeļi tiek saskaņoti ar pašreizējā procesa izvadi, tomēr -i karogs paziņo, ka iznākums no nosauktā spawn_id saraksta ir jāsakrīt ar jebkuru šādu shēmu (līdz nākamajai -i ) "Spawn_id" sarakstam vajadzētu būt vai nu atstarpes atstarpes sarakstam spawn_ids, vai arī mainīgajam, kas attiecas uz šādu spawn_ids sarakstu.
Piemēram, nākamais piemērs gaida no $ proc2 nosaukta spawn_id, kas saistīts ar pašreizējo procesu vai "aizņemts", "neizdevās" vai "nederīga parole".
sagaidīt {-i $ proc2 aizņemts {aizņemts n; exp_continue} -re "neizdevās | nederīga parole" pārtraukt taimautu pārtraukt savienojumu}
Globālā mainīgā vērtība any_spawn_id var izmantot, lai saskaņotu modeļus ar visiem spawn_ids, kas ir nosaukti ar visiem citiem -i karogi pašreizējā sagaidīt komandu Spawn_id no a -i karodziņš bez saistīta parauga (t.i., pēc tam tūlīt seko cits -i ) ir pieejams visiem citiem modeļiem tajā pašā sagaidīt komanda, kas saistīta ar any_spawn_id.
The -i karogs var arī apzīmēt globālo mainīgo, un šādā gadījumā mainīgais tiek lasīts nūju rādītāju sarakstam. Mainīgais mainās katru reizi, kad tas mainās. Tas nodrošina veidu, kā mainīt I / O avotu, kamēr komanda izpildīta. Šādi veidotos nāves ID tiek saukti par "netiešiem" nūjiņu ID.
Darbības, piemēram, pārtraukums un Turpināt izraisīt kontroles struktūras (t.i., par , proc ), lai uzvesties parastajā veidā. Komanda exp_ turpināt atļauj sagaidīt pati turpināt izpildīt, nevis atgriezties, kā parasti.
Tas ir noderīgi, lai izvairītos no nepārprotamas cilpas vai atkārtotiem sagaidāmajiem apgalvojumiem. Šis piemērs ir fragmenta daļa, lai automatizētu rlogin. The exp_ turpināt izvairās rakstīt sekundi sagaidīt paziņojums (lai meklētu uzvedni vēlreiz), ja rlogin parāda paroli.
n "send_user" n "sūtīt" $ expect_out (1, string) r "stty" {{parole: {stty -echo send_user "parole ($ user) uz $ host:" expect_user -re " echo exp_continue} nepareiza {send_user} nepareiza parole vai konta n "exit" timeout {send_user savienojums ar $ hosts ir beidzies n "exit} eof {send_user" savienojums ar saimniekdatoru neizdevās: $ expec_out (buferšķīdums) "exit} atkārtoti $}
Piemēram, šāds fragments varētu palīdzēt lietotāja rokasgrāmatai izveidot mijiedarbību, kas jau ir pilnīgi automatizēta. Šajā gadījumā terminālis tiek ievietots izejvielu režīmā. Ja lietotājs nospiež "+", mainīgais tiek palielināts. Ja tiek nospiests "p", procesam tiek nosūtīti vairāki atgriešanas gadījumi, iespējams, kaut kādā veidā to pievilkt, un "i" ļauj lietotājam mijiedarboties ar procesu, efektīvi iztukšot kontroli no skripta. Katrā gadījumā - exp_ turpināt ļauj pašreizējo sagaidīt turpināt modeļu saskaņošanu pēc pašreizējās darbības veikšanas.
stty neapstrādāts-ne-expect_after {-i $ user_spawn_id "p" (nosūtīt " r r r"; exp_continue} "+" {incr foo; exp_continue} "i" {mijiedarboties; exp_continue} "iziet" no izejas)
Pēc noklusējuma, exp_ turpināt noņem laika taimeri. Taimeris netiek atsākts, ja exp_ turpināt tiek saukts ar -pārtraukt_timēru karogs
gaidīt pēc expect_args
darbojas identiski gaidīt pirms izņemot gadījumus, ja modeļi no abiem sagaidīt un gaidīt pēc var saskaņot, sagaidīt modelis tiek izmantots. Skatīt gaidīt pirms komandu, lai iegūtu vairāk informācijas.
expect_background expect_args
pieņem tādus pašus argumentus kāsagaidīt , taču tas nekavējoties atgriežas. Modeļus pārbauda ikreiz, kad tiek saņemta jauna ieeja. Modelispārtraukums unnoklusējums ir bezjēdzīgiexpect_background un tie tiek klusi izmesti. Pretējā gadījumāexpect_background komanda izmantogaidīt pirms ungaidīt pēc modeļi tāpat kāsagaidīt dara
Kadexpect_background darbības tiek novērtētas, tiek bloķēta fona apstrāde par vienu un to pašu nārstojošo ID. Fona apstrāde tiek atbloķēta, kad darbība tiek pabeigta. Lai gan fona apstrāde ir bloķēta, to var izdarīt (priekšplāna)sagaidīt uz tā paša nārsta ID.
Nav iespējams izpildītsagaidīt kamēr aexpect_background ir atbloķēts.expect_background par konkrētu nārstojošo id tiek dzēsts, paziņojot jaunu expect_background ar tādu pašu nārstojošo id. Deklarējotexpect_background bez raksta noņem norādīto nārsta ID no spējas saskaņot modeļus fonā.
gaidīt pirms expect_args
pieņem tādus pašus argumentus kāsagaidīt , taču tas nekavējoties atgriežas. Modeļu darbības pāri no jaunākajiemgaidīt pirms ar to pašu nārstojošo id netieši tiek pievienoti jebkuram tālāk norādītajamsagaidīt komandas. Ja paraugs sakrīt, tiek uzskatīts, ka tas ir norādītssagaidīt pati komanda, un saistītā iestāde tiek izpildīta saistībā arsagaidīt komandu Ja modeļi no abiemgaidīt pirms unsagaidīt var saskaņot,gaidīt pirms modelis tiek izmantots.
Ja nav norādīts neviens modelis, nevienu modeli nekonstatē nārsta ID.
Ja vien to neaizliedz-i karogsgaidīt pirms modeļi atbilst nārsta ID, kas noteikts laikā, kadgaidīt pirms komanda tika izpildīta (nevis tad, ja tās modelis ir saskaņots).
Informācijas zīmes cēlonisgaidīt pirms lai atgrieztu pašreizējās specifikācijas par to, kādus modeļus tas atbilst. Pēc noklusējuma tiek ziņots par pašreizējo nārsta ID. Informācija par nārstojošo id var būt pieejama pēc izvēles. Piemēram
expect_before -info-i $ proc
Ne vairāk kā vienu nāves id specifikāciju var dot. Neatkarīgs karodziņš aizkavē tiešos nārstojošo ID, kas nāk no tikai netiešām specifikācijām.
Instead of nesting id specification, karodziņš "-all" izraisīs "-info", lai ziņotu par visiem nūjiņu ID.
Informācijas par karodziņu izvadi var atkārtoti izmantot kā argumentu, ko gaidīt iepriekš.
expect_tty expect_args
ir kāsagaidīt bet tas nolasa rakstzīmes no / dev / tty (t.i., lietotāja taustiņsitienus). Pēc noklusējuma lasīšana tiek veikta vārītajā režīmā. Tādējādi līnijām jābeidzas ar atgriešanos, laisagaidīt redzēt tos. To var mainīt, izmantojotstty (skatstty komanda zemāk).
expect_user expect_args
ir kāsagaidīt bet tas skan rakstzīmes no stdin (t.i., lietotāja taustiņsitienus). Pēc noklusējuma lasīšana tiek veikta vārītajā režīmā. Tādējādi līnijām jābeidzas ar atgriešanos, laisagaidīt redzēt tos.To var mainīt, izmantojotstty (skatstty komanda zemāk).
dakša
rada jaunu procesu. Jaunais process ir precīzs pašreizējās eksemplārsGaida process. Par panākumiemdakša atgriež 0 jaunajam (bērna) procesam un atgriež procesa ID bērna procesā vecāku procesā. Par neveiksmi (vienmēr tāpēc, ka trūkst resursu, piemēram, mijmaiņas vietas, atmiņas);dakša atgriež -1 vecāku procesu, un neviens bērns process nav izveidots.
Forked procesi iziet cauriIzeja komandu, tāpat kā sākotnējo procesu. Forked procesiem ir atļauts rakstīt log failos. Ja neesat atspējojis atkļūdošanu vai piesakās lielākajā daļā procesu, rezultāts var būt mulsinošs.
Dažus pty implementācijas var sajaukt vairāki lasītāji un rakstnieki, pat īslaicīgi. Tādējādi tas ir drošākaisdakša pirms nārsta procesiem.
mijiedarboties string1 body1 … stringn bodyn
dod lietotājam pašreizējā procesa kontroli, lai taustiņsitienus nosūtītu uz pašreizējo procesu, un tiek atjaunoti pašreizējā procesa stdout un stderr.
Stīgu ķermeņa pāri var norādīt kā argumentus, un šādā gadījumā ķermenis tiek izpildīts, kad tiek ievadīta attiecīgā stīgu. (Pēc noklusējuma virkne netiek nosūtīta uz pašreizējo procesu.)tulks tiek pieņemts komandējums, ja trūkst galīgā ķermeņa.
Ja argumenti uz visumijiedarboties apgalvojums pieprasa vairāk nekā vienu rindiņu, visus argumentus var "piestiprināt" vienā, lai izvairītos no katras rindas pārtraukšanas ar atpakaļzīmi. Šajā vienā gadījumā parastās Tcl aizvietošanas notiks, neraugoties uz breketēm.
Piemēram, šī komanda izpilda mijiedarbību ar šādiem definētiem ķēdes pāra savienojumiem: Kad tiek nospiests ^ Z,Gaida ir apturēta. (The-rezervēt karogs atjauno terminālu režīmus.) Kad tiek nospiests ^ A, lietotājs redz "jūs ierakstījāt vadības taustiņu A" un process tiek nosūtīts ^ A. Kad tiek nospiests $, lietotājs redz datumu. Kad ir nospiests ^ C,Gaida izejas. Ja tiek ievadīts "foo", lietotājs redz "bar". Kad tiek nospiests ~~,Gaida tulks darbojas interaktīvi.
set CTRLZ 032 interact {-rezet $ CTRLZ {exec kill -STOP pid} 001 {send_user 'jūs ierakstījāt control-A n "; nosūtiet " 001"} $ {send_user "Datums ir pulksteņa formāts pulksteņa sekundes."} 003 izejas foo {send_user "bārs"} ~~}
Virkņu ķermeņa pāros stīgas tiek saskaņotas tādā secībā, ka tās ir uzskaitītas kā argumenti. Daļēji saskaņotās rindiņas netiek sūtītas uz pašreizējo procesu, gaidot nākamo atlikumu. Ja pēc tam tiek ievadītas rakstzīmes tādā veidā, ka vairs nevar būt spēles, tikai procesa daļa tiks nosūtīta procesam, kas nevar sākt citu spēli. Tādējādi, virknes, kas ir daļējas atbilstības apakšvirknes, var sakrist vēlāk, ja sākotnējās virknes, kuras mēģināja būt, galu galā neizdodas.
Pēc noklusējuma virknes atbilstība ir precīza, bez savvaļas kartēm. (Pretēji tamsagaidīt komandu izmanto glob stila modeļus pēc noklusējuma.)-eks karogu var izmantot, lai aizsargātu modeļus, kas citādi varētu atbilstmijiedarboties karodziņus to darot. Jebkurš raksts, kas sākas ar "-", ir jāaizsargā šādā veidā. (Visas rindas, kas sākas ar "-", ir rezervētas turpmākajām opcijām.)
The-re karogs liek virkni interpretēt kā regexp stila modeli. Šajā gadījumā mainīgajā tiek saglabātas atbilstošās apakšstrāvas sadarboties līdzīgi kāsagaidīt saglabā tā produkciju mainīgajāgaidīt . The-indeksi karogs ir līdzīgi atbalstīts.
Modeliseof ievieš darbību, kas tiek izpildīta pēc faila beigām. Atsevišķseof modelis var arī sekot-izlaide karodziņš, tādā gadījumā tas ir saskaņots, ja, ierakstot izvadi, tiek konstatēts eof. Noklusējumseof darbība ir "atgriešanās", tā kamijiedarboties vienkārši atgriežas pie jebkura EOF.
Modelispārtraukums ievieš taimautu (sekundēs) un darbību, kas tiek izpildīta pēc rakstzīmju lasīšanas noteiktā laikā. Thepārtraukums modelis attiecas uz pēdējo norādīto procesu. Nav noklusējuma taimauts. Īpašais mainīgais "timeout" (ko izmantosagaidīt komanda) neietekmē šo laika nobīdi.
Piemēram, šādu paziņojumu var izmantot, lai autologizētu lietotājus, kuri stundu nav ievadījuši, bet kuri joprojām saņem bieži sistēmas ziņojumus:
mijiedarboties - ievadiet $ user_spawn_id taimauts 3600 return-output $ nerwn_id
Ja modelis ir atslēgvārdsnull un nulls ir atļauti (izmantojotremove_nulls komanda), tiek izpildīta atbilstošā iestāde, ja tiek saskaņota viena ASCII 0. Nav iespējams saskaņot 0 bitus ar glob vai regexp modeļiem.
Iezīmējiet paraugu ar karodziņu-ES rakstu izraisa mainīgo mijiedarboties (spawn_id) kas jānoregulē uz spawn_id, kas atbilst modelim (vai eof).
Darbības, piemēram,pārtraukums unTurpināt izraisīt kontroles struktūras (t.i.,par , proc ), lai uzvesties parastajā veidā. Tomēratgriešanās izraisa mijiedarbību, lai atgrieztos savam zvanītājaminter_return cēloņimijiedarboties izraisīt atgriešanos savā zvanītājā. Piemēram, ja tiek izsaukta "proc foo"mijiedarboties kas tad izpildīja prasībuinter_return , proc foo atgriezīsies. (Tas nozīmē, ka, jamijiedarboties zvanitulks interaktīvi ierakstotatgriešanās izraisīs mijiedarbību, lai turpinātu, kamērinter_return izraisīs mijiedarbību, lai atgrieztos zvanītājam.)
Laikāmijiedarboties , neapstrādāts režīms tiek izmantots, lai visas rakstzīmes varētu tikt nodotas pašreizējam procesam.Ja pašreizējais process nesaņem darba vadības signālus, tas apstāsies, ja sūtīs stop signālu (pēc noklusējuma ^ Z). Lai to atsāktu, nosūtiet turpinājuma signālu (piemēram, ar "nogalināt -CONT"). Ja jūs patiešām vēlaties nosūtīt SIGSTOP šādam procesam (ar ^ Z), vispirms apsveriet csh nestīšanu un pēc tam palaidiet savu programmu. No otras puses, ja vēlaties nosūtīt SIGSTOP uzGaida pats, pirmais tulkotājs (iespējams, izmantojot escape rakstzīmi), un tad nospiediet ^ Z.
Stringa ķermeņa pāri var izmantot kā stenogrāfiju, lai izvairītos no tulka ievadīšanas un komandu izpildes interaktīvā veidā. Iepriekšējais termināla režīms tiek izmantots, kamēr notiek ķēdes pāra ķermeņa izpildīšana.
Ātrāk, darbības pēc neapstrādātas darbības tiek izpildītas. The-rezervēt karodziņš atiestatīs termināli uz iepriekšējo režīmumijiedarboties tika izpildīts (vienmēr, pagatavots režīms). Ievērojiet, ka rakstzīmes, kas ievadītas režīma pārslēgšanas laikā, var tikt zaudētas (dažas sistēmas terminālu draiveris ir neapmierinoša). Vienīgais iemesls to izmantot-rezervēt ir, ja jūsu darbība ir atkarīga no gatavošanas režīma veikšanas.
The-heo karodziņš nosūta rakstzīmes, kas atbilst šādam paraugam, atpakaļ procesā, kas tos ģenerēja, lasot katru rakstzīmi. Tas var būt noderīgs, ja lietotājam jāredz atsauksmes no daļēji ierakstītiem paraugiem.
Ja modelis tiek atkārtots, bet galu galā nesaskan, rakstzīmes tiek sūtītas uz izveidoto procesu. Ja izveidotais process tos atkārtojas, lietotājs divas reizes redzēs rakstzīmes.-heo iespējams, ir piemērots tikai situācijās, kad lietotājs, visticamāk, neizpildīs modeli. Piemēram, šāds izvilkums ir no rftp, rekursīvā ftp skripta, kur lietotājam tiek prasīts ievadīt ~ g, ~ p vai ~ l, lai rekursīvi iegūtu, izveidotu vai uzskaitītu pašreizējo direktoriju. Tās ir tik tālu no parastajām ftp komandām, ka lietotājs visticamāk nevarēs ievadīt ~, kam seko kaut kas cits, izņemot kļūdaini, tādā gadījumā viņi, iespējams, vienkārši ignorēs rezultātu.
mijiedarboties {-echo ~ g (getcurdirectory 1) -echo ~ l (getcurdirectory 0) -echo ~ p (putcurdkeyory)}
The-paldies karogs izraksta rakstzīmes, kas atbilst tālāk norādītajam modelim, kā rakstzīmes tiek lasītas izvades procesā.
Tas ir noderīgi, ja vēlaties ļaut programmai atsaukt modeli. Piemēram, šādi var izmantot, lai uzraudzītu, kur persona zvana (Hayes stila modems). Katru reizi, kad ir redzams "ATD", skripts reģistrē pārējo rindiņu.
proc lognumber {} {interaktīvs -nobuffer -re "(. *)" atgriešanās liek $ log "pulksteņa formāts pulksteņa sekundes: sastādīts $ interact_out (1, string)" interact -nobuffer "atd" lognumber
Laikāmijiedarboties , iepriekš izmantotalog_user tiek ignorēts. It īpaši,mijiedarboties piespiedīs tā produkciju reģistrēt (nosūtīt uz standarta izvadi), jo tiek pieņemts, ka lietotājs nevēlas akliski mijiedarboties.
The-o karodziņš izraisa jebkuru šādu ķermeņa pāri, kas jāpiemēro pašreizējā procesa izejai. Tas var būt noderīgs, piemēram, darbojoties ar saimniekiem, kuri sūta nevēlamus rakstzīmes telnet sesijas laikā.
Pēc noklusējuma,mijiedarboties sagaida, ka lietotājs rakstīs stdin un lasīs stdout noGaida process pats. The-u karodziņš (par "lietotāju") padaramijiedarboties meklēt lietotāju kā procesu, kas minēts tā argumentā (kam jābūt izveidotajam ID).
Tas ļauj apvienot divus nesaistītos procesus, neizmantojot skaidru cilpu. Lai atvieglotu atkļūdošanu, sagaidiet, ka diagnostika vienmēr iet uz stderr (vai stdout noteiktai informācijai par mežizstrādi un atkļūdošanu). Tā paša iemesla dēļtulks komanda interaktīvi izlasīsies no stdin.
Piemēram, šāds fragments izveido pieteikšanās procesu. Pēc tam tas izsauc lietotāju (nav parādīts) un beidzot savieno abus kopā. Protams, jebkurš process var tikt aizstāts ar pieteikšanos. Piemēram, apvalks ļautu lietotājam strādāt bez konta un paroles piegādes.
Nerādīt pieteikšanās set login $ spawn_id nārstīt tip modems # atdalīt atpakaļ lietotājam # savienot lietotāju, lai pieteiktos, sazināties -u $ login
Lai sūtītu izvadi vairākiem procesiem, norādiet katru nulles indeksa sarakstu, kuru iepriekš norādījis a-izlaide karogs Ienākumu par izlaides nārstojošo identifikatoru grupu var noteikt ar nulles indeksu, kuru iepriekš norādījis a-input karogs (Abi-input un-izlaide var ņemt sarakstus tādā pašā veidā kā-i karogssagaidīt komanda, izņemot to, ka any_spawn_id nav nozīmesmijiedarboties .) Visi šādi karodziņi un virknes (vai raksti) attiecas uz šo ievadi, līdz parādās vēl viena ieejas karodziņa. Ja nē-input šķiet-izlaide nozīmē "-input $ user_spawn_id -output". (Tāpat ar modeļiem, kuriem tā nav-input .) Ja viens-input ir norādīts, tas ignorē $ user_spawn_id. Ja sekundē-input ir norādīts, tas ignorē $ spawn_id. Papildus-input var norādīt karodziņus.
Abas implicētās ievades procesi pēc noklusējuma ir tādi, kuru izvadi ir norādīti kā $ spawn_id un $ user_spawn_id (reverse). Ja-input karogs parādās ar nē-izlaide karodziņš, šī procesa rakstzīmes tiek noraidītas.
The-i karodziņš ievieš pašreizējā spawn_id aizstāšanu, ja nav citu-input vai-izlaide karogi tiek izmantoti. -I karogs nozīmē -o karodziņu.
Ir iespējams mainīt procesus, ar kuriem tiek mijiedarbojas, izmantojot netiešās nārstošanas ID. (Netiešie nārstošanas ID ir aprakstīti sagaidīšanas komandas sadaļā.) Netiešās nārstošanās ID var norādīt ar -i, -u, -input vai -output flags.
tulks args
liek lietotājam interaktīvi uzaicinātGaida un Tcl komandas. Katras komandas rezultāts tiek izdrukāts.
Darbības, piemēram,pārtraukums unTurpināt izraisīt kontroles struktūras (t.i.,par , proc ), lai uzvesties parastajā veidā. Tomēratgriešanās liek tulkam atgriezties pie zvanītāja, kamērinter_return cēloņitulks izraisīt atgriešanos savā zvanītājā. Piemēram, ja tiek izsaukta "proc foo"tulks kas tad izpildīja prasībuinter_return , proc foo atgriezīsies. Citas komandas cēloņitulks turpināt piedāvāt jaunas komandas.
Pēc noklusējuma uzvedne satur divus veselus skaitļus. Pirmais vesels skaitlis apraksta novērtējuma kaudzes dziļumu (t.i., cik reizes Tcl_Eval ir izsaukts). Otrais vesels skaitlis ir Tcl vēstures identifikators. Uzdevumu var iestatīt, nosakot procedūru ar nosaukumu "prompt1", kura atgriešanās vērtība kļūst par nākamo uzvedni. Ja paziņojumam ir atvērtas pēdiņas, parens, breketes vai kronšteini, sekundārais uzvednes (pēc noklusējuma "+>") tiek izdots pēc jaunas līnijas. Sekundāro uzvedni var iestatīt, nosakot procedūru ar nosaukumu "prompt2".
Laikātulks , pagatavotais režīms tiek lietots pat tad, ja tā zvanītājs izmanto neapstrādātu režīmu.
Ja stdin ir slēgts,tulks atgriezīsies, ja vien-Eof karodziņš tiek izmantots, un šādā gadījumā tiek izmantots nākamais arguments.
log_file args -a fails
Ja ir norādīts faila nosaukums,log_file fiksēs sesijas stenogrammu (sākot no šī brīža).log_file pārtrauks ierakstu, ja nav norādīts neviens arguments. Jebkurš iepriekšējais žurnāla fails ir slēgts.
Faila nosaukuma vietā Tcl faila identifikators var tikt norādīts, izmantojot- atvērt vai-leaveopen karogi. Tas ir līdzīgsnārsto komandu (Skatnārsto lai iegūtu vairāk informācijas.)
The-a karoga spēks, kas jāreģistrē, kuru nomācalog_user komandu
Pēc noklusējuma,log_file komandu pievieno uz veciem failiem, nevis to noapaļot, lai ērtāk varētu izslēgt noņemšanu un vairākas reizes vienā sesijā. Lai saīsinātu failus, izmantojiet-neappendēt karogs
The-info karogs rada log_file, lai atgrieztu jaunāko ne-info argumentu aprakstu.
log_user -info | 0 | 1
Pēc noklusējuma sūtīt / gaidīt dialogu ieraksta stdout (un logfile, ja tas ir atvērts). Komandu "stdout" atspējo komanda "log_user 0" un atkārtoti aktivizē "log_user 1". Reģistrēšanās logfailā nav mainīta.
The-info karogs liek log_user atsaukt jaunāko ne-info argumentu aprakstu.
match_max -d -i spawn_id izmērs
nosaka bufera lielumu (baitos), kuru iekšēji izmantosagaidīt . Ar nē Izmērs arguments, pašreizējais izmērs tiek atgriezts.
Ar-d karodziņš, ir iestatīts noklusējuma lielums. (Sākotnējais noklusējums ir 2000.) Ar-i karodziņš, izmērs ir iestatīts nosauktajai nārsta id, pretējā gadījumā tas ir iestatīts pašreizējam procesam.
pārklājums - # spawn_id - # spawn_id … programma args
izpilda "programma args "vietā pašreizējāGaida programma, kas beidzas. Liektais defisma arguments piespiež defisu komandas nosaukuma priekšā, it kā tas būtu pieteikšanās čaula. Visi spawn_ids ir slēgti, izņemot tos, kas nosaukti kā argumenti. Tie ir piesaistīti nosauktajiem failu identifikatoriem.
Spawn_ids ir saistītas ar faila identifikatoriem jaunai mantošanas programmai. Piemēram, sekojošā rindiņā darbojas šahs un to var kontrolēt ar pašreizējo procesu - teiksim, šaha meistaru.
pārklājums -0 $ spawn_id -1 $ spawn_id -2 $ spawn_id šahs
Tas ir efektīvāks nekā "mijiedarbojas ar -u", taču tas ziedo spēju veikt ieprogrammētu mijiedarbību kopšGaida process vairs netiek kontrolēts.
Ievērojiet, ka nav paredzēts kontrolējošais terminālis. Tādējādi, ja jūs atvienojat vai pārveidojat standarta ievadi, programmas, kas veic darba kontroli (apvalki, pieteikšanās utt.) Nedarbosies pareizi.
paritāte -d -i spawn_id vērtība
nosaka, vai paritāte jāsaglabā vai jānoņem no iegūto procesu rezultāta. Ja vērtība ir nulle, paritāte ir attīrīta, pretējā gadījumā to neizmanto. Ar nē vērtība arguments, pašreizējā vērtība tiek atgriezta.
Ar-d karodziņš, ir iestatīta noklusējuma paritātes vērtība. (Sākotnējā noklusējuma vērtība ir 1, t.i., paritāte nav attīrīta.) Ar-i karodziņš, paritātes vērtība ir iestatīta nosauktajai nārsta id, pretējā gadījumā tas tiek iestatīts pašreizējam procesam.
remove_nulls -d -i spawn_id vērtība
nosaka, vai nulles tiek saglabātas vai noņemtas no radīto procesu izejas, pirms modelis tiek saskaņots vai saglabāts mainīgajā gaidīt vai sadarboties . Ja vērtība ir 1, nulls tiek noņemti. Ja vērtība ir 0, nulls netiek noņemti. Ar nē vērtība arguments, pašreizējā vērtība tiek atgriezta.
Ar-d karodziņš, ir iestatīta noklusējuma vērtība. (Sākotnējais noklusējums ir 1, t.i., nulls tiek noņemti.) Ar-i karodziņš, vērtība ir iestatīta nosauktajai nārsta id, pretējā gadījumā tas ir iestatīts pašreizējam procesam.
Vai nulles tiek noņemtas vai ne?Gaida reģistrēs nulles bitus logam un stdout.
nosūtiet -flags virkni
Sūta virkne uz pašreizējo procesu. Piemēram, komanda
nosūtiet "sveika pasaule"
nosūta rakstzīmes, lai iegūtu pašreizējo procesu. (Tcl ietver printf līdzīgu komandu (saucformātā ), kas var veidot patvaļīgi sarežģītas virknes.)
Rakstzīmes tiek nosūtītas uzreiz, lai gan programmas ar līnijas buferētās ieejas rakstzīmēm netiek lasītas, līdz tiek nosūtīts atbildes raksturs. Atgriešanās raksturs ir apzīmēts ar " r".
The-- karogs liek nākamajam argumentam interpretēt kā virkni, nevis karogu.Pirms jebkura virkne var būt "-", vai tas tiešām izskatās kā karodziņš. Tas nodrošina drošu mehānismu, lai norādītu mainīgās virknes, netiktu uzlauzti tie, kas nejauši izskatās kā karodziņi. (Visas rindas, kas sākas ar "-", ir rezervētas turpmākajām opcijām.)
The-i karogs paziņo, ka virkne tiek nosūtīta uz nosaukumu spawn_id. Ja spawn_id ir user_spawn_id , un terminālis ir neapstrādātā režīmā, virknes jaunās līnijas tiek pārtulkotas uz return-newline secības, lai tās parādās tā, it kā terminālis būtu gatavots režīmā. The-raw karodziņš atspējo šo tulkojumu.
The-null karogs nosūta null rakstzīmes (0 baiti). Pēc noklusējuma tiek nosūtīts viens nulle. Pēc skaitļa var sekot vesels skaitlis-null lai norādītu, cik nulles ir jānosūta.
The- izlauzties karogs rada pārtraukuma stāvokli. Tas ir jēga tikai tad, ja nūjošanas ID norāda uz tty ierīci, kas atvērta, izmantojot "spawn -open". Ja esat radījis procesu, piemēram, galu, jums vajadzētu izmantot tip's konvenciju, lai radītu pārtraukumu.
The-s karogs izvada sūtīšanu "lēnām", tādējādi izvairoties no kopējas situācijas, kad dators izslēdz ieejas buferi, kas bija paredzēts cilvēkam, kurš nekad nebūtu pārsniedzis to pašu buferi. Šo produkciju kontrolē mainīgā vērtība "send_slow", kas ņem divu elementu sarakstu. Pirmais elements ir vesels skaitlis, kas apraksta baitu skaitu, lai nosūtītu atomu. Otrais elements ir reāls skaitlis, kas apraksta, cik sekundes ir jāatdala atomu nosūtītās. Piemēram, "set send_slow {10 .001}" piespiestu "send -s" nosūtīt virknes ar 1 milisekunu starp ik pēc 10 sūtītām rakstzīmēm.
The-h karoga spēks izvadīt sūtīt (nedaudz) kā cilvēks patiešām rakstīt. Cilvēks līdzīgs aizkavēšanās parādās starp rakstzīmēm. (Algoritms ir balstīts uz Weibull izplatīšanu, ar modifikācijām, kas atbilst šim konkrētajam pielietojumam.) Šo produkciju kontrolē mainīgā vērtība "send_human", kas ņem piecu elementu sarakstu. Pirmie divi elementi ir vidējais rakstzīmju intervāls starp sekundēm. Pirmais tiek izmantots pēc noklusējuma. Otrais tiek izmantots vārdu galotnēs, lai simulētu smalkās pauzes, kas reizēm rodas šādās pārejās. Trešais parametrs ir mainīgums, ja .1 ir diezgan mainīgs, 1 ir pamatoti mainīgs un 10 ir diezgan nemainīgs. Galēji ir 0 līdz bezgalībai. Pēdējie divi parametri ir attiecīgi minimālais un maksimālais interlaika laiks. Minimālais un maksimālais tiek izmantoti pēdējā un "klipu" pēdējā laikā. Galīgais vidējais rādītājs var būt diezgan atšķirīgs no vidējā, ja minimālais un maksimālais klips ir pietiekami liels.
Piemēram, šāda komanda atdala ātru un konsekventu mašīnrakstītāju:
set send_human (.1 .3 1 .05 2) nosūtīt -h "Es esmu izsalcis. Padosies pusdienās."
bet pēc paģirām var būt piemērotāki:
set send_human {.4 .4 .2 .5 100} sūtīt -h "Goodd party lash night!"
Ņemiet vērā, ka kļūdas netiek simulētas, lai gan varat pašam iestatīt kļūdu labošanas situācijas, ievietojot sūtīšanas argumentus par kļūdām un labojumiem.
Nulles rakstzīmju nosūtīšanas karodziņi pārtraukumu nosūtīšanai, lēnas jaudas piespiešanai un cilvēka veida iznākšanai ir savstarpēji izslēdzoši. Tiks izmantots tikai pēdējais norādītais. Turklāt nē virkne Argumentu var norādīt ar karodziņiem nulles rakstzīmju vai pārtraukumu nosūtīšanai.
Pirms pirmās ir laba idejanosūtīt procesam, ko veicsagaidīt. sagaidīt gaidīs, kamēr process sāksiesnosūtīt nevar Jo īpaši, ja pirmaisnosūtīt pirms process sāk darboties, jūs riskējat, ka jūsu dati tiek ignorēti. Gadījumos, kad interaktīvās programmas nesniedz sākotnēju uzvedni, jūs varat to ieietnosūtīt ar kavēšanos, kā:
# Lai izvairītos no tā, ka hakeriem tiek sniegti padomi, kā ielauzties, šī sistēma neatbalsta ārēju paroli. # Pagaidiet 5 sekundes, lai izpildītu pabeigt neskatoties uz Telnet ļoti.secure.gov gulēt 5 sūtīt paroli
exp_send ir aizstājvārds par nosūtīt Ja Tk vidē lietojat Expectk vai kādu citu Expect variantu,nosūtīt definē Tk par pilnīgi citu mērķi.exp_send tiek nodrošināta vide saderība. Līdzīgas aliases ir paredzētas citām Expect citu sūtīšanas komandām.
send_error -flags string
ir kānosūtīt , izņemot to, ka produkcija tiek nosūtīta uz stderr, nevis uz pašreizējo procesu.
send_log - virkne
ir kānosūtīt , izņemot to, ka virkne tiek nosūtīta tikai žurnāla failam (sklog_file .) Ja neviens žurnāla fails nav atvērts, argumenti tiek ignorēti.
send_tty -flags string
ir kānosūtīt , izņemot to, ka produkcija tiek nosūtīta uz / dev / tty nevis pašreizējo procesu.
send_user -flags virkne
ir kānosūtīt , izņemot to, ka produkcija tiek nosūtīta uz stdout nevis uz pašreizējo procesu.
miega sekundes
liek skriptam gulēt par noteiktu sekundes skaitu. Sekundes var būt decimāls skaitlis. Pārtrauc (un Tk notikumus, ja jūs izmantojat Expectk) tiek apstrādāti, kamēr tiek gaidīti guļ.
neruns args programma args
izveido jaunu procesu "programma args ". Tās stdin, stdout un stderr ir savienoti ar Expect, lai tos varētu lasīt un rakstīt citiGaida komandas. Savienojums ir bojāts artuvu vai arī pats process aizver jebkuru faila identifikatoru.
Kad process sākas arnārsto , mainīgais spawn_id ir iestatīts uz deskriptoru, kas attiecas uz šo procesu. Process, ko aprakstījis spawn_id tiek uzskatīts par "pašreizējais process ". spawn_id var lasīt vai rakstīt, faktiski nodrošinot darba kontroli.
user_spawn_id ir globāls mainīgais, kas satur deskriptoru, kas attiecas uz lietotāju. Piemēram, kad spawn_id ir iestatīta uz šo vērtību,sagaidīt uzvedas kāexpect_user .
.I error_spawn_id ir globāls mainīgais, kas satur deskriptoru, kas attiecas uz standarta kļūdu. Piemēram, kad spawn_id ir iestatīta uz šo vērtību,nosūtīt uzvedas kāsend_error .
tty_spawn_id ir globāls mainīgais, kas satur deskriptoru, kas attiecas uz / dev / tty. Ja / dev / tty nepastāv (piemēram, cron, pie vai partijas skripts), tad tty_spawn_id nav definēts. To var pārbaudīt kā:
ja {info vars tty_spawn_id} {# / dev / tty pastāv} else {# / dev / tty neeksistē #, iespējams, cron, partijā vai skriptā}
nārsto atgriež UNIX procesa ID. Ja process netiek radīts, tiek atgriezts 0. Mainīgais spawn_out (vergs, vārds) ir iestatīts uz pty vergu ierīces nosaukumu.
Pēc noklusējuma,nārsto atgādina komandas nosaukumu un argumentus. The-noeho karogs apstājasnārsto no tā izdarīt.
The-konsole karogs rada konsoles izvadi, kas tiek novirzīta uz radīto procesu. Tas netiek atbalstīts visās sistēmās.
Iekšējinārsto izmanto pty, inicializēts tāpat kā lietotāja tty. Tas tiek inicializēts tā, lai visi iestatījumi būtu "normāli" (saskaņā ar stty (1)). Ja mainīgais stty_init ir definēts, tas tiek interpretēts stty argumentu stilā kā papildu konfigurācija. Piemēram, "iestatīt stty_init neapstrādātu" radīs papildu radīto procesu termināļus, lai sāktu neapstrādātu režīmu.-nottiopija izlaidis inicializāciju, pamatojoties uz lietotāja tty.-notity izlaiž "normālu" inicializāciju.
Parastinārsto aizņem maz laika, lai izpildītu. Ja jūs pamanāt, ka nārstot, ņemot vērā ievērojamu laiku, iespējams, ir sastopami pūtīši, kas ir saspiesti. Daudzi testi tiek veikti uz ptys, lai izvairītos no satricinājumiem ar nepareiziem procesiem. (Tie prasa 10 sekundes par katru ievilkto pty.) Running Expect ar-d iespēja parādīsies, jaGaida sastopas ar daudziem ptys nepāra stāvokļos. Ja jūs nevarat nogalināt procesus, uz kuriem šie ptys ir pievienoti, jūsu vienīgais risinājums var būt atsāknēšana.
Ja programma nevar veiksmīgi attīstīties, jo exec (2) neizdodas (piemēram, kad programma nepastāv), kļūdas ziņojums tiks atgriezts nākamajāmijiedarboties vaisagaidīt komandu it kā programma bija palaistis un radīja kļūdas ziņojumu kā izlaidi. Šī uzvedība ir dabas sekas, īstenojotnārsto . Iekšā nārstot dakšiņas, pēc kura radītajam procesam nav iespējas sazināties ar oriģināluGaida process, izņemot saziņu, izmantojot spawn_id.
The- atvērt karts liek nākamajam argumentam interpretēt kā Tcl faila identifikatoru (t.i., atpakaļ aratvērts .) Pēc tam nārstojošo id var tikt izmantots tā, it kā tas būtu radīts process. (Faila identifikatoru vairs neizmanto.) Tas ļauj apstrādāt neapstrādātas ierīces, failus un cauruļvadus kā radītos procesus, neizmantojot pty. 0 ir atgriezts, lai norādītu, ka nav saistīta procesa. Ja savienojums ar izveidoto procesu ir slēgts, tas ir arī Tcl faila identifikators. The-leaveopen karodziņš ir līdzīgs- atvērt izņemot to-leaveopen izraisa, ka faila identifikators paliek atvērts pat pēc nārsta ID aizvēršanas.
The-pty karogs liek atvērt pty, bet process nav radīts. 0 ir atgriezts, lai norādītu, ka nav saistīta procesa. Spawn_id ir iestatīts kā parasti.
Mainīgais spawn_out (vergs, fd) ir iestatīts uz faila identifikatoru, kas atbilst pty slave. To var aizvērt, izmantojot "close-slave".
The-ignore karodziņš norāda signālu, kas tiek ignorēts izveidotajā procesā. Pretējā gadījumā signāli saņem noklusējuma darbību. Signāli tiek nosaukti kāslazds komandu, izņemot to, ka katram signālam ir nepieciešams atsevišķs karodziņš.
Strace līmenis
izraisa sekojošus apgalvojumus, kas jāizdrukā pirms to izpildīšanas. (Tcl komandu izsekošanas mainīgie.) līmenis Norāda, cik izsvītrota izsaukuma kaudze. Piemēram, palaiž šādu komanduGaida izsekojot pirmajiem četriem zvana līmeņiem, bet ne zemāk par to.
gaidīt-c "strace 4" script.exp
The-info karogs rada strace, lai atgrieztu jaunāko ne-info argumentu aprakstu.
stty args
maina termināla režīmus līdzīgi ārējai stty komandai.
Pēc noklusējuma ir pieejams vadības pults. Citus terminālus var piekļūt, pievienojot statusa statusa pieprasījumu, kuru atgriež kā komandas rezultātu. Ja statuss netiek pieprasīts un ir pieejams kontrolējošais terminālis, neapstrādāto echo atribūtu iepriekšējais statuss tiek atgriezts tādā formā, kuru var vēlāk ko izmanto komanda.
Piemēram, argumentineapstrādāts vai- pārtika ievietojiet terminālu neapstrādātā režīmā. Argumenti-raw vaivārīti ievietojiet termināli gatavā režīmā. Argumentiecho un-heo ievietojiet term













