Skip to main content

Forvent Linux / Unix Command Instruktioner og eksempler

Writing 2D Games in C using SDL by Thomas Lively (Juni 2026)

Writing 2D Games in C using SDL by Thomas Lively (Juni 2026)
Anonim

Forvent er et program, der snakker til andre interaktive programmer ifølge et script. Ved at følge scriptet forventes, hvad der kan forventes af et program, og hvad det korrekte svar skal være. Et fortolket sprog giver forgrening og styringsstrukturer på højt niveau til at lede dialogen. Desuden kan brugeren tage kontrol og interagere direkte, når det ønskes, efterfølgende returnere kontrol til scriptet.

Expectk er en blanding af Expect og Tk. Det opfører sig ligesom Expect og Tk's ønske. Forvent kan også bruges direkte i C eller C ++ uden Tcl.

Navnet "Forvent" kommer fra ideen om send / forvent sekvenser populeret af uucp, kermit og andre modemstyringsprogrammer. Men i modsætning til uucp er Expect generaliseret, så det kan køres som en kommando på brugerniveau med ethvert program og en opgave i tankerne. Forvent at tale med flere programmer på samme tid.

Hvad kan forvente

Her er for eksempel nogle ting, man forventer at kommandoen kan gøre:

  • Få computeren til at ringe til dig igen, så du kan logge ind uden at betale for opkaldet.
  • Start et spil, og hvis den optimale konfiguration ikke vises, genstart den igen og igen), indtil den gør det, og overfør derefter kontrollen til dig.
  • Kør fsck, og svar på spørgsmålene, svar "ja" eller "nej" eller giv kontrol tilbage til dig, baseret på forudbestemte kriterier.
  • Opret forbindelse til et andet netværk og hent automatisk din mail, så det vises som om det oprindeligt blev sendt til dit lokale system.
  • Bære miljøvariabler, nuværende katalog eller nogen form for information på tværs af rlogin, telnet, tip, su eller chgrp

Der er mange forskellige årsager til, at skallen ikke kan udføre disse opgaver. Alle er mulige med forventning.

Generelt er Expect nyttigt for at køre ethvert program, der kræver interaktion mellem programmet og brugeren. Alt hvad der er nødvendigt er, at interaktionen kan karakteriseres programmatisk. Forvent kan også give tilbage kontrol til brugeren uden at stoppe det program, der styres. Tilsvarende kan brugeren til enhver tid returnere kontrol til scriptet.

Anvendelse

Forvent at læse cmdfile for en liste over kommandoer, der skal udføres. Forvente kan påberåbes implicit på systemer, der understøtter #! notation ved at markere scriptet som eksekverbar og gøre første linje i scriptet:

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

Selvfølgelig skal stien præcist beskrive, hvor Forvent liv. / usr / local / bin er blot et eksempel.

-C-flag prefaces en kommando, der skal udføres før nogen i scriptet. Kommandoen bør citeres for at undgå at blive brudt op af skallen. Denne mulighed kan bruges flere gange. Flere kommandoer kan udføres med en enkelt -c ved at adskille dem med semikoloner. Kommandoer udføres i den rækkefølge, de vises. Når du bruger Expectk, er denne indstilling angivet som -kommando.

-D-flagget muliggør nogle diagnostiske output, der primært rapporterer intern aktivitet af kommandoer som forventer og interagerer. Dette flag har samme virkning som "exp_internal 1" i begyndelsen af ​​et Expect script, plus versionen af ​​Expect er udskrevet.

-D-flag gør det muligt for en interaktiv debugger. Et helt tal skal følge. Fejlfindingen vil tage kontrol inden næste Tcl-procedure, hvis værdien er ikke-nul, eller hvis en ^ C trykkes eller et breakpoint bliver ramt, eller en anden passende debugger-kommando vises i scriptet. Når du bruger Expectk, er denne indstilling angivet som -Fejlfinde.

F -f-flag forfatter en fil, hvorfra man kan læse kommandoer. Flagget selv er valgfrit, da det kun er nyttigt, når du bruger #! notation, så andre argumenter kan leveres på kommandolinjen. Når du bruger Expectk, er denne indstilling angivet som -fil.

Som standard læses kommandofilen i hukommelsen og udføres i sin helhed. Det er lejlighedsvis ønskeligt at læse filer én linje ad gangen. For at tvinge vilkårlig filer til at håndteres på denne måde, brug -b-flag. Når du bruger Expectk, er denne indstilling angivet som buffer.

Hvis strengen "-" leveres som et filnavn, læses standardindgangen i stedet. Brug "./-" for at læse fra en fil, der faktisk hedder "-".

-I-flaget forårsager Forvent at interagere prompt for kommandoer i stedet for at læse dem fra en fil. Prompting opsiges via exit kommandoen eller på EOF. Den -i flag antages, hvis hverken en kommandofil eller -c anvendes. Når du bruger Expectk, er denne indstilling angivet som -interaktiv.

- kan bruges til at afgrænse slutningen af ​​mulighederne. Dette er nyttigt, hvis du vil overføre et valgmuligt argument til dit script uden at det fortolkes af Expect. Dette kan med fordel placeres i #! linje for at forhindre enhver flaglig fortolkning ved at forvente. For eksempel vil følgende forlade de oprindelige argumenter, herunder scriptnavnet i variablen argv .

#! / usr / local / bin / expect -

Bemærk at de sædvanlige getopt (3) og execve (2) konventioner skal overholdes, når man tilføjer argumenter til #! linje.

Filen $ exp_library / expect.rc hentes automatisk, hvis den er til stede, medmindre -N-flag er brugt. (Når du bruger Expectk, er denne indstilling angivet som -NORC.) Umiddelbart efter dette hentes filen ~ / .expect.rc automatisk, medmindre-et flag bruges. Hvis miljøvariablen DOTDIR er defineret, behandles den som en mappe og .expect.rc læses derfra. Når du bruger Expectk, er denne indstilling angivet som -norc.Denne indkøb finder sted først efter at have udført nogen -c-flag.

-V årsager Forvent at udskrive dens versionsnummer og afslutte. Det tilsvarende flag i Expectk, der bruger lange flag navne, er -version.

Valgfrie args er konstrueret i en liste og gemt i variablen hedder argv og. argc initialiseres til længden af ​​argv.

Argv0 er defineret som navnet på scriptet eller binært, hvis der ikke anvendes script. For eksempel udskriver følgende navnet på scriptet og de tre første argumenter:

send_user "$ argv0 lrange $ argv 0 2 n"

kommandoer

Forvent brug af værktøjs kommandosprog. Tcl giver kontrolflow (hvis, for, pause), ekspressionsevaluering og flere andre funktioner såsom rekursion og procedure definition. Kommandoer, der bruges her, men ikke defineret (sæt, hvis, exec) er Tcl-kommandoer. Forvent støtter yderligere kommandoer. Medmindre andet er angivet, returnerer kommandoer den tomme streng.

Kommandoer er listet alfabetisk, så de hurtigt kan placeres. Nye brugere kan dog finde det nemmere at starte ved at læse beskrivelserne af gyde, sende, forvente og interagere i den rækkefølge.

Luk -slave -onexec 0 | 1 -i spawn_id

lukker forbindelsen til den aktuelle proces. De fleste interaktive programmer vil opdage EOF på deres stdin og exit; dermed tæt normalt nok til at dræbe processen så godt. Den -i flag erklærer processen for at lukke svarer til den navngivne spawnid.

Begge forventer og interagerer vil opdage, hvornår den nuværende proces udgår og implicit gør et tæt, men hvis du dræber processen ved at sige "exec kill $ pid", skal du udtrykkeligt ringe tæt på.

-Onexec-flagdet bestemmer, om spawn-id'et er lukket i eventuelle nye udbredte processer, eller hvis processen er overlejret. For at lade et spa-id være åbent, brug værdien 0. En ikke-nul heltalværdi tvinger spærret lukket i nye processer.

Slave-flagmet lukker slaven i forbindelse med spawn-id. Når forbindelsen er lukket, lukkes slaven automatisk også, hvis den stadig er åben.

Uanset om forbindelsen er lukket implicit eller eksplicit, skal du ringe vente for at rydde den tilsvarende kerneprocesplads. Den nære kommando kalder ikke vente, da der ikke er nogen garanti for at lukke en procesforbindelse vil få den til at gå ud.

debug -now 0 | 1

styrer en Tcl debugger, så du kan gennemgå udsagn og sætte breakpoints.

Uden argumenter returneres en 1, hvis debuggeren ikke kører, ellers returneres 0.

Med et 1 argument startes debuggeren. Med et 0-argument stoppes debuggeren. Hvis et 1-argument går forud for det-nu-flag, startes debuggeren med det samme. Ellers startes debuggeren med den næste Tcl-sætning.

Fejlfindingskommandoen ændrer ikke nogen fælder. Sammenlign dette til start Forvent med -D-flag.

Afbrydningskommandoen afbryder en forked-proces fra terminalen. Det fortsætter med at køre i baggrunden. Processen får sin egen procesgruppe. Standard I / O omdirigeres til / dev / null.

Følgende fragment bruger afbryder for at fortsætte med at køre scriptet i baggrunden.

hvis {{fork! = 0} exit afbryd forbindelsen. . .

Følgende script læser et kodeord og kører derefter et program hver time, der kræver et kodeord hver gang det køres. Skriptet leverer adgangskoden, så du kun skal skrive den en gang.

send_user "password? " expect_user -re "(. *) n" for {} 1 {} {hvis {fork! = 0} {sleep 3600; fortsæt} frakobl spawn priv_prog forvent adgangskode: send "$ expect_out 1, streng) r ". . . Afslut }

En fordel ved at bruge frakobling over asynkron procesfunktionen (&) er, at Expect kan gemme terminalparametrene inden afbrydelsen, og derefter anvende dem senere på nye ptys. Med &, Expect har ikke mulighed for at læse terminalens parametre, da terminalen allerede er afbrudt af den tid, forventning modtager kontrol.

exit -opts status

forventer at afslutte eller på anden måde forberede sig til at gøre det.

Det -onexit flag forårsager det næste argument, der skal bruges som en exithåndterer. Uden et argument returneres den nuværende exithåndterer.

Det -noexit flag årsager Forventer at forberede sig på at afslutte men stoppe kort for faktisk tilbagevendende kontrol til operativsystemet. Den brugerdefinerede exithåndterer køres såvel som Expects egne interne håndteringsprogrammer. Ingen yderligere Forvent kommandoer skal udføres. Dette er nyttigt, hvis du kører Forvent med andre Tcl-udvidelser. Den nuværende tolk (og hovedvinduet hvis i Tk-miljøet) forbliver således, at andre Tcl-udvidelser kan rydde op. Hvis Expect er Afslut kaldes igen (dog dette kan forekomme), håndtererne er ikke genoptaget.

Ved udgang er alle forbindelser til udstødte processer lukket. Lukning vil blive opdaget som en EOF ved udbredte processer. Afslut tager ingen andre handlinger ud over hvad den normale _exit (2) procedure gør. Således kan spurgte processer, der ikke kontrollerer for EOF, fortsætte med at løbe. (En række betingelser er vigtige for at bestemme, for eksempel, hvilke signaler en fremstødsproces vil blive sendt, men disse er systemafhængige, typisk dokumenteret under exit (3).) Spirede processer, der fortsætter med at køre, vil blive arvet af init.

status (eller 0 hvis ikke angivet) returneres som exitstatus for Forventer . Afslut udføres implicit, hvis slutningen af ​​scriptet er nået.

exp_continue -continue_timer

Kommandoen exp_continue tillader forventer sig selv for at fortsætte med at udføre i stedet for at vende tilbage som det normalt ville. Som standard exp_continue nulstiller timeout-timeren. Det -continue_timer flag forhindrer timeren i at blive genstartet. (Se forventer for mere information.)

exp_internal -f file værdi

får yderligere kommandoer til at sende diagnostiske oplysninger internt til Forventer at stderr hvis værdi er ikke-nul. Denne udgang er deaktiveret, hvis værdi er 0. Diagnostiske oplysninger omfatter hvert tegn, der modtages, og ethvert forsøg, der er gjort for at matche den aktuelle udgang mod mønstrene.

Hvis det valgfrie fil leveres, alle normale og debugging output er skrevet til den fil (uanset værdien af værdi ). Enhver tidligere diagnostisk outputfil er lukket.

Det -info flag forårsager udlænding at returnere en beskrivelse af de seneste ikke-info-argumenter.

exp_open args -i spawnid

returnerer en Tcl-filidentifikator, der svarer til det originale spawn-id. Filidentifikatoren kan derefter bruges som om den blev åbnet af Tcl'er åben kommando. (Hele id skal ikke længere bruges vente bør ikke udføres.

Det -leaveopen flag forlader spawn id åben for adgang gennem Forvent kommandoer. EN vente skal udføres på spawn id.

exp_pid -i spawn_id

returnerer proces id svarende til den igangværende proces. Hvis -jeg flag bruges, den returnerede pid svarer til den for den givne gyde 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 version

er nyttigt for at sikre at scriptet er kompatibelt med den aktuelle version af Expect.

Uden argumenter, den nuværende version af Forventer returneres. Denne version kan så blive kodet i dit script. Hvis du faktisk ved, at du ikke bruger funktioner i nyere versioner, kan du angive en tidligere version.

Versioner består af tre tal adskilt af prikker. Først er hovedtalet. Scripts skrevet for versioner af Forventer med et andet stort antal vil næsten helt sikkert ikke fungere. exp_version returnerer en fejl, hvis de store tal ikke stemmer overens.

For det andet er det mindre tal. Scripts skrevet til en version med et større mindre nummer end den nuværende version kan afhænge af nogle nye funktioner og kan muligvis ikke køre. exp_version returnerer en fejl, hvis de store tal matcher, men script-mindre tal er større end det, der kører Forventer .

Tredje er et nummer, der ikke spiller nogen rolle i versions sammenligningen. Det øges dog, når Forventer software distribution er ændret på nogen måde, såsom ved yderligere dokumentation eller optimering. Den nulstilles til 0 på hver ny mindre version.

Med -Afslut flag, Forventer udskriver en fejl og udløber, hvis versionen er forældet.

forventer -ops pat1 body1 … -ops patn bodyn

venter, indtil et af mønstrene svarer til udgangen af ​​en frembragt proces, en bestemt tidsperiode er gået, eller en slut-fil ses. Hvis det endelige legeme er tomt, kan det udelades.

Mønstre fra de seneste expect_before kommando anvendes implicit før andre mønstre. Mønstre fra de seneste expect_after Kommando anvendes implicit efter andre mønstre.

Hvis argumenterne til hele forventer erklæring kræver mere end en linje, alle argumenter kan "bøjes" i en for at undgå at afslutte hver linje med en tilbageslag. I dette ene tilfælde vil de sædvanlige Tcl-udskiftninger forekomme trods bøjlerne.

Hvis et mønster er nøgleordet eof , det tilsvarende organ udføres ved slutningen af ​​filen. Hvis et mønster er nøgleordet tiden er gået , det tilsvarende organ udføres ved timeout. Hvis der ikke bruges et timeout-søgeord, udføres en implicit null-handling ved timeout. Standard timeout-perioden er 10 sekunder, men kan indstilles, for eksempel til 30, med kommandoen "set timeout 30". En uendelig timeout kan betegnes med værdien -1. Hvis et mønster er nøgleordet Standard , udføres det tilsvarende organ på enten timeout eller end-of-file.

Hvis et mønster matcher, udføres den tilsvarende krop. forventer returnerer resultatet af kroppen (eller den tomme streng, hvis intet mønster matchede). I tilfælde af at flere mønstre matcher, bruges den ene som først til at vælge en krop.

Hver gang nye output ankommer, sammenlignes det med hvert mønster i den rækkefølge, de er angivet. Således kan du teste for fravær af en kamp ved at gøre det sidste mønster noget garanteret at dukke op, for eksempel en prompt. I situationer hvor der ikke er nogen prompt, skal du bruge tiden er gået (ligesom du ville, hvis du interagerede manuelt).

Mønstre er angivet på tre måder. Som standard er mønstre angivet som med Tcl'er streng match kommando. (Sådanne mønstre ligner også C-shell regulære udtryk, der normalt betegnes som "glob" mønstre). Det -gl flag kan bruges til at beskytte mønstre, der ellers kunne matche forventer flag fra at gøre det. Ethvert mønster der begynder med en "-" skal beskyttes på denne måde. (Alle strenge der starter med "-" er forbeholdt fremtidige muligheder.)

F.eks. Ser det ud til et succesfuldt login. (Noter det abort formodes at være en procedure defineret andetsteds i scriptet.)

Forvent {busy (sætter optaget n; exp_continue} mislykkedes at afbryde "ugyldig adgangskode" abort timeout abort connected}

Citater er nødvendige på det fjerde mønster, da det indeholder et mellemrum, som ellers ville adskille mønsteret fra handlingen.Mønstre med den samme handling (som 3. og 4.) kræver notering af handlingerne igen. Dette kan undgås ved at bruge regexp-stil mønstre (se nedenfor). Flere oplysninger om dannelse af glob-stil mønstre findes i Tcl manualen.

Regexp-stil mønstre følger den syntaks, der er defineret af Tcl's regexp (kort for "regulær ekspression") kommando. regexp mønstre introduceres med flag -re . Det foregående eksempel kan omskrives ved hjælp af en regexp som:

Forvent {busy (sætter optaget n; exp_continue} -re "failed" ugyldig adgangskode "abort timeout abort connected}

Begge typer mønstre er "unanchored". Dette betyder, at mønstre ikke behøver at matche hele strengen, men kan begynde og afslutte kampen hvor som helst i strengen (så længe alt andet matcher). Brug ^ til at matche begyndelsen af ​​en streng og $ for at matche slutningen. Bemærk, at hvis du ikke venter på enden af ​​en streng, kan dine svar nemt ende i midten af ​​strengen, da de ekkoes af den frembragte proces. Selvom der stadig produceres korrekte resultater, kan udgaven virke unaturlig. Således bliver brugen af ​​$ opmuntret, hvis du nøjagtigt kan beskrive tegnene i slutningen af ​​en streng.

Bemærk, at i mange redaktører svarer ^ og $ til begyndelsen og slutningen af ​​linjerne. Men fordi forventningen ikke er linjeorienteret, matcher disse tegn begyndelsen og slutningen af ​​dataene (i modsætning til linjer) i øjeblikket i den forventede matchende buffer. (Se også noten under "System fordøjelsesbesvær.")

Det EX flag forårsager mønsteret at blive matchet som en "nøjagtig" streng. Ingen fortolkning af *, ^, osv. Er lavet (selv om de sædvanlige Tcl-konventioner stadig skal overholdes). Præcise mønstre er altid unanchored.

Det -nocase flag forårsager store bogstaver i output for at sammenligne som om de var små bogstaver. Mønsteret påvirkes ikke.

Mens du læser output, kan mere end 2000 byte tvinge tidligere byte til at blive "glemt". Dette kan ændres med funktionen match_max . (Bemærk at overdrevent store værdier kan bremse mønsterkompateren.) Hvis patlist er full_buffer , det tilsvarende organ udføres hvis match_max bytes er blevet modtaget og ingen andre mønstre har matchet. Hvorvidt full_buffer Søgeord bruges, de glemte tegn er skrevet til expect_out (buffer).

Hvis patlist er nøgleordet nul , og nulls er tilladt (via remove_nulls kommando) udføres den tilsvarende krop, hvis en enkelt ASCII 0 matches. Det er ikke muligt at matche 0 bytes via glob eller regexp mønstre.

Ved matchning af et mønster (eller eof eller full_buffer) gemmes enhver matchende og tidligere umatchet output i variablen expect_out (puffer) . Op til 9 regexp-substrengskampe gemmes i variablerne expect_out (1, streng) igennem expect_out (9, streng) . Hvis -indices flag bruges før et mønster, start- og slutindekserne (i en form egnet til lrange ) af de 10 strenge gemmes i variablerne expect_out (X, start) og expect_out (X, ende) hvor X er et ciffer, svarer til substringspositionen i bufferen. 0 refererer til strenge, der matchede hele mønsteret og genereres for glob mønstre såvel som regexp mønstre. Hvis en proces f.eks. Har produceret output af "abcdefgh n", er resultatet af:

Forvent "cd"

er som om følgende udsagn havde henrettet:

sæt expect_out (0, string) cd sæt expect_out (buffer) abcd

og "efgh n" er tilbage i outputbufferen. Hvis en proces producerede output "abbbcabkkkka n", er resultatet af:

Forvent -indikatorer -re "b (b *). * (k +)"

er som om følgende udsagn havde henrettet:

sæt expect_out (0, start) 1 sæt expect_out (0, slut) 10 sæt expect_out (0, streng) bbbcabkkkk sæt expect_out (1, start) 2 sæt expect_out (1, slut) 3 sæt expect_out (1, streng) bb sæt expect_out (2, start) 10 sæt expect_out (2, end) 10 sæt expect_out (2, streng) k sæt expect_out (buffer) abbbcabkkkk

og "a n" er tilbage i outputbufferen. Mønsteret "*" (og -re ". *") Vil spyle outputbufferen uden at læse mere output fra processen.

Normalt kasseres den matchede output fra Expects interne buffere. Dette kan forhindres ved at prefixere et mønster med -notransfer flag. Dette flag er specielt nyttigt til eksperimentering (og kan forkortes til "-not" for at gøre det lettere, mens du eksperimenterer).

Spild-id'et, der er forbundet med matchende output (eller eof eller full_buffer) er gemt i expect_out (spawn_id) .

Det -tiden er gået flag forårsager, at den nuværende forventer kommando at bruge følgende værdi som en timeout i stedet for at bruge værdien af ​​timeout-variablen.

Som standard matches mønstre imod output fra den aktuelle proces, dog -jeg flag erklærer udgangen fra den nævnte spawn_id-liste, matches imod ethvert af følgende mønstre (op til det næste -jeg ). Listen spawn_id skal enten være en hvidspacesepareret liste over spawnids eller en variabel, der henviser til en sådan liste over spawnys.

Eksempelvis venter det følgende eksempel på "tilsluttet" fra den aktuelle proces eller "optaget", "fejlet" eller "ugyldigt kodeord" fra spawn_id kaldet af $ proc2.

Forvent {-i $ proc2 travlt {sætter optaget n; exp_continue} -re "failed" ugyldig adgangskode "abort timeout abort connected}

Værdien af ​​den globale variabel any_spawn_id kan bruges til at matche mønstre til enhver spawnids, der er navngivet med alle andre -jeg flag i den nuværende forventer kommando. Spawn_id fra a -jeg flag uden tilknyttet mønster (dvs. efterfølges umiddelbart af en anden -jeg ) stilles til rådighed for andre mønstre i samme forventer kommando forbundet med any_spawn_id.

Det -jeg flag kan også navngive en global variabel, i hvilket tilfælde variablen læses til en liste over spawnys. Variablen genindlæses, når den ændres. Dette giver mulighed for at ændre I / O-kilden, mens kommandoen er i fuldførelse. Spawn ids forudsat denne måde kaldes "indirekte" spawn ids.

Handlinger som f.eks pause og Blive ved forårsage kontrolstrukturer (dvs. til , proc ) at opføre sig på den sædvanlige måde. Kommandoen exp_continue tillader forventer sig selv for at fortsætte med at udføre i stedet for at vende tilbage som det normalt ville.

Dette er nyttigt for at undgå eksplosive sløjfer eller gentagne forventninger. Følgende eksempel er en del af et fragment for at automatisere rlogin. Det exp_continue undgår at skulle skrive et sekund forventer erklæring (for at søge efter spørgsmålet igen), hvis rlogin beder om en adgangskode.

Forvent {Passord: {stty -echo send_user "kodeord (for $ bruger) på $ vært:" expect_user -re "(. *) n" send_user " n" send "$ expect_out (1 string) echo exp_continue} forkert {send_user "forbindelse til vært mislykkedes: $ expect_out (buffer)" exit "- exit { re $ prompt}

F.eks. Kan det følgende fragment hjælpe en brugervejledning med et interaktion, der allerede er helt automatiseret. I dette tilfælde sættes terminalen i rå tilstand. Hvis brugeren trykker på "+", øges en variabel. Hvis der trykkes på "p", sendes flere afkast til processen, måske for at poke det på en eller anden måde, og "jeg" lader brugeren interagere med processen, og stjæler effektivt kontrollen fra scriptet. I hvert tilfælde er exp_continue tillader strømmen forventer for at fortsætte mønster matching efter at have udført den aktuelle handling.

stty raw -echo expect_after {-i $ user_spawn_id "p" {send " r r r"; exp_continue} "+" {incr foo; exp_continue} "i" {interact; exp_continue} "stop" exit}

Som standard, exp_continue nulstiller timeout-timeren. Timeren genstartes ikke, hvis exp_continue kaldes med -continue_timer flag.

expect_after expect_args

fungerer identisk med expect_before bortset fra at hvis mønstre fra begge forventer og expect_after kan matche, forventer mønster bruges. Se expect_before kommando for mere information.

expect_background expect_args

tager de samme argumenter somforventer , men det vender straks tilbage. Mønstre testes, når ny input kommer. Mønstrettiden er gået ogStandard er meningsløse tilexpect_background og kasseres tydeligt. Ellers er detexpect_background kommando brugerexpect_before ogexpect_after mønstre ligesomforventer gør.

Hvornårexpect_background handlinger er ved at blive evalueret, baggrundsbearbejdning for samme spawn-id er blokeret. Baggrundsbehandling er ikke blokeret, når handlingen er færdig. Mens baggrundsbehandling er blokeret, er det muligt at lave en (forgrunds)forventer på samme spawn-id.

Det er ikke muligt at udføre enforventer mens enexpect_background er blokeret.expect_background for et bestemt spawn-id slettes ved at erklære en ny expect_background med samme spawn-id. erklæreexpect_background uden mønster fjerner det givne spawn-id fra evnen til at matche mønstre i baggrunden.

expect_forfore expect_args

tager de samme argumenter somforventer , men det vender straks tilbage. Mønster-action par fra de senesteexpect_before med samme gyde id er implicit tilføjet til ethvert følgendeforventer kommandoer. Hvis et mønster matcher, behandles det som om det var angivet iforventer kommandoen selv, og det tilknyttede legeme udføres i sammenhæng medforventer kommando. Hvis mønstre fra beggeexpect_before ogforventer kan matche,expect_before mønster bruges.

Hvis der ikke er angivet et mønster, er spawn-id ikke markeret for nogen mønstre.

Medmindre den er overstyret af a-jeg flag,expect_before mønstre matcher spawn id defineret på det tidspunkt, hvorexpect_before kommandoen blev udført (ikke når mønsteret er matchet).

Info-flag giver anledning tilexpect_before at returnere de nuværende specifikationer for hvilke mønstre det vil matche. Som standard rapporterer den om det aktuelle spawn-id. En valgfri id-id-specifikation kan angives for oplysninger om dette spa-id. For eksempel

expect_before -info -i $ proc

Der kan højst angives en spa-id-specifikation. Flag -indirekte undertrykker direkte gyde-ids, der kun kommer fra indirekte specifikationer.

I stedet for en id-id-specifikation vil flag "-all" forårsage "-info" til at rapportere om alle gyde-id'er.

Udgangen af ​​info-flag kan genbruges som argumentet for at forvente_forud.

expect_tty expect_args

er ligesomforventer men det læser tegn fra / dev / tty (dvs. tastetryk fra brugeren). Som standard udføres læsning i kogt tilstand. Linjerne skal således ende med et afkast i ordenforventer at se dem. Dette kan ændres viastty (sestty kommando nedenfor).

expect_user expect_args

er ligesomforventer men det læser tegn fra stdin (dvs. tastetryk fra brugeren). Som standard udføres læsning i kogt tilstand. Linjerne skal således ende med et afkast i ordenforventer at se dem.Dette kan ændres viastty (sestty kommando nedenfor).

gaffel

skaber en ny proces. Den nye proces er en nøjagtig kopi af strømmenForventer behandle. Efter succesgaffel returnerer 0 til den nye (child) -proces og returnerer proces-ID'et til barnprocessen til overordnet proces. Ved fejl (altid på grund af manglende ressourcer, for eksempel bytteplads, hukommelse)gaffel returnerer -1 til overordnet proces, og der oprettes ingen børneproces.

Forked processer udgang viaAfslut kommando, ligesom den oprindelige proces. Forked-processer må skrive til logfilerne. Hvis du ikke deaktiverer fejlfinding eller logning i de fleste processer, kan resultatet være forvirrende.

Nogle pty implementeringer kan blive forvirret af flere læsere og forfattere, selv øjeblikkeligt. Således er det sikreste atgaffel før gydningsprocesser.

interagere string1 body1 … stringn bodyn

giver kontrol over den aktuelle proces til brugeren, så tastetryk sendes til den aktuelle proces, og stdout og stderr for den aktuelle proces returneres.

String-body-par kan angives som argumenter, i hvilket tilfælde kroppen udføres, når den tilsvarende streng indtastes. (Som standard sendes strengen ikke til den aktuelle proces.)tolk Kommando antages, hvis den endelige krop mangler.

Hvis argumenterne til heleinteragere erklæring kræver mere end en linje, alle argumenter kan "bøjes" i en for at undgå at afslutte hver linje med en tilbageslag. I dette ene tilfælde vil de sædvanlige Tcl-udskiftninger forekomme trods bøjlerne.

For eksempel interagerer følgende kommando-kørsler med følgende streng-kropspar, der er defineret: Når ^ Z trykkes,Forventer er suspenderet. (Det-Nulstil flag genopretter terminalstilstandene.) Når ^ A trykkes, ser brugeren "du har skrevet en kontrol-A", og processen sendes a ^ A. Når $ trykkes, ser brugeren datoen. Når ^ C trykkes,Forventer udgange. Hvis "foo" er indtastet, ser brugeren "bar". Når ~ ~ trykkes, sættes denForventer tolk kører interaktivt.

sæt CTRLZ 032 interagere {-reset $ CTRLZ {exec kill -STOP pid} 001 {send_user "du skrev en kontrol-A n"; send " 001"} $ {send_user "Datoen er urformat klokke sekunder."} 003 exit foo {send_user "bar"} ~~}

I strengkropspar er strenge matchet i den rækkefølge, de er angivet som argumenter. Strings, der delvist matcher, sendes ikke til den aktuelle proces i forventning om, at resten kommer. Hvis tegn indtastes på en sådan måde, at der ikke længere kan være en kamp, ​​sendes kun delen af ​​strengen til den proces, der muligvis ikke kan starte en anden kamp. Strenge, der er substrings af partielle kampe, kan således matche senere, hvis de oprindelige strenge, der forsøgte at blive matchede, i sidste ende fejler.

Som standard er streng matchning nøjagtig uden vildt kort. (I modsætning hertilforventer kommando bruger glob-stil mønstre som standard.) TheEX flag kan bruges til at beskytte mønstre, der ellers kunne matcheinteragere flag fra at gøre det. Ethvert mønster der begynder med en "-" skal beskyttes på denne måde. (Alle strenge der starter med "-" er forbeholdt fremtidige muligheder.)

Det-re flag tvinger den streng, der skal fortolkes som et regexp-stil mønster. I dette tilfælde gemmes matchende substrings i variablen interact_out på samme måde som den mådeforventer lagrer sin output i variablenexpect_out . Det-indices flag understøttes tilsvarende.

Mønstreteof introducerer en handling, der udføres på slutningen af ​​filen. En separateof Mønsteret kan også følge-produktion flag, i hvilket tilfælde det matches, hvis der er registreret et eof, mens der skrives output. Standardværdieneof handling er "tilbagevenden", så detinteragere vende tilbage til enhver EOF.

Mønstrettiden er gået introducerer en timeout (i sekunder) og handling, der udføres efter at ingen tegn er blevet læst for en given tid. Dettiden er gået mønster gælder for den senest specificerede proces. Der er ingen standard timeout. Den særlige variabel "timeout" (bruges afforventer kommando) har ingen indflydelse på denne timeout.

For eksempel kan følgende sætning bruges til autologout brugere, der ikke har skrevet noget i en time, men som stadig får hyppige systemmeddelelser:

interagere-input $ user_spawn_id timeout 3600 return -output $ spawn_id

Hvis mønsteret er nøgleordetnul , og nulls er tilladt (viaremove_nulls kommando) udføres den tilsvarende krop, hvis en enkelt ASCII 0 matches. Det er ikke muligt at matche 0 bytes via glob eller regexp mønstre.

Prefacing et mønster med flag-jeg skriver forårsager variablen interact_out (spawn_id) at blive indstillet til spawn_id som matchede mønsteret (eller eof).

Handlinger som f.ekspause ogBlive ved forårsage kontrolstrukturer (dvs.til , proc ) at opføre sig på den sædvanlige måde. ImidlertidVend tilbage årsager interagerer til at vende tilbage til sin person, mensinter_return årsagerinteragere at give et retur i sin opkalder. For eksempel, hvis "proc foo" kaldesinteragere som derefter udførte handlingeninter_return , proc foo ville vende tilbage. (Dette betyder, at hvisinteragere opkaldtolk interaktivt skrivningVend tilbage vil få interaktionen til at fortsætte, mensinter_return vil medføre, at interaktionen vender tilbage til sin opkalder.)

I løbet afinteragere , rå tilstand bruges, så alle tegn kan sendes til den aktuelle proces.Hvis den aktuelle proces ikke fanger jobkontrol signaler, stopper den, hvis der sendes et stop signal (som standard ^ Z). For at genstarte det, send et fortsættelsessignal (f.eks. Ved "kill-CONT"). Hvis du virkelig vil sende en SIGSTOP til en sådan proces (ved ^ Z), skal du overveje at gyde csh først og derefter køre dit program. På den anden side, hvis du vil sende en SIGSTOP tilForventer sig selv, første opkaldstolk (måske ved at bruge en escape-karakter), og tryk derefter på ^ Z.

String-body par kan bruges som en stenografi for at undgå at skulle indtaste tolken og udføre kommandoer interaktivt. Den foregående terminal tilstand bruges, mens kroppen af ​​et streng-kropspar udføres.

For hastighed udføres handlinger som standard i rå tilstand. Det-Nulstil flag nulstiller terminalen til den tilstand, den havde førinteragere blev udført (altid kogt tilstand). Bemærk, at tegn, der indtastes, når tilstanden skiftes, kan gå tabt (et uheldig træk ved terminaldriveren på nogle systemer). Den eneste grund til at bruge-Nulstil er hvis din handling afhænger af at køre i tilberedt tilstand.

Det-ekko flag sender tegn, der matcher det følgende mønster tilbage til processen, der genererede dem, da hvert tegn læses. Dette kan være nyttigt, når brugeren skal se feedback fra delvist typede mønstre.

Hvis et mønster bliver ekkoet, men i sidste ende ikke svarer til hinanden, sendes tegnene til den frembragte proces. Hvis den fremstødte proces ekko dem, vil brugeren se tegnene to gange.-ekko er nok kun hensigtsmæssigt i situationer hvor brugeren usandsynligt ikke vil fuldføre mønsteret. Eksempelvis er følgende uddrag fra rftp, recursive-ftp scriptet, hvor brugeren bliver bedt om at indtaste ~ g, ~ p eller ~ l, for at få, sætte eller liste den aktuelle mappe rekursivt. Disse er så langt væk fra de normale ftp kommandoer, at brugeren næppe vil skrive ~ efterfulgt af noget andet, bortset fra fejlagtigt, i hvilket tilfælde vil de sandsynligvis bare ignorere resultatet alligevel.

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

Det-nobuffer flag sender tegn, der matcher det følgende mønster til udgangsprocessen som tegn læses.

Dette er nyttigt, når du ønsker at lade et program ekko tilbage mønsteret. For eksempel kan følgende bruges til at overvåge, hvor en person ringer (et Hayes-stilmodem). Hver gang "atd" ses, logger scriptet resten af ​​linjen.

proc lognumber {} {interaktiv -nobuffer -re "(. *) r" return sætter $ log "urformat klok sekunder: opkaldt $ interact_out (1 streng)"} interagere -nobuffer "atd" lognummer

I løbet afinteragere , tidligere brug aflog_user ignoreres. I særdeleshed,interagere vil tvinge dens output til at blive logget (sendt til standard output), da det formodes at brugeren ikke ønsker at interagere blindt.

Det-o flag forårsager, at følgende nøglelegempar anvendes til udgangen af ​​den aktuelle proces. Dette kan f.eks. Være nyttigt, når du beskæftiger dig med værter, der sender uønskede tegn under en telnet-session.

Som standard,interagere Forventer, at brugeren skriver stdin og læser stdout afForventer behandle sig selv. Det-u flag (for "bruger") gørinteragere kig efter brugeren som den proces, der er navngivet af dens argument (som skal være et fremstødt id).

Dette tillader to ikke-relaterede processer at blive sammenføjet uden at bruge en eksplicit sløjfe. For at hjælpe med fejlsøgning, Forvent diagnostik altid gå til stderr (eller stdout for visse logging og debugging oplysninger). Af samme grund ertolk kommando vil læse interaktivt fra stdin.

F.eks. Opretter følgende fragment en loginproces. Derefter ringer den til brugeren (ikke vist), og slutter de to sammen. Selvfølgelig kan enhver proces erstattes af login. En skal, for eksempel, ville tillade brugeren at arbejde uden at levere en konto og et kodeord.

spawn_id spawn tip modem # ring tilbage til bruger # forbinde bruger for at logge ind interaktive -u $ login

Hvis du vil sende output til flere processer, skal du liste hver spawn id-liste forudindstillet af a-produktion flag. Input for en gruppe af output gyde ids kan bestemmes af en gyde id liste præfaced af a-inputtet flag. (Begge-inputtet og-produktion kan tage lister i samme form som-jeg flag iforventer kommando, bortset fra at any_spawn_id ikke er meningsfuld iinteragere .) Alle følgende flag og strenge (eller mønstre) gælder for denne indgang, indtil et andet -indgangsflag vises. Hvis nej-inputtet kommer til syne,-produktion indebærer "-indgang $ user_spawn_id -output". (Ligeledes med mønstre, der ikke har-inputtet .) Hvis en-inputtet er angivet, det tilsidesætter $ user_spawn_id. Hvis et sekund-inputtet er angivet, det tilsidesætter $ spawn_id. Ekstra-inputtet flag kan angives.

De to implicitte input behandler standard til at have deres output angivet som $ spawn_id og $ user_spawn_id (i omvendt). Hvis en-inputtet flag vises med nr-produktion flag, tegn fra denne proces kasseres.

Det-jeg flag introducerer en erstatning for den nuværende spawnid når ingen andre-inputtet eller-produktion flag anvendes. A -i flag indebærer et -o flag.

Det er muligt at ændre de processer, der interageres med ved hjælp af indirekte spawnys. (Indirekte spawnys er beskrevet i afsnittet om forventningskommandoen.) Indirekte spawnys kan angives med -i, -u, -input eller -output-flag.

tolk args

får brugeren til at blive interaktivt bedt omForventer og Tcl kommandoer. Resultatet af hver kommando udskrives.

Handlinger som f.ekspause ogBlive ved forårsage kontrolstrukturer (dvs.til , proc ) at opføre sig på den sædvanlige måde. ImidlertidVend tilbage får tolk til at vende tilbage til sin opkalder, mensinter_return årsagertolk at give et retur i sin opkalder. For eksempel, hvis "proc foo" kaldestolk som derefter udførte handlingeninter_return , proc foo ville vende tilbage. Enhver anden kommando forårsagertolk at fortsætte med at anmode om nye kommandoer.

Som standard indeholder prompten to heltal. Det første heltal beskriver dybden af ​​evalueringsstakken (dvs. hvor mange gange Tcl_Eval er blevet kaldt). Det andet heltal er Tcl historieidentifikatoren. Prompten kan indstilles ved at definere en procedure kaldet "prompt1", hvis returværdi bliver den næste prompt. Hvis en erklæring har åbne citater, parener, seler eller parentes, udstedes en sekundær prompt (som standard "+>") på newline. Den sekundære prompt kan indstilles ved at definere en procedure kaldet "prompt2".

I løbet aftolk , kogte tilstand bruges, selvom den, der ringer op, brugte rå tilstand.

Hvis stdin er lukket,tolk vil returnere medmindre-eof flag bruges, i hvilket tilfælde det efterfølgende argument er påberåbt.

log_file args -a fil

Hvis et filnavn er angivet,logfil vil optage et transkript af sessionen (begynder på det tidspunkt) i filen.logfil vil stoppe optagelsen, hvis der ikke gives noget argument. Enhver tidligere logfil er lukket.

I stedet for et filnavn kan en Tcl-filidentifikation leveres ved at bruge-åben eller-leaveopen flag. Dette ligner denspawn kommando. (Sespawn for mere info.)

Det-en flag tvinger output til at blive logget, der blev undertrykt aflog_user kommando.

Som standard erlogfil kommando tilføjer til gamle filer snarere end at afkorte dem, for nemheds skyld, at de kan slå af og til flere gange i en session. For at afkorte filer skal du bruge-noappend flag.

Det-info flag forårsager log_file for at returnere en beskrivelse af de seneste ikke-info-argumenter givet.

log_user-info | 0 | 1

Som standard logges send / forvent dialogen til stdout (og en logfil, hvis den er åben). Logningen til stdout er deaktiveret med kommandoen "log_user 0" og genaktiveret af "log_user 1". Logning til logfilen er uændret.

Det-info flag forårsager log_user at returnere en beskrivelse af de seneste non-info argumenter givet.

match_max -d -i spawn_id størrelse

definerer størrelsen af ​​bufferen (i byte), der anvendes internt afforventer . Med nr størrelse argument, den aktuelle størrelse returneres.

Med-d flag er standardstørrelsen indstillet. (Den oprindelige standard er 2000.) Med-jeg flag er størrelsen indstillet til det navngivne id-id, ellers er det indstillet til den aktuelle proces.

overlay - # spawn_id - # spawn_id … program args

henretter "program args "i stedet for den aktuelleForventer program, som afslutter. Et bare bindestreg argument tvinger en bindestreg foran kommandoenavnet som om det var en login shell. Alle spawn_ids er lukket med undtagelse af de navngivne som argumenter. Disse er kortlagt på de navngivne filidentifikatorer.

Spawn_ids er kortlagt til filidentifikatorer for det nye program at arve. For eksempel kører følgende linje skak og tillader det at blive styret af den nuværende proces - siger en skakmaster.

overlay -0 $ spawn_id -1 $ spawn_id -2 $ spawn_id skak

Dette er mere effektivt end "interagere -u", men det ofrer evnen til at gøre programmeret interaktion sidenForventer processen er ikke længere i kontrol.

Bemærk, at der ikke er nogen styrende terminal. Således fungerer programmer, der gør jobkontrol (skaller, login osv.), Hvis du afbryder eller genindlæser standardindgangen, ikke fungerer korrekt.

paritet -d -i spawn_id værdi

definerer hvorvidt paritet skal bevares eller fjernes fra udgangsproduktionen af ​​udbredte processer. Hvis værdi er nul, paritet er strippet, ellers er den ikke strippet. Med nr værdi argument, den aktuelle værdi returneres.

Med-d flag er standardparitetsværdien indstillet. (Den oprindelige standard er 1, dvs. paritet er ikke strippet.) Med-jeg flag er paritetsværdien indstillet til det navngivne id-id, ellers er den indstillet til den aktuelle proces.

remove_nulls -d -i spawn_id værdi

definerer, hvorvidt nuller bevares eller fjernes fra udgangsprocessen af ​​sprængte processer før mønstermatchning eller lagring i variablen expect_out eller interact_out . Hvis værdi er 1, nuller fjernes. Hvis værdi er 0, nulls fjernes ikke. Med nr værdi argument, den aktuelle værdi returneres.

Med-d flag er standardværdien indstillet. (Den oprindelige standard er 1, dvs. nulls fjernes.) Med-jeg flag, er værdien indstillet for det navngivne id-id, ellers er den indstillet til den aktuelle proces.

Hvorvidt nuller fjernes, eller ejForventer vil optage null bytes til log og stdout.

send -flags streng

sender snor til den aktuelle proces. For eksempel kommandoen

send "hej verden r"

sender tegnene, h e l l o w l l d til den aktuelle proces. (Tcl indeholder en printf-lignende kommando (kaldetformat ) som kan bygge vilkårligt komplekse strenge.)

Tegn sendes straks, selvom programmer med line-bufferede indtastninger ikke læser tegnene, før et returkarakter er sendt. Et returkarakter er betegnet " r".

Det-- flag tvinger det næste argument til at blive fortolket som en streng snarere end et flag.Enhver streng kan foregå med "-" om det faktisk ser ud som et flag. Dette giver en pålidelig mekanisme til at angive variable strenge uden at blive opsnappet af dem, der ved et uheld ser ud som flag. (Alle strenge der starter med "-" er forbeholdt fremtidige muligheder.)

Det-jeg flag erklærer at strengen er sendt til den navngivne spawnid. Hvis spawn_id er user_spawn_id , og terminalen er i rå tilstand, oversættes nye linjer i strengen til retur-newline-sekvenser, så de vises som om terminalen var i kogt tilstand. Det-rå flag deaktiverer denne oversættelse.

Det-nul flag sender null tegn (0 bytes). Som standard sendes et null. Et helt tal kan følge-nul for at angive, hvor mange nuller der skal sendes.

Det-pause flag genererer en pause tilstand. Dette giver kun mening, hvis spawn-id refererer til en tty-enhed, der åbnes via "spawn -open". Hvis du har skabt en proces som tip, bør du bruge tip's konvention til at generere en pause.

Det-s flag tvinger output til at blive sendt "langsomt", således undgå den fælles situation, hvor en computer outtypes en input buffer, der var designet til et menneske, der aldrig ville outtype den samme buffer. Denne udgang styres af værdien af ​​variablen "send_slow", som tager en toelementliste. Det første element er et helt tal, der beskriver antallet af byte, der skal sendes atomvist. Det andet element er et reelt tal, der beskriver antallet af sekunder, hvorved atomforsendelsen skal adskilles. For eksempel vil "sæt send_slow {10 .001}" tvinge "send -s" for at sende strenge med 1 millisekund mellem hver 10 tegn, der sendes.

Det-h flag tvinger output til at blive sendt (noget) som en menneskelig faktisk skrive. Menneskelige forsinkelser forekommer mellem tegnene. (Algoritmen er baseret på en Weibull-distribution, med ændringer, der passer til denne særlige applikation.) Denne udgang styres af værdien af ​​variablen "send_human", som tager en femelementliste. De to første elementer er en gennemsnitlig interarrival tid for tegn i sekunder. Den første bruges som standard. Den anden bruges til ordslutninger, for at simulere de subtile pauser, der lejlighedsvis opstår ved sådanne overgange. Den tredje parameter er et mål for variabilitet hvor .1 er ret variabel, 1 er rimelig variabel, og 10 er ret uændret. Ekstremiteterne er 0 til uendelig. De sidste to parametre er henholdsvis en minimums- og maksimal interarrival tid. Minimum og maksimum anvendes sidst og "klip" den endelige tid. Det ultimative gennemsnit kan være helt anderledes end det givne gennemsnit, hvis minimums- og maksimumsklip nok værdier.

Som et eksempel, emulerer følgende kommando en hurtig og konsekvent maskinskrivning:

sæt send_human {.1 .3 1 .05 2} send -h "Jeg er sulten. Lad os lave frokost."

mens følgende kan være mere passende efter en tømmermænd:

sæt send_human {.4 .4 .2 .5 100} send -h "Goodd party lash night!"

Bemærk, at fejl ikke simuleres, selvom du selv kan opsætte fejlkorrektionssituationer ved at indlejre fejl og rettelser i et send-argument.

Flagene til afsendelse af nulltegn, til afsendelse af pauser, til at tvinge langsom udgang og til human-stil-udgang er gensidigt eksklusive. Kun den sidst angivne vil blive brugt. Desuden nr snor argument kan angives med flagene for at sende null tegn eller pauser.

Det er en god ide at gå forud for den førstesende til en proces af enforventer. forventer vil vente på, at processen starter, menssende kan ikke. Især hvis den førstesende fuldføres inden processen begynder at løbe, risikerer du at få dine data ignoreret. I situationer, hvor interaktive programmer ikke giver nogen indledende prompt, kan du forudgåsende med en forsinkelse som i:

# For at undgå at give hackere tips om, hvordan man kan bryde ind, # kræver dette system ikke en ekstern adgangskode. # Vent i 5 sekunder for exec at fuldføre spawn telnet very.secure.gov sleep 5 send adgangskode r

exp_send er et alias for sende. Hvis du bruger Expectk eller en anden variant af Expect i Tk-miljøet,sende er defineret af Tk for et helt andet formål.exp_send er forudsat for kompatibilitet mellem miljøer. Lignende aliaser gives til andre Expects andre sendkommandoer.

send_error -flags streng

er ligesomsende , bortset fra at output sendes til stderr i stedet for den aktuelle proces.

send_log - streng

er ligesomsende , bortset fra at strengen kun sendes til logfilen (selogfil .) Argumenterne ignoreres, hvis ingen logfil er åben.

send_tty -flags streng

er ligesomsende , bortset fra at output sendes til / dev / tty snarere end den aktuelle proces.

send_user -flags streng

er ligesomsende , bortset fra at output sendes til stdout i stedet for den aktuelle proces.

sove sekunder

får scriptet til at sove i det givne antal sekunder. Sekunder kan være et decimaltal. Afbrydelser (og Tk-begivenheder, hvis du bruger Expectk) behandles, mens Expect sover.

spawn args program args

opretter en ny proces kører "program args ". Dens stdin, stdout og stderr er forbundet med Expect, så de kan læses og skrives af andreForventer kommandoer. Forbindelsen er brudt aftæt eller hvis selve processen lukker nogen af ​​filidentifikatorerne.

Når en proces startes afspawn , variablen spawn_id er sat til en deskriptor, der henviser til denne proces. Processen beskrevet af spawn_id betragtes som "nuværende proces ". spawn_id kan læses eller skrives, der rent faktisk giver jobkontrol.

user_spawn_id er en global variabel indeholdende en deskriptor, der refererer til brugeren. For eksempel, hvornår spawn_id er indstillet til denne værdi,forventer opfører sig somexpect_user .

.JEG error_spawn_id er en global variabel, der indeholder en deskriptor, der refererer til standardfejlen. For eksempel, hvornår spawn_id er indstillet til denne værdi,sende opfører sig somsend_error .

tty_spawn_id er en global variabel indeholdende en deskriptor, der refererer til / dev / tty. Hvis / dev / tty ikke eksisterer (f.eks. I et cron, ved eller batch script), så tty_spawn_id er ikke defineret. Dette kan testes som:

hvis {info vars tty_spawn_id} {# / dev / tty eksisterer} ellers {# / dev / tty eksisterer ikke # sandsynligvis i cron, batch eller script}

spawn returnerer UNIX proces id. Hvis der ikke opstår nogen proces, returneres 0. Variabelen spawn_out (slave, navn) er indstillet til navnet på pty slave device.

Som standard,spawn ekko kommandoenavnet og argumenterne. Det-noecho flag stopperspawn fra at gøre dette.

Det-console flag forårsager konsol output at blive omdirigeret til den frembragte proces. Dette understøttes ikke på alle systemer.

Interntspawn bruger en PTY, initialiseret på samme måde som brugerens TTY. Dette initialiseres yderligere, så alle indstillinger er "sane" (ifølge stty (1)). Hvis variablen stty_init er defineret, er det fortolket i stil med stotte argumenter som yderligere konfiguration. For eksempel vil "sæt stty_init raw" forårsage, at yderligere projicerede processer terminaler starter i rå tilstand.-nottycopy hopper over initialiseringen baseret på brugerens tty.-nottyinit hopper over den "sane" initialisering.

Normalt,spawn tager lidt tid til at udføre. Hvis du bemærker at gyde tager en betydelig mængde tid, er det sandsynligvis støder på ptys, der er kile. En række tests køres på ptys for at undgå sammenblandinger med vandrende processer. (Disse tager 10 sekunder pr. Kilde.) Running Expect med-d mulighed vil vise omForventer støder på mange ptys i ulige stater. Hvis du ikke kan dræbe de processer, som disse ptys er vedhæftet, er det kun din genoptagelse at genstarte.

Hvis program kan ikke opstå med succes, fordi exec (2) fejler (f.eks. når program findes ikke), vil en fejlmeddelelse blive returneret af den næsteinteragere ellerforventer kommando som om program havde kørt og produceret fejlmeddelelsen som output. Denne adfærd er en naturlig konsekvens af implementeringen afspawn . Internt gyt gafler, hvorefter den frembragte proces ikke har nogen måde at kommunikere med originalenForventer behandle undtagen ved kommunikation via spawnid.

Det-åben flag forårsager, at det næste argument fortolkes som en Tcl-filidentifikator (dvs. returneret afåben .) Hele id kan så bruges som om det var en fremstødt proces. (Filidentifikatoren skal ikke længere bruges.) Dette giver dig mulighed for at behandle rå enheder, filer og pipelines som frembragte processer uden at bruge en pty. 0 returneres for at indikere, at der ikke er nogen tilknyttet proces. Når forbindelsen til den frembragte proces er lukket, er det også Tcl-filidentifikatoren. Det-leaveopen flag ligner-åben bortset fra det-leaveopen får filidentifikatoren til at blive åben, selv efter at spawn-id er lukket.

Det-pty flag forårsager, at et dyr åbnes, men der er ikke nogen proces. 0 returneres for at indike