Forvent er et program som snakker til andre interaktive programmer i henhold til et skript. Følg skriptet, Forvent vite hva som kan forventes fra et program og hva den riktige responsen skal være. Et tolket språk gir forgrening og kontrollnivåer på høyt nivå for å lede dialogen. I tillegg kan brukeren ta kontroll og samhandle direkte når det ønskes, og deretter returnere kontrollen til skriptet.
Expectk er en blanding av Expect og Tk. Det oppfører seg akkurat som Expect og Tks ønske. Forvent kan også brukes direkte i C eller C ++ uten Tcl.
Navnet "Expect" kommer fra ideen om send / forvent sekvenser populert av uucp, kermit og andre modemkontrollprogrammer. Men i motsetning til uucp er Expect generalisert slik at den kan kjøres som en kommando på brukernivå med hvilket som helst program og oppgave i tankene. Forvent kan snakke med flere programmer på samme tid.
Hva forventer kan gjøre
For eksempel, her er noen ting du forventer at kommandoen kan gjøre:
- Forårsak at datamaskinen din skal ringe deg tilbake, slik at du kan logge inn uten å betale for samtalen.
- Start et spill, og hvis den optimale konfigurasjonen ikke vises, start den om og om igjen) til den gjør det, og overlatt deretter kontrollen til deg.
- Kjør fsck, og svar på spørsmålene, svar "ja" eller "nei" eller gi kontroll tilbake til deg, basert på forhåndsbestemte kriterier.
- Koble til et annet nettverk og hent automatisk e-posten din slik at den vises som om den ble opprinnelig sendt til ditt lokale system.
- Bære miljøvariabler, gjeldende katalog eller annen form for informasjon på tvers av rlogin, telnet, tips, su eller chgrp
Det er flere grunner til at skallet ikke kan utføre disse oppgavene. Alt er mulig med forventning.
Generelt er Expect nyttig for å kjøre et hvilket som helst program som krever samspill mellom programmet og brukeren. Alt som er nødvendig er at samspillet kan karakteriseres programmatisk. Forvent kan også gi tilbake kontroll til brukeren uten å stoppe programmet som styres. På samme måte kan brukeren til enhver tid returnere kontroll til skriptet.
bruk
Forvent leser cmdfile for en liste over kommandoer som skal utføres. Forvent at det kan bli pådratt implisitt på systemer som støtter #! notasjon ved å markere skriptet som kjørbar og lage første linje i skriptet:
#! / usr / local / bin / expect -f
Selvfølgelig må banen nøyaktig beskrive hvor forvent liv. / usr / local / bin er bare et eksempel.
-C-flagget prefaces en kommando som skal utføres før noen i skriptet. Kommandoen bør siteres for å forhindre at det blir ødelagt av skallet. Dette alternativet kan brukes flere ganger. Flere kommandoer kan utføres med en enkelt -c ved å separere dem med semikolon. Kommandoer utføres i den rekkefølgen de vises. Når du bruker Expectk, er dette alternativet angitt som -kommando.
-D-flagget aktiverer noen diagnostiske utdata, som primært rapporterer intern aktivitet av kommandoer som for eksempel forventer og interagerer. Dette flagget har samme effekt som "exp_internal 1" i begynnelsen av et Expect-skript, pluss versjonen av Expect er skrevet ut.
-D-flagget muliggjør en interaktiv debugger. Et heltall skal følge. Feilsøkeren vil ta kontroll før neste Tcl-prosedyre hvis verdien er null, eller hvis en ^ C trykkes eller et brytepunkt blir rammet, eller en annen passende debugger-kommando vises i skriptet. Når du bruker Expectk, er dette alternativet angitt som -Debug.
F -f-flagget prefaces en fil for å lese kommandoer. Selve flagget er valgfritt, da det bare er nyttig når du bruker #! notasjon, slik at andre argumenter kan leveres på kommandolinjen. Når du bruker Expectk, er dette alternativet angitt som -fil.
Som standard leses kommandofilen i minnet og utføres i sin helhet. Det er av og til ønskelig å lese filer én linje av gangen. For å tvinge vilkårlig filer til å håndteres på denne måten, bruk -b-flagget. Når du bruker Expectk, er dette alternativet angitt som buffer.
Hvis strengen "-" leveres som et filnavn, leses standardinngangen i stedet. Bruk "./-" for å lese fra en fil som faktisk heter "-".
Den -i flagget forårsaker Forvente å interaktivt be om kommandoer i stedet for å lese dem fra en fil. Prompting avsluttes via exit kommandoen eller på EOF. Den -i flagget antas dersom ingen av kommandofilen eller -c er brukt. Når du bruker Expectk, er dette alternativet angitt som -interaktivt.
- kan brukes til å avgrense slutten av alternativene. Dette er nyttig hvis du vil overføre et alternativ-lignende argument til skriptet ditt uten at det tolkes av Expect. Dette kan med fordel plasseres i #! linje for å forhindre flagglig tolkning ved å forvente. For eksempel vil følgende legge igjen de opprinnelige argumentene, inkludert skriptnavnet i variabelen argv .
#! / usr / local / bin / expect -
Merk at de vanlige getopt (3) og execve (2) konvensjonene må observeres når du legger til argumenter i #! linje.
Filen $ exp_library / expect.rc hentes automatisk hvis den er til stede, med mindre flagget -N er brukt. (Når du bruker Expectk, er dette alternativet angitt som -NORC.) Umiddelbart etter dette hentes filen ~ / .expect.rc automatisk, med mindre flagget er brukt. Hvis miljøvariabelen DOTDIR er definert, blir den behandlet som en katalog og .expect.rc leses derfra. Når du bruker Expectk, er dette alternativet angitt som -norc.Denne innkjøp oppstår bare etter å ha utført noen -c flagg.
-V årsaker Forvent å skrive ut versionsnummeret og avslutte. Det tilsvarende flagget i Expectk, som bruker lange flaggnavn, er -versjon.
Valgfrie args er konstruert i en liste og lagret i variablen heter argv og. argc initialiseres til lengden av argv.
Argv0 er definert som navnet på skriptet eller binært hvis ingen skript er brukt. For eksempel skriver ut følgende navnet på skriptet og de tre første argumentene:
send_user "$ argv0 lrange $ argv 0 2 n"
kommandoer
Forvent bruker brukerverktøy kommandospråk. Tcl gir kontrollflyt (hvis, for, pause), ekspresjonsevaluering og flere andre funksjoner som rekursjon og prosedyrehensjon. Kommandoer brukt her, men ikke definert (sett, hvis, exec) er Tcl-kommandoer. Forvent støtter flere kommandoer. Med mindre annet er oppgitt, returnerer kommandoer den tomme strengen.
Kommandoene er oppført alfabetisk slik at de raskt kan plasseres. Nye brukere kan imidlertid finne det lettere å starte ved å lese beskrivelsen av gyte, sende, forvente, og samhandle i den rekkefølgen.
lukk -slave -onexec 0 | 1 -i spawn_id
lukker tilkoblingen til gjeldende prosess. De fleste interaktive programmer vil oppdage EOF på deres stdin og avslutte; og dermed Lukk vanligvis nok til å drepe prosessen også. -I-flagget erklærer prosessen for å lukke tilsvarende til navnet spawn_id.
Begge forventer og samhandler vil oppdage når den nåværende prosessen utgår og implisitt gjør et nært, men hvis du dreper prosessen ved å si "exec kill $ pid", må du eksplisitt ringe nær.
-Onexec-flagget bestemmer om gyte-IDet er stengt i nye nye prosesser, eller hvis prosessen er overlappet. For å la et idriftsatt id åpne, bruk verdien 0. En ikke-null heltallverdi tvinger hagen lukket i nye prosesser.
Slave-flagget lukker slaven assosiert med spa-id. Når tilkoblingen er stengt, blir slaven automatisk lukket også hvis den fortsatt er åpen.
Uansett om tilkoblingen er avsluttet implisitt eller eksplisitt, bør du ringe vente for å fjerne den tilsvarende kjerneprosesssporet. Den nære kommandoen kaller ikke vent siden det ikke er garanti for at lukking av en prosessforbindelse vil føre til at den avslutter.
feilsøk -now 0 | 1
styrer en Tcl debugger slik at du kan gå gjennom setninger og sette breakpoints.
Ingen argumenter returneres en 1 hvis debuggeren ikke kjører, ellers returneres 0.
Med et 1 argument, er debugger startet. Med et 0-argument stoppes feilsøkeren. Hvis et 1-argument går foran -now-flagget, startes debugger umiddelbart. Ellers startes debuggeren med den neste Tcl-setningen.
Feilsøkingskommandoen endrer ikke noen feller. Sammenlign dette til å starte Expect med -D flagget.
Frakoblingskommandoen koble fra en gaffelprosess fra terminalen. Det fortsetter å løpe i bakgrunnen. Prosessen er gitt sin egen prosessgruppe. Standard I / O blir omdirigert til / dev / null.
Følgende fragmentbruk bruker koble fra for å fortsette å kjøre skriptet i bakgrunnen.
hvis {fork! = 0} avslutt koble fra. . .
Følgende skript leser et passord og kjører deretter et program hver time som krever et passord hver gang det kjøres. Skriptet leverer passordet, slik at du bare må skrive det en gang.
send_user "passord? " expect_user -re "(. *) n" for {} 1 {} {hvis {fork! = 0} {sleep 3600; fortsette} koble fra spawn priv_prog forvente Passord: send "$ expect_out 1, streng) r ". . . exit }
En fordel ved å bruke koble fra shell-asynkronprosessfunksjonen (&) er at Expect kan lagre terminalparametrene før frakobling og deretter bruke dem på nye ptys senere. Med &, Expect har ikke mulighet til å lese terminalens parametre siden terminalen allerede er koblet fra tiden forventer mottar kontroll.
avslutte -opts status
forårsaker forventning om å avslutte eller på annen måte forberede seg til å gjøre det.
De -onexit flagg fører til at neste argument brukes som en exithåndterer. Uten et argument returneres gjeldende utgangshåndterer.
De -ingen utgang flaggårsaker forvent å forberede seg på å avslutte, men stopper kort for faktisk å returnere kontrollen til operativsystemet. Den brukerdefinerte utgangshåndteringen kjøres i tillegg til Expects egne interne håndterere. Ingen videre Forvent kommandoer bør utføres. Dette er nyttig hvis du kjører Forvent med andre Tcl-utvidelser. Nåværende tolk (og hovedvindu hvis i Tk-miljøet) forblir slik at andre Tcl-utvidelser kan rydde opp. Hvis Expect er exit kalles igjen (men dette kan oppstå), blir håndtererene ikke gjenopprettede.
Ved avslutning, er alle tilkoblinger til prospekterte prosesser lukket. Lukking vil bli oppdaget som en EOF av sperrede prosesser. exit tar ingen andre tiltak utover hva den normale _exit (2) prosedyren gjør. Dermed kan prosesser som ikke ser etter EOF, fortsette å løpe. (En rekke forhold er viktige for å bestemme, for eksempel, hvilke signaler en oppdådd prosess vil bli sendt, men disse er systemavhengige, vanligvis dokumentert under utgang (3).) Sponte prosesser som fortsetter å løpe vil bli arvet av init.
status (eller 0 hvis ikke spesifisert) returneres som utgangsstatus for forvent . exit utføres implicit hvis slutten av skriptet er nådd.
exp_continue -continue_timer
Kommandoen exp_continue tillater forvente seg selv for å fortsette å utføre i stedet for å returnere som det normalt ville. Som standard exp_continue tilbakestiller tidsavbruddstimeren. De -continue_timer flagg forhindrer timeren fra å startes på nytt. (Se forvente for mer informasjon.)
exp_internal -f fil verdi
forårsaker ytterligere kommandoer å sende diagnostisk informasjon intern til forvent å stderr hvis verdi er ikke-null. Denne utgangen er deaktivert hvis verdi er 0. Diagnostiseringsinformasjonen inkluderer alle tegnene som er mottatt, og hvert forsøk som er gjort for å matche gjeldende utgang mot mønstrene.
Hvis valgfritt fil leveres, alle normale og feilsøkingsutganger skrives til den filen (uavhengig av verdien av verdi ). En hvilken som helst tidligere diagnostisk utdatafil er stengt.
De -Info flagg fører til at det ikke lenger er en tilbakemelding om de siste ikke-informasjonsargumentene som er gitt.
exp_open args -i spawn_id
returnerer en Tcl-filidentifikator som tilsvarer det opprinnelige ID-nummeret. Filidentifikatoren kan da brukes som om den ble åpnet av Tcls åpen kommando. (Hele iden skal ikke lenger brukes vente bør ikke utføres.
De -leaveopen flagg forlater spa-id åpen for tilgang gjennom Forvent kommandoer. EN vente må utføres på hekke id.
exp_pid -i spawn_id
returnerer prosess-ID som tilsvarer den for tiden oppstartede prosessen. Hvis -Jeg flagg er brukt, pid returnert tilsvarer det for gitt gitte id.
exp_send
er et alias for sende .
exp_send_error
er et alias for send_error .
exp_send_log
er et alias for send_log .
exp_send_tty
er et alias for send_tty .
exp_send_user
er et alias for send_user .
exp_version -exit versjon
er nyttig for å sikre at skriptet er kompatibelt med gjeldende versjon av Expect.
Uten argumenter, den nåværende versjonen av forvent returneres. Denne versjonen kan da bli kodet i skriptet ditt. Hvis du faktisk vet at du ikke bruker funksjoner i nyere versjoner, kan du angi en tidligere versjon.
Versjoner består av tre tall skilt av prikker. Først er hovednummeret. Skript skrevet for versjoner av forvent med et annet stort antall vil nesten helt sikkert ikke fungere. exp_version returnerer en feil hvis de store tallene ikke stemmer overens.
For det andre er det mindre tallet. Skript skrevet for en versjon med et større mindre nummer enn den gjeldende versjonen, kan avhenge av noen ny funksjon og kan ikke kjøre. exp_version returnerer en feil hvis de store tallene samsvarer, men skriptets mindre nummer er større enn det som kjører forvent .
Tredje er et tall som ikke spiller noen rolle i versjonen sammenligningen. Imidlertid økes det når forvent Programvaredistribusjonen endres på noen måte, for eksempel ved ytterligere dokumentasjon eller optimalisering. Den tilbakestilles til 0 på hver ny mindre versjon.
Med -exit flagg, forvent skriver ut en feil og utgår hvis versjonen er utdatert.
forventer -ops pat1 body1 … -ops patn bodyn
venter til et av mønstrene samsvarer med utgangen av en oppstått prosess, en angitt tidsperiode har gått, eller en slutt-fil er sett. Hvis den endelige kroppen er tom, kan den utelates.
Mønstre fra de siste expect_before Kommando er implisitt brukt før andre mønstre. Mønstre fra de siste expect_after kommandoen er implicit brukt etter noen andre mønstre.
Hvis argumentene til hele forvente setningen krever mer enn én linje, kan alle argumentene bli "braced" i en slik at det ikke blir slutt på hver linje med en tilbakeslag. I dette ene tilfellet vil de vanlige Tcl-substitusjonene forekomme til tross for braces.
Hvis et mønster er søkeordet eof , blir den tilsvarende kroppen utført på slutten av filen. Hvis et mønster er søkeordet pause , tilsvarende kropp utføres ved timeout. Hvis det ikke er brukt en timeout-søkeord, utføres en implisitt null handling ved timeout. Standard timeout-perioden er 10 sekunder, men kan settes, for eksempel til 30, med kommandoen "set timeout 30". En uendelig timeout kan betegnes med verdien -1. Hvis et mønster er søkeordet misligholde , blir den tilsvarende kroppen utført på enten timeout eller end-of-file.
Hvis et mønster samsvarer, blir tilsvarende kropp utført. forvente returnerer resultatet av kroppen (eller den tomme strengen hvis ingen mønster matchet). I tilfelle flere mønstre samsvarer, brukes den første som brukes til å velge en kropp.
Hver gang ny utgang kommer, blir den sammenlignet med hvert mønster i den rekkefølgen de er oppført. Dermed kan du teste for fravær av en kamp ved å gjøre det siste mønsteret noe garantert å vises, for eksempel en ledetekst. I situasjoner der det ikke er noe ledig, må du bruke pause (akkurat som du ville hvis du var i samhandling manuelt).
Mønster er spesifisert på tre måter. Som standard er mønstre spesifisert som med Tcls strengkamp kommando. (Slike mønstre ligner også C-shell regelmessige uttrykk som vanligvis refereres til som "glob" mønstre). De -gl flagg kan kanskje brukes til å beskytte mønstre som ellers kan matche forvente flagg fra å gjøre det. Ethvert mønster som begynner med en "-" bør beskyttes på denne måten. (Alle strenger som starter med "-" er reservert for fremtidige alternativer.)
For eksempel ser følgende fragment etter en vellykket pålogging. (Noter det avbryte antas å være en prosedyre definert andre steder i skriptet.)
Forvent {opptatt {setter opp n; exp_continue} mislyktes avbryte "ugyldig passord" abort timeout abort connected}
Sitater er nødvendige på fjerde mønster siden den inneholder et mellomrom, som ellers ville skille mønsteret fra handlingen.Mønstre med samme handling (for eksempel 3. og 4.) krever oppføring av handlingene på nytt. Dette kan unngås ved å bruke regexp-stil mønstre (se nedenfor). Mer informasjon om å lage glob-stil mønstre finnes i Tcl manualen.
Regexp-stil mønstre følger syntaxen definert av Tcls regexp (kort for "vanlig uttrykk") kommando. regexp mønstre er introdusert med flagget -re . Det forrige eksempelet kan skrives om med en regexp som:
Forvent {opptatt {setter opp n; exp_continue} -re "mislyktes | ugyldig passord" avbryte timeout abort connected}
Begge typer mønstre er "unanchored". Dette betyr at mønstre ikke trenger å matche hele strengen, men kan begynne og avslutte kampen hvor som helst i strengen (så lenge alt annet stemmer overens). Bruk ^ for å matche begynnelsen på en streng, og $ for å matche slutten. Vær oppmerksom på at hvis du ikke venter på slutten av en streng, kan svarene dine enkelt ende opp i midten av strengen, ettersom de ekko seg fra den fremstilte prosessen. Mens du fremdeles produserer riktige resultater, kan utgangen se unaturlig ut. Således blir bruk av $ oppmuntret hvis du nøyaktig kan beskrive tegnene på slutten av en streng.
Vær oppmerksom på at i mange redaktører samsvarer ^ og $ henholdsvis begynnelsen og slutten av linjene. Imidlertid, fordi forventning ikke er linjeorientert, matcher disse tegnene begynnelsen og slutten av dataene (i motsetning til linjer) for tiden i den forventede samsvarende buffer. (Se også notatet under "System fordøyelsesbesvær.")
De -EX flagg fører til at mønsteret blir matchet som en "nøyaktig" streng. Ingen tolkning av *, ^, etc er laget (selv om de vanlige Tcl-konvensjonene fremdeles må observeres). Eksakte mønstre er alltid unanchored.
De -nocase flagg forårsaker store bokstaver i utgangen for å sammenligne som om de var små bokstaver. Mønsteret påvirkes ikke.
Mens du leser utgang, kan mer enn 2000 byte tvinge tidligere byte til å bli "glemt". Dette kan endres med funksjonen match_max . (Merk at overdreven store verdier kan redusere mønsterkompatoren.) Hvis patlist er full_buffer , tilsvarende organ utføres hvis match_max bytes er mottatt og ingen andre mønstre har passet. Hvorvidt eller ikke full_buffer Søkeord brukes, de glemte tegnene er skrevet til expect_out (buffer).
Hvis patlist er nøkkelordet null , og nulls er tillatt (via remove_nulls kommando), blir den tilsvarende kroppen utført hvis en enkelt ASCII 0 er matchet. Det er ikke mulig å matche 0 bytes via glob eller regexp mønstre.
Ved å matche et mønster (eller eof eller full_buffer), lagres en tilsvarende og tidligere uovertruffen utgang i variabelen expect_out (buffer) . Opptil 9 regexp-substrengskamper lagres i variablene expect_out (1, string) gjennom expect_out (9, string) . Hvis -indices flagg brukes før et mønster, start- og sluttindeksene (i et form som passer for lrange ) av de 10 strenger lagres i variablene expect_out (X, start) og expect_out (X, slutt) hvor X er et siffer, tilsvarer substringsposisjonen i bufferen. 0 refererer til strenger som matchet hele mønsteret og genereres for glob mønstre samt regexp mønstre. For eksempel, hvis en prosess har produsert produksjonen av "abcdefgh n", er resultatet av:
forvente "cd"
er som om følgende påstander hadde utført:
sett expect_out (0, streng) cd sett expect_out (buffer) abcd
og "efgh n" er igjen i utgangsbufferen. Hvis en prosess produserte produksjonen "abbbcabkkkka n", er resultatet av:
Forvent -indikatorer -re "b (b *). * (k +)"
er som om følgende påstander hadde utført:
sett expect_out (0, start) 1 sett expect_out (0, slutt) 10 sett expect_out (0, streng) bbbcabkkkk sett expect_out (1, start) 2 sett expect_out (1 ende) 3 sett expect_out (1, streng) bb sett expect_out (2, start) 10 sett expect_out (2, end) 10 sett expect_out (2, streng) k sett expect_out (buffer) abbbcabkkkk
og "a n" er igjen i utgangsbufferen. Mønsteret "*" (og -re ". *") Vil spyle utbufferen uten å lese mer utdata fra prosessen.
Normalt blir den matchte utgangen kassert fra Expects interne buffere. Dette kan forhindres ved å prefiksere et mønster med -notransfer flagg. Dette flagget er spesielt nyttig for eksperimentering (og kan forkortes til "-not" for å gjøre det lettere når du eksperimenterer).
Gropsidentifikasjonen assosiert med matchende utgang (eller eof eller full_buffer) lagres i expect_out (spawn_id) .
De -pause flagg fører til at den nåværende forvente kommandoen bruker følgende verdi som en timeout i stedet for å bruke verdien av timeout-variabelen.
Som standard matches mønstre mot utgang fra den nåværende prosessen, men -Jeg flagg deklarerer utgangen fra den nevnte spawn_id-listen, matches mot noen av følgende mønstre (opp til neste -Jeg ). Spawn_id-listen skal enten være en mellomromsliset liste over spawn_ids eller en variabel som refererer til en slik liste over spawnys.
For eksempel venter følgende eksempel på "koblet" fra den nåværende prosessen, eller "opptatt", "mislyktes" eller "ugyldig passord" fra spawn_id oppkalt av $ proc2.
forvent {-i $ proc2 opptatt {setter opptatt n; exp_continue} -re "mislyktes | ugyldig passord" avbryte timeout abort connected}
Verdien av den globale variabelen any_spawn_id kan brukes til å matche mønstre til alle spawn_ids som er navngitt med alle andre -Jeg flagg i dagens forvente kommando. Den spawn_id fra a -Jeg flagg uten tilknyttet mønster (dvs. følges umiddelbart av en annen -Jeg ) blir gjort tilgjengelig for andre mønstre i det samme forvente kommando assosiert med any_spawn_id.
De -Jeg flagg kan også nevne en global variabel, i hvilket tilfelle variabelen er lest for en liste over gyte-ids. Variabelen leser når den endres. Dette gir en måte å endre I / O-kilden mens kommandoen er i fullføring. Kryss ids forutsatt at denne måten kalles "indirekte" gress ids.
Handlinger som gå i stykker og Fortsette forårsake kontrollstrukturer (dvs. til , proc ) å oppføre seg på vanlig måte. Kommandoen exp_continue tillater forvente seg selv for å fortsette å utføre i stedet for å returnere som det normalt ville.
Dette er nyttig for å unngå eksplisitte sløyfer eller gjentatte forventninger. Følgende eksempel er en del av et fragment for å automatisere rlogin. De exp_continue unngår å skrive et sekund forvente setning (for å lete etter spørringen igjen) hvis rlogin ber om passord.
forventer {Passord: {stty -echo send_user "passord (for $ bruker) på $ host:" expect_user -re "(. *) n" send_user " n" send "$ expect_out (1 streng) echo exp_continue} feil {send_user "tilkobling til verten mislyktes: $ expect_out (buffer)" exit "- avslutning} timeout {send_user" til $ host timed out n " re $ prompt}
For eksempel kan følgende fragment hjelpe en brukerhåndbok til en interaksjon som allerede er fullstendig automatisert. I dette tilfellet blir terminalen satt i råmodus. Hvis brukeren trykker "+", økes en variabel. Hvis du trykker på "p", sendes flere avkastninger til prosessen, kanskje for å peke den på en eller annen måte, og "jeg" lar brukeren samhandle med prosessen og effektivt stjele bort kontroll fra skriptet. I hvert tilfelle er exp_continue tillater gjeldende forvente for å fortsette mønster matching etter å ha utført den gjeldende handlingen.
stty raw -echo expect_after {-i $ user_spawn_id "p" {send " r r r"; exp_continue} "+" {incr foo; exp_continue} "i" {interact; exp_continue} "avslutte" exit}
Som standard, exp_continue tilbakestiller tidsavbruddstimeren. Timeren starter ikke om, hvis exp_continue kalles med -continue_timer flagg.
expect_after expect_args
fungerer identisk med expect_before bortsett fra at hvis mønstre fra begge forvente og expect_after kan matche, forvente mønster er brukt. Se expect_before kommando for mer informasjon.
expect_background expect_args
tar de samme argumentene somforvente , men det returnerer umiddelbart. Mønster blir testet når ny inngang kommer. Mønsteretpause ogmisligholde er meningsløse tilexpect_background og blir tydelig kassert. Ellers er detexpect_background kommandoen brukerexpect_before ogexpect_after mønstre akkurat somforvente gjør.
Nårexpect_background handlinger blir vurdert, bakgrunnsbearbeiding for samme gud id er blokkert. Bakgrunnsbehandlingen er ulåst når handlingen fullføres. Mens bakgrunnsbehandlingen er blokkert, er det mulig å gjøre en (forgrunns)forvente på samme gyte-id.
Det er ikke mulig å utføre enforvente mens enexpect_background er ulåst.expect_background for et bestemt gyte-ID slettes ved å erklære en ny expect_background med samme gyte-ID. erklærteexpect_background uten mønster fjerner gitte id-ID fra muligheten til å matche mønstre i bakgrunnen.
forutse forutse
tar de samme argumentene somforvente , men det returnerer umiddelbart. Mønster-action par fra de sisteexpect_before med samme gyte-id er implisitt lagt til noen av følgendeforvente kommandoer. Hvis et mønster samsvarer, blir det behandlet som om det hadde blitt spesifisert iforvente beordre seg selv, og den tilknyttede kroppen utføres i sammenheng medforvente kommando. Hvis mønster fra begge delerexpect_before ogforvente kan matche,expect_before mønster er brukt.
Hvis det ikke er angitt et mønster, merkes ikke id-iden for noen mønstre.
Med mindre overstyrt av a-Jeg flagg,expect_before mønstre samsvare med spion id definert på det tidspunktet atexpect_before kommandoen ble utført (ikke når mønsteret er matchet).
Info-flagget forårsakerexpect_before å returnere gjeldende spesifikasjoner for hvilke mønstre den vil matche. Som standard rapporteres det om gjeldende id-ID. En valgfri id-id-spesifikasjon kan gis for informasjon om det aktuelle id-navnet. For eksempel
expect_before -info -i $ proc
Maksimalt kan det gis en gyte-ID-spesifikasjon. Flagget -indirekte undertrykker direkte gyteannonser som bare kommer fra indirekte spesifikasjoner.
I stedet for en gyte-ID-spesifikasjon, vil flagget "-all" føre til at "-info" rapporterer om alle gyte-IDer.
Utgangen av info-flagget kan gjenbrukes som argumentet for å forvente_forut.
expect_tty expect_args
er somforvente men det leser tegn fra / dev / tty (dvs. tastetrykk fra brukeren). Som standard utføres lesing i kokt modus. Dermed må linjene ende med retur i rekkefølgeforvente å se dem. Dette kan endres viastty (sestty kommando nedenfor).
expect_user expect_args
er somforvente men det leser tegn fra stdin (dvs. tastetrykk fra brukeren). Som standard utføres lesing i kokt modus. Dermed må linjene ende med retur i rekkefølgeforvente å se dem.Dette kan endres viastty (sestty kommando nedenfor).
gaffel
skaper en ny prosess. Den nye prosessen er en eksakt kopi av gjeldendeforvent prosess. På suksess,gaffel returnerer 0 til den nye prosessen (barn) og returnerer prosess-IDen til barnprosessen til foreldreprosessen. Ved feil (uavhengig av mangel på ressurser, for eksempel bytteplass, minne),gaffel returnerer -1 til foreldreprosessen, og ingen barnprosess er opprettet.
Forked prosesser utgang viaexit kommando, akkurat som den opprinnelige prosessen. Forked-prosesser får lov til å skrive til loggfilene. Hvis du ikke deaktiverer feilsøking eller logging i de fleste prosessene, kan resultatet bli forvirrende.
Noen pty implementeringer kan bli forvirret av flere lesere og forfattere, selv kort tid. Dermed er det sikreste ågaffel før gyteprosesser.
interagere string1 body1 … stringn bodyn
gir kontroll over den nåværende prosessen til brukeren, slik at tastetrykk blir sendt til den nåværende prosessen, og stdout og stderr av gjeldende prosess returneres.
String-kroppspar kan angis som argumenter, i hvilket tilfelle kroppen utføres når den tilsvarende strengen er angitt. (Som standard sendes ikke strengen til den nåværende prosessen.)tolk kommandoen antas hvis den endelige kroppen mangler.
Hvis argumentene til helesamhandle setningen krever mer enn én linje, kan alle argumentene bli "braced" i en slik at det ikke blir slutt på hver linje med en tilbakeslag. I dette ene tilfellet vil de vanlige Tcl-substitusjonene forekomme til tross for braces.
For eksempel virker følgende kommandolinjer med følgende strenglegemepar som er definert: Når ^ Z trykkes,forvent er suspendert. (De-tilbakestille flagget gjenoppretter terminalmodusene.) Når ^ A trykkes, ser brukeren "du har skrevet en kontroll-A" og prosessen sendes a ^ A. Når $ trykkes, ser brukeren datoen. Når ^ C trykkes,forvent utganger. Hvis "foo" er oppgitt, ser brukeren "bar". Når ~ ~ er presset, vilforvent tolk går interaktivt.
sett CTRLZ 032 samhandle {-reset $ CTRLZ {exec kill -STOP pid} 001 {send_user "du skrev en kontroll-A n"; send " 001"} $ {send_user "Datoen er klokkeformat klokke sekunder."} 003 exit foo {send_user "bar"} ~~}
I streng-kroppspar er strenger tilpasset i rekkefølgen de er oppført som argumenter. Strenger som delvis samsvarer, sendes ikke til den nåværende prosessen i påvente av at resten kommer. Hvis tegn skrives inn slik at det ikke lenger kan være en kamp, blir bare delen av strengen sendt til prosessen som ikke muligens kan starte en annen kamp. Dermed kan strenger som er understrenger av partielle kamper, matche senere, hvis de opprinnelige strengene som forsøkte å være kamp, til slutt svikter.
Som standard er streng matching nøyaktig uten villige kort. (I motsetning til detforvente kommando bruker glob-stil mønstre som standard.) The-EX flagg kan brukes til å beskytte mønstre som ellers kan matchesamhandle flagg fra å gjøre det. Ethvert mønster som begynner med en "-" bør beskyttes på denne måten. (Alle strenger som starter med "-" er reservert for fremtidige alternativer.)
De-re flagg styrker strengen som skal tolkes som et regexp-stil mønster. I dette tilfellet lagres tilsvarende understrenger i variabelen interact_out på samme måte som veienforvente lagrer sin utgang i variabelenexpect_out . De-indices flagget støttes tilsvarende.
Mønstereteof introduserer en handling som utføres på slutten av filen. En separateof mønster kan også følge-produksjon flagg i hvilket tilfelle det matches hvis en eof blir oppdaget mens du skriver utgang. Standareneof Handlingen er "retur", slik atsamhandle bare returnerer på noen EOF.
Mønsteretpause introduserer en timeout (i sekunder) og handling som utføres etter at ingen tegn har blitt lest for en gitt tid. Depause mønster gjelder for den sist angitte prosessen. Det er ingen standard timeout. Den spesielle variabelen "timeout" (brukt avforvente kommando) har ingen innvirkning på denne timeout.
For eksempel kan følgende setning brukes til autologout brukere som ikke har skrevet noe for en time, men som fortsatt får hyppige systemmeldinger:
samhandle-inntast $ user_spawn_id timeout 3600 return -output $ spawn_id
Hvis mønsteret er søkeordetnull , og nulls er tillatt (viaremove_nulls kommando), blir den tilsvarende kroppen utført hvis en enkelt ASCII 0 er matchet. Det er ikke mulig å matche 0 bytes via glob eller regexp mønstre.
Prefacing et mønster med flagget-jeg skriver forårsaker variabelen interact_out (spawn_id) å bli satt til spawn_id som matchet mønsteret (eller eof).
Handlinger somgå i stykker ogFortsette forårsake kontrollstrukturer (dvs.til , proc ) å oppføre seg på vanlig måte. derimotkomme tilbake årsaker til at samtalen går tilbake til den som ringer, mensinter_return fører tilsamhandle å forårsake avkastning i den som ringer. For eksempel, hvis "proc foo" hetersamhandle som deretter utførte handlingeninter_return , proc foo ville returnere. (Dette betyr at hvissamhandle samtalertolk interaktivt skrivingkomme tilbake vil føre til at samhandlingen fortsetter, mensinter_return vil få samhandelen til å returnere til den som ringer.)
Undersamhandle , råmodus brukes slik at alle tegn kan sendes til den nåværende prosessen.Hvis den nåværende prosessen ikke fanger jobbstyresignaler, stopper den hvis det sendes et stoppesignal (som standard ^ Z). For å starte det på nytt, send et fortsettesignal (for eksempel ved "kill-CONT"). Hvis du virkelig vil sende en SIGSTOP til en slik prosess (ved ^ Z), bør du vurdere å spy csh først og deretter kjøre programmet. På den annen side, hvis du vil sende en SIGSTOP tilforvent seg selv, tolk for første samtale (kanskje ved å bruke et fluktegn), og trykk deretter på ^ Z.
String-body-par kan brukes som en stenografi for å unngå å måtte gå inn i tolken og utføre kommandoer interaktivt. Den forrige terminalmodus brukes mens kroppen av et streng-kroppspar blir utført.
For hastighet utfører handlinger som standard i rå modus. De-tilbakestille flagget tilbakestiller terminalen til modusen den hadde førsamhandle ble utført (alltid kokt modus). Merk at tegn som er oppgitt når modusen slås, kan gå tapt (et uheldig trekk ved terminaldriveren på enkelte systemer). Den eneste grunnen til å bruke-tilbakestille er hvis handlingen din avhenger av å kjøre i kokt modus.
De-ekko flagg sender tegn som samsvarer med følgende mønster tilbake til prosessen som genererte dem som hvert tegn er lest. Dette kan være nyttig når brukeren trenger å se tilbakemelding fra delvis skrevet mønstre.
Hvis et mønster blir ekkoet, men til slutt ikke samsvarer, blir tegnene sendt til den fremstilte prosessen. Hvis den hevede prosessen ekko dem, vil brukeren se tegnene to ganger.-ekko er sannsynligvis bare hensiktsmessig i situasjoner der brukeren ikke sannsynligvis ikke fullfører mønsteret. Eksempelvis er følgende utdrag fra rftp, recursive-ftp skriptet, der brukeren blir bedt om å skrive inn ~ g, ~ p eller ~ l, for å få, sette eller liste gjeldende katalog rekursivt. Disse er så langt borte fra de normale ftp-kommandoene, at brukeren er usannsynlig å skrive ~ etterfulgt av noe annet, unntatt feilaktig, i så fall vil de sannsynligvis bare ignorere resultatet uansett.
samhandle {-echo ~ g {getcurdirectory 1} -echo ~ l {getcurdirectory 0} -echo ~ p {putcurdirectory}}
De-nobuffer flagg sender tegn som stemmer overens med følgende mønster på utgangsprosessen ettersom tegnene leses.
Dette er nyttig når du ønsker å la et program ekko tilbake mønsteret. For eksempel kan følgende brukes til å overvåke hvor en person ringer (et Hayes-stilmodem). Hver gang "atd" er sett, logger loggen resten av linjen.
proc-lognumber {} {interaktiv -nobuffer -re "(. *) r" returnerer $ logg "klokkeformat klokke sekunder: oppringt $ interact_out (1 streng)"} interaktiv -nobuffer "atd" lognummer
Undersamhandle , tidligere bruk avlog_user blir ignorert. Spesielt,samhandle vil tvinge utgangen til å bli logget (sendt til standardutgangen) siden det antas at brukeren ikke ønsker å samhandle blindt.
De-o flagg forårsaker at noen følgende nøkkellegempar skal påføres utgangen av den nåværende prosessen. Dette kan være nyttig, for eksempel når du arbeider med verter som sender uønskede tegn under en telnet økt.
Som standard,samhandle forventer at brukeren skal skrive stdin og lese stdout avforvent behandle seg selv. De-u flagg (for "bruker") gjørsamhandle se etter brukeren som prosessen kalt av argumentet (som må være et oppstått id).
Dette tillater to ikke-relaterte prosesser å bli slått sammen uten å bruke en eksplisitt sløyfe. For å hjelpe til med feilsøking, forvent diagnostikk alltid å gå til stderr (eller stdout for bestemt logging og feilsøking). Av samme grunn,tolk kommandoen vil lese interaktivt fra stdin.
For eksempel oppretter følgende fragment en påloggingsprosess. Deretter ringer den til brukeren (ikke vist), og til slutt forbinder de to sammen. Selvfølgelig kan enhver prosess erstattes med innlogging. Et skall, for eksempel, vil tillate brukeren å jobbe uten å levere en konto og et passord.
gjeng logg inn sett inn $ spawn_id spawn tip modem # ring tilbake til bruker # koble brukeren til å logge inn samhandle -u $ login
Hvis du vil sende utdata til flere prosesser, må du oppgi hver id-id-liste som er prefaced av a-produksjon flagg. Inngang for en gruppe utgangsprodukter kan bestemmes av en prospektliste som er prefaced av a-inngang flagg. (Både-inngang og-produksjon kan ta lister i samme form som-Jeg flagg iforvente kommando, bortsett fra at any_spawn_id ikke er meningsfylt isamhandle .) Alle følgende flagg og strenger (eller mønstre) gjelder for dette innspillet til et annet-inntastingsflagg vises. Hvis nei-inngang vises,-produksjon innebærer "-inngang $ user_spawn_id -output". (På samme måte, med mønstre som ikke har-inngang .) Hvis en-inngang er spesifisert, det overstyrer $ user_spawn_id. Hvis et sekund-inngang er spesifisert, det overstyrer $ spawn_id. Ytterligere-inngang flagg kan angis.
De to implisitte inngangene prosesserer standard for å ha sine utdata angitt som $ spawn_id og $ user_spawn_id (i omvendt). Hvis en-inngang flagg vises med nr-produksjon flagg, tegn fra denne prosessen blir kassert.
De-Jeg flagg introduserer en erstatning for gjeldende spawnid når ingen andre-inngang eller-produksjon flagg er brukt. A -i flagg innebærer et -o flagg.
Det er mulig å forandre prosessene som blir interaksjon med ved hjelp av indirekte gyder. (Indirekte gyte-ids er beskrevet i seksjonen på forvent-kommandoen.) Indirekte gyte-ids kan angis med -i, -u, -input eller -output-flaggene.
tolk args
forårsaker at brukeren blir interaktiv oppfordret tilforvent og Tcl kommandoer. Resultatet av hver kommando blir skrevet ut.
Handlinger somgå i stykker ogFortsette forårsake kontrollstrukturer (dvs.til , proc ) å oppføre seg på vanlig måte. derimotkomme tilbake får tolk til å returnere til den som ringer, mensinter_return fører tiltolk å forårsake avkastning i den som ringer. For eksempel, hvis "proc foo" hetertolk som deretter utførte handlingeninter_return , proc foo ville returnere. Enhver annen kommando forårsakertolk for å fortsette å be om nye kommandoer.
Som standard inneholder spørringen to heltall. Det første heltall beskriver dybden av evalueringsbunken (dvs. hvor mange ganger Tcl_Eval er blitt kalt). Det andre heltallet er Tcl-historikkidentifikatoren. Prompten kan angis ved å definere en prosedyre som kalles "prompt1" hvis returverdi blir den neste spørringen. Hvis en uttalelse har åpne anførselstegn, parener, braces eller parentes, blir en sekundær prompt (som standard "+>") utstedt på newline. Den sekundære spørringen kan settes ved å definere en prosedyre som kalles "prompt2".
Undertolk , kokt modus brukes, selv om den som ringer, bruker råmodus.
Hvis stdin er stengt,tolk vil returnere med mindre-eof flagg er brukt, i hvilket tilfelle det påfølgende argumentet er påkalt.
log_file args -a fil
Hvis et filnavn er oppgitt,loggfil vil registrere et transkripsjon av økten (begynner på det tidspunktet) i filen.loggfil vil stoppe opptak hvis det ikke er gitt noe argument. Enhver tidligere loggfil er stengt.
I stedet for et filnavn kan en Tcl-filidentifikator gis ved å bruke-åpen eller-leaveopen flagg. Dette ligner påspawn kommando. (Sespawn for mer info.)
De-en flaggstyrker utdata som skal logges som ble undertrykt avlog_user kommando.
Som standard erloggfil kommando føyer til gamle filer i stedet for å avkorte dem, for å gjøre det mulig å slå av og på flere ganger i en økt. For å avkorte filer, bruk-noappend flagg.
De-Info flagg forårsaker log_file for å returnere en beskrivelse av de siste ikke-informasjonsargumentene som er gitt.
log_user-info | 0 | 1
Som standard logges send / forventer dialogen til stdout (og en loggfil hvis den er åpen). Loggingen til stdout er deaktivert med kommandoen "log_user 0" og reenabled av "log_user 1". Logg på loggfilen er uendret.
De-Info flagg fører til at log_user returnerer en beskrivelse av de siste ikke-informasjonsargumentene som er gitt.
match_max -d -i spawn_id size
definerer størrelsen på bufferen (i byte) som brukes internt avforvente . Uten størrelse argument, gjeldende størrelse returneres.
Med-d flagg, standardstørrelsen er innstilt. (Den opprinnelige standarden er 2000.) Med-Jeg flagg, størrelsen er angitt for det navngitte gud-ID, ellers er det angitt for den nåværende prosessen.
overlegg - # spawn_id - # spawn_id … program args
Utfører "program args "i stedet for dagensforvent program, som avsluttes. Et blindt bindestrekargument tvinger en bindestrek foran kommandoenavnet som om det var et påloggingsskall. Alle spawn_ids er stengt unntatt de som heter som argumenter. Disse kartlegges på de navngitte filidentifikasjonene.
Spawn_ids er kartlagt til filidentifikatorer for det nye programmet å arve. For eksempel kjører den følgende linjen sjakk og lar den styres av den nåværende prosessen - si en sjakkmester.
overlegg -0 $ spawn_id -1 $ spawn_id -2 $ spawn_id sjakk
Dette er mer effektivt enn "interagere -u", men det ofrer evnen til å gjøre programmert interaksjon sidenforvent prosessen er ikke lenger i kontroll.
Vær oppmerksom på at ingen kontrollterminal er gitt. Dermed, hvis du kobler fra eller gjenoppretter standardinngang, vil programmer som gjør jobbkontroll (skjell, innlogging, osv.) Ikke fungere skikkelig.
paritet -d -i spawn_id verdi
definerer hvorvidt paritet skal beholdes eller strippes fra utgangene fra høstede prosesser. Hvis verdi er null, paritet er strippet, ellers er det ikke strippet. Uten verdi argument, gjeldende verdi returneres.
Med-d flagg, er standardparitetsverdien satt. (Den opprinnelige standard er 1, dvs. paritet er ikke fjernet.) Med-Jeg flagg, er paritetsverdien satt for det navngitte gud-ID, ellers er det angitt for den nåværende prosessen.
remove_nulls -d -i spawn_id verdi
definerer hvorvidt nuller beholdes eller fjernes fra utdataene fra høstede prosesser før mønstermatching eller lagring i variabelen expect_out eller interact_out . Hvis verdi er 1, nuller er fjernet. Hvis verdi er 0, nulls er ikke fjernet. Uten verdi argument, gjeldende verdi returneres.
Med-d flagg, er standardverdien satt. (Den opprinnelige standarden er 1, dvs. nuller fjernes.) Med-Jeg flagg, verdien er angitt for det navngitte gyte-ID, ellers er det angitt for den nåværende prosessen.
Hvorvidt nuller fjernes, eller ikkeforvent vil registrere nullbyte til loggen og stdouten.
send -flags streng
sender string til den nåværende prosessen. For eksempel, kommandoen
send "hei verden"
sender tegnene, h e l l o w l l d til den nåværende prosessen. (Tcl inkluderer en printf-lignende kommando (kallesformat ) som kan bygge vilkårlig komplekse strenge.)
Tegn sendes umiddelbart, selv om programmer med linjebuffert inngang ikke vil lese tegnene til et returkarakter er sendt. Et returkarakter er betegnet " r".
De-- flagget tvinger det neste argumentet til å tolkes som en streng snarere enn et flagg.En hvilken som helst streng kan foregå med "-" om det egentlig ser ut som et flagg. Dette gir en pålitelig mekanisme for å spesifisere variable strenge uten å bli oppløst av de som ved et uhell ligner flagg. (Alle strenger som starter med "-" er reservert for fremtidige alternativer.)
De-Jeg flagg erklærer at strengen er sendt til navnet spawn_id. Hvis spawn_id er user_spawn_id , og terminalen er i råmodus, oversettes nye linjer i strengen til retur-newline-sekvenser slik at de ser ut som om terminalen var i kokt modus. De-rå flagg deaktiverer denne oversettelsen.
De-null flagg sender null tegn (0 byte). Som standard sendes ett null. Et heltall kan følge-null for å angi hvor mange nuller som skal sendes.
De-gå i stykker flagg genererer en pause tilstand. Dette er bare fornuftig dersom kallenavnet refererer til en tty-enhet som åpnes via "spawn -open". Hvis du har skapt en prosess som tips, bør du bruke tipskonvensjonen for å generere en pause.
De-s flaggstyrker utdata for å bli sendt "sakte", slik at man unngår den vanlige situasjonen hvor en datamaskin skriver ut en inngangsbuffer som er designet for et menneske som aldri ville utelate samme buffer. Denne utgangen styres av verdien av variabelen "send_slow" som tar en toelementliste. Det første elementet er et heltall som beskriver antall byte som skal sendes atomalt. Det andre elementet er et reelt tall som beskriver antall sekunder som atomforsendelsene må skilles fra. For eksempel vil "set send_slow {10 .001}" tvinge "send -s" for å sende strenger med 1 millisekund mellom hver 10 tegn sendt.
De-H flaggstyrker utdata som skal sendes (noe) som et menneske som faktisk skriver. Menneskelige forsinkelser vises mellom tegnene. (Algoritmen er basert på en Weibull-distribusjon, med modifikasjoner som passer til denne applikasjonen.) Denne utgangen styres av verdien av varianten "send_human" som tar en femelementliste. De to første elementene er en gjennomsnittlig interarrival tid for tegn i sekunder. Den første brukes som standard. Den andre brukes ved ordendringer, for å simulere de subtile pausene som av og til oppstår ved slike overganger. Den tredje parameteren er et mål for variabilitet hvor .1 er ganske variabel, 1 er rimelig variabel, og 10 er ganske uforanderlig. Ekstremene er 0 til uendelig. De to siste parametrene er henholdsvis en minimum og maksimal interarrival tid. Minimum og maksimum brukes sist og "klipp" sluttidspunktet. Det ultimate gjennomsnittet kan være ganske forskjellig fra det gitte gjennomsnittet hvis minimum og maksimum klipp nok verdier.
Som et eksempel, emulerer følgende kommando en rask og konsekvent maskinist:
sett send_human {.1 .3 1 .05 2} send -h "Jeg er sulten. La oss lage lunsj."
mens følgende kan være mer egnet etter en bakrus:
sett send_human {.4 .4 .2 .5 100} send -h "Goodd party lash night!"
Vær oppmerksom på at feil ikke simuleres, selv om du selv kan konfigurere feilkorrigeringssituasjoner ved å legge inn feil og korrigeringer i et sendargument.
Flaggene for å sende null tegn, for å sende pauser, for å tvinge treg utgang og for menneskelig stil, er gjensidig eksklusiv. Bare den som er oppgitt sist, blir brukt. Videre nr string argument kan angis med flaggene for å sende null tegn eller pauser.
Det er en god ide å gå foran den førstesende til en prosess av enforvente. forvente vil vente på at prosessen starter, menssende kan ikke. Spesielt hvis den førstesende fullføres før prosessen begynner å løpe, risikerer du at dataene dine blir ignorert. I situasjoner der interaktive programmer ikke gir noen innledende spørsmål, kan du gå foransende med en forsinkelse som i:
# For å unngå å gi hackere tips om hvordan man kan bryte inn, # dette systemet ber om ikke et eksternt passord. # Vent i 5 sekunder for exec å fullføre gyte telnet very.secure.gov sleep 5 send passord r
exp_send er et alias for sende. Hvis du bruker Expectk eller en annen variant av Expect i Tk-miljøet,sende er definert av Tk for et helt annet formål.exp_send er gitt for kompatibilitet mellom miljøer. Lignende aliaser er gitt for andre Expects andre sendkommandoer.
send_error -flags streng
er somsende , bortsett fra at utgangen sendes til stderr i stedet for den nåværende prosessen.
send_log - streng
er somsende , bortsett fra at strengen bare sendes til loggfilen (seloggfil .) Argumentene ignoreres hvis ingen loggfil er åpen.
send_tty -flags streng
er somsende , bortsett fra at utgangen sendes til / dev / tty i stedet for den nåværende prosessen.
send_user -flags streng
er somsende , bortsett fra at utgangen sendes til stdout heller enn den nåværende prosessen.
sove sekunder
får skriptet til å sove i det angitte antallet sekunder. Sekunder kan være et desimalnummer. Interrupts (og Tk hendelser hvis du bruker Expectk) behandles mens Expect sover.
gyte args program args
skaper en ny prosess som kjører "program args ". Stdin, stdout og stderr er knyttet til Expect, slik at de kan bli lest og skrevet av andreforvent kommandoer. Forbindelsen er ødelagt avLukk eller hvis selve prosessen lukker noen av filidentifikatorene.
Når en prosess er startet avspawn , variabelen spawn_id er satt til en deskriptor som refererer til den prosessen. Prosessen beskrevet av spawn_id regnes som "nåværende prosess" . spawn_id kan leses eller skrives, som faktisk gir jobbkontroll.
user_spawn_id er en global variabel som inneholder en deskriptor som refererer til brukeren. For eksempel, når spawn_id er satt til denne verdien,forvente oppfører seg somexpect_user .
.JEG error_spawn_id er en global variabel som inneholder en deskriptor som refererer til standardfeilen. For eksempel, når spawn_id er satt til denne verdien,sende oppfører seg somsend_error .
tty_spawn_id er en global variabel som inneholder en descriptor som refererer til / dev / tty. Hvis / dev / tty eksisterer ikke (for eksempel i en cron, på eller batch script), da tty_spawn_id er ikke definert. Dette kan bli testet som:
hvis {info vars tty_spawn_id} {# / dev / tty eksisterer} annet {# / dev / tty eksisterer ikke # sannsynligvis i cron, batch eller script}
spawn returnerer UNIX-prosess-ID. Hvis ingen prosess er oppstått, returneres 0. Variabelen spawn_out (slave, navn) er satt til navnet på Pty slave enheten.
Som standard,spawn ekko kommandoenavnet og argumentene. De-noecho flagg stopperspawn fra å gjøre dette.
De-console flagget fører til at konsollutgangen blir omdirigert til den fremstilte prosessen. Dette støttes ikke på alle systemer.
internt,spawn bruker en pty, initialisert på samme måte som brukerens tty. Dette er ytterligere initialisert slik at alle innstillinger er "sane" (i henhold til stty (1)). Hvis variabelen stty_init er definert, er det tolket i stil med stty argumenter som videre konfigurasjon. For eksempel vil "set stty_init raw" føre til at flere prosjekterte terminaler starter i råmodus.-nottycopy hopper initialiseringen basert på brukerens tty.-nottyinit hopper over "sane" initialisering.
Normalt,spawn tar lite tid å utføre. Hvis du oppdager at du tar en betydelig tid, kommer det sannsynligvis opp for ptys som er kile. En rekke tester kjøres på ptys for å unngå forstyrrelser med feilprosesser. (Disse tar 10 sekunder per kilde.) Running Forvent med-d alternativet vil vise omforvent støter på mange ptys i odde stater. Hvis du ikke kan drepe prosessene som disse ptys er vedlagt, kan det være at du bare starter på nytt.
Hvis program kan ikke hentes vellykket fordi exec (2) mislykkes (for eksempel når program eksisterer ikke), vil en feilmelding bli returnert av den nestesamhandle ellerforvente kommando som om program hadde kjørt og produsert feilmeldingen som utgang. Denne oppførselen er en naturlig konsekvens av implementeringen avspawn . Internt, gyte gaffler, hvorpå den gjødde prosessen ikke har mulighet til å kommunisere med originalenforvent behandle unntatt ved kommunikasjon via spawnid.
De-åpen flagg fører til at neste argument tolkes som en Tcl-filidentifikator (dvs. returnert avåpen .) Helse-id kan da brukes som om det var en oppstått prosess. (Filidentifikatoren skal ikke lenger brukes.) Dette lar deg behandle raske enheter, filer og rørledninger som genererte prosesser uten å bruke en pty. 0 returneres for å indikere at det ikke er noen tilknyttet prosess. Når tilkoblingen til den fremstilte prosessen er stengt, så er Tcl-filidentifikatoren. De-leaveopen flagget ligner på-åpen bortsett fra det-leaveopen fører til at filidentifikatoren blir åpen igjen selv etter at id-id er stengt.
De-pty flagg fører til at et dyr åpnes, men ingen prosess oppsto. 0 returneres for å indikere at det ikke er noen tilknyttet prosess. Spawn_id er satt som vanlig.
Variabelen spawn_out (slave, fd) er satt til en filidentifikator som svarer til PTY-slaven. Den kan lukkes ved hjelp av "close-slave".
De-overse flagg navngir et signal som skal ignoreres i den fremstilte prosessen. Ellers får signaler standardoppfø




