Skip to main content

Tikėtis Linux / Unix komandų instrukcijų ir pavyzdžių

Anonim

Tikėtis yra programa, pagal kurią kalbama apie kitas interaktyvias programas pagal scenarijų. Po scenarijaus "Tikėtis" žino, ko galima tikėtis iš programos ir koks teisingas atsakymas. Suprantama kalba užtikrina šakos ir aukšto lygio valdymo struktūras, norint nukreipti dialogą. Be to, vartotojas gali pageidauti kontroliuoti ir tiesiogiai bendrauti, o po to grįžti į scenarijų.

Expectk yra "Expect" ir "Tk" mišinys. Jis elgiasi taip, kaip Expect ir Tk noras. "Expect" taip pat gali būti naudojamas tiesiogiai C arba C ++ be Tcl.

Pavadinimas "Expect" gaunamas iš "uucp", kermit ir kitų modemų valdymo programų populiarintų siuntimo / laukimo sekų idėjos. Tačiau skirtingai nuo uucp, Expect yra apibendrinta, todėl ją galima paleisti kaip vartotojo lygio komandą su bet kokia programa ir užduotimi. Tikėtis, kad tuo pačiu metu galite kalbėtis su keliomis programomis.

Ką tik gali daryti

Pavyzdžiui, čia yra keletas dalykų, kuriuos gali tikėtis komanda:

  • Priežastis, kad jūsų kompiuteris gali skambinti jums atgal, kad galėtumėte prisijungti nemokėdami pokalbio.
  • Pradėkite žaidimą ir, jei optimali konfigūracija nerodoma, iš naujo paleiskite jį dar kartą), kol ji bus, o tada perleiskite valdymą.
  • Paleiskite fsck ir, atsakydami į savo klausimus, atsakykite "taip" arba "ne" arba suteikite kontrolę jums, remiantis iš anksto nustatytais kriterijais.
  • Prisijunkite prie kito tinklo ir automatiškai paimkite savo paštą, kad jis atrodytų taip, tarsi jis iš pradžių buvo išsiųstas į jūsų vietinę sistemą.
  • Perkelti aplinkos kintamuosius, dabartinį katalogą ar bet kokią informaciją per rlogin, telnet, tip, su arba chgrp

Yra keletas priežasčių, kodėl korpusas negali atlikti šių užduočių. Visi yra galimi tikėtinai.

Paprastai "Expect" yra naudinga paleisti bet kurią programą, kuri reikalauja sąveikos tarp programos ir vartotojo. Viskas, ko reikia, yra tai, kad sąveika gali būti apibūdinta programiškai. Tikėtis, kad vartotojas taip pat gali grąžinti valdymą, neužkertamas kelias kontroliuojamai programai. Panašiai vartotojas bet kuriuo metu gali grąžinti valdymą į scenarijų.

Naudojimas

Tikėtis skaito cmdfile komandų vykdymui sąrašą. Tikėtis gali būti naudojamas netiesiogiai sistemose, kurios palaiko #! pažymint scenarijų kaip vykdomąjį ir sudarančios pirmąją scenarijaus eilutę:

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

Žinoma, kelias turi tiksliai aprašyti, kur laukia gyvenimo. / usr / local / bin yra tik pavyzdys.

"-C" vėliava priskiria komandą, kuri turi būti vykdoma prieš bet kurį iš scenarijų. Komandą reikia nurodyti, kad nebūtų suskaidyta apvalkalo. Ši parinktis gali būti naudojama kelis kartus. Keli komandos gali būti vykdomos su viena -c, atskiriant juos kabliataškiais. Komandos vykdomi tokiu būdu, kokiu jie rodomi. Naudojant Expectk, ši parinktis nurodoma kaip -command.

"-D" vėliava leidžia atlikti tam tikrą diagnostikos išvestį, kuris visų pirma nurodo komandų vidinę veiklą, pvz., Tikėtiną ir sąveikaujančią. Ši vėliavėlė turi tokį patį efektą, kaip ir "exp_internal 1" "Tikėtino scenarijaus" pradžioje, taip pat spausdinama "Tikėtino" versija.

"D" žymė įgalina interaktyvų debugerį. Turėtų sekti sveika vertė. Derinimo priemonė bus kontroliuojama prieš kitą Tcl procedūrą, jei vertė nėra nulinė arba jei paspaudžiamas ^ C arba pasiekiamas pertraukimo taškas arba kita tinkama derinimo programa pasirodo scenarijuje. Naudojant Expectk, ši parinktis nurodyta kaip -Derinti.

"-F" vėliava nurodo failą, iš kurio galima skaityti komandas. Vėliava yra neprivaloma, nes ji naudinga tik naudojant #! žymėjimas, kad kiti argumentai gali būti pateikti komandinėje eilutėje. Naudojant Expectk, ši parinktis nurodoma kaip -file.

Pagal numatytuosius nustatymus komandų failas yra skaitomas į atmintį ir vykdomas visas. Retkarčiais pageidautina vienu metu skaityti failus iš vienos eilutės. Tam, kad priversti savavališkus failus tvarkyti tokiu būdu, naudokite -b vėliavą. Naudojant Expectk, ši parinktis nurodoma kaip -buffer.

Jei eilutė "-" pateikiama kaip failo pavadinimas, vietoj to reikia skaityti standartinį įvestį. Naudokite "./-" skaityti iš failo, kurio pavadinime yra "-".

"-I" žyma sukelia tikėtis, kad interaktyviai pakviesti komandas, o ne skaityti juos iš failo. Pasikalbėjimas nutraukiamas per komandą išvykimo ar EOF. Įsitikinama, kad žyma-i yra, jei nenaudojama nei komandų failo, nei-c. Naudojant Expectk, ši parinktis nurodoma kaip -interactive.

- gali būti naudojamas norint nustatyti parinkčių pabaigą. Tai naudinga, jei norėsite perduoti tokį variantą panašų argumentą į savo scenarijų, nebent jis būtų interpretuojamas pagal "Expect". Tai gali būti naudingai įdėta į #! kad išvengtumėte jokio "Expect" vertikalaus aiškinimo. Pavyzdžiui, toliau pateikiami originalūs argumentai, įskaitant kintamojo scenarijaus pavadinimą argv .

#! / usr / local / bin / expect -

Atkreipkite dėmesį, kad pridedant argumentus prie #! Reikia laikytis įprastų getopt (3) ir execve (2) taisyklių. linija

Failas $ exp_library / expect.rc automatiškai gaunamas, jei yra, nebent naudojama -N ženklas. (Kai naudojatės Expectk, ši parinktis nurodyta kaip -NORC.) Iš karto po to failas ~ / .expect.rc automatiškai gaunamas, nebent naudojamas "-n" ženklas. Jei aplinkos kintamasis DOTDIR yra apibrėžtas, jis laikomas aplanku ir .expect.rc skaitomas iš ten. Naudojant Expectk, ši parinktis nurodoma kaip -norc.Šis tiekimas įvyksta tik atlikus bet kurias -c vėliavas.

-v sukelia tikisi spausdinti savo versijos numerį ir išeiti. "Expectk" atitinkama vėliava, kuri naudoja ilgus vėliavų pavadinimus, yra -versija.

Pasirinktiniai args yra sudaryti į sąrašą ir saugomi kintamame pavadinimu argv ir. argc yra inicializuotas pagal argv ilgį.

Argv0 apibrėžiamas kaip scenarijaus ar dvejetainės pavadinimas, jei scenarijus nenaudojamas. Pavyzdžiui, toliau išvardyti scenarijaus vardai ir pirmi trys argumentai:

send_user "$ argv0 lrange $ argv 0 2 n"

Komandos

Expect naudoja įrankio komandų kalbą. "Tcl" teikia kontrolinį srautą (jei pertrauka), išraiškos vertinimą ir keletą kitų funkcijų, tokių kaip recircijos ir procedūros apibrėžimas. Komandos, naudojamos čia, bet neapibrėžtos (set, if, exec) yra Tcl komandos. Expect palaiko papildomas komandas. Jei nenurodyta kitaip, komandos grąžina tuščią eilutę.

Komandos yra išvardytos abėcėlės tvarka, kad būtų galima greitai rasti. Tačiau naujiems vartotojams gali būti lengviau pradėti skaitydami nerodymo, siuntimo, numatymo ir sąveikos aprašus tokia tvarka.

uždaryti -slausa -onexec 0 | 1 -i spawn_id

uždaro ryšį su dabartiniu procesu. Dauguma interaktyvių programų aptiks EOF savo stdin ir išvykstant; taip Uždaryti paprastai pakanka ir proceso nužudymui. "-I" vėliava pareiškia, kad procesas uždarytas, atitinkantis pavadintą spawn_id.

Tiek tikėtis, tiek ir sąveikauja nustatys, kada dabartinis procesas baigiasi, ir netiesiogiai uždaryti, bet jei jūs nužudysite procesą, tarkim, "exec kill $ pid", turėsite aiškiai paskambinti uždaryti.

"-Onexec" vėliava nustato, ar nykščio id yra uždarytas bet kokiuose naujuose procesuose arba procese yra perdengtas. Jei norite palikti spawn id atvirą, naudokite reikšmę 0. Ne nulinė sveika reikšmė verčia spawn uždaryti bet kokiuose naujuose procesuose.

Valdovų vėliava uždaro vergą, susietą su spawn id. Kai jungtis yra uždaryta, vergas taip pat automatiškai uždaromas, jei jis vis dar atidarytas.

Nesvarbu, ar ryšys uždarytas netiesiogiai ar aiškiai, turėtumėte skambinti laukti, kol išvalysite atitinkamą branduolio proceso lizdą. Uždaryti komandą nereikia laukti, nes nėra garantijos, kad proceso prisijungimo uždarymas leis jam išeiti.

derinti -now 0 | 1

kontroliuoja "Tcl" debugerį, leidžiantį jums pereiti per pareiškimus ir nustatyti pertraukties taškus.

Nesant jokių argumentų, jei debugeris neveikia, grąžinamas 1, kitaip grąžinamas 0.

Su 1 argumentu paleidžiamas debugeris. Su 0 argumentu debugeris yra sustabdytas. Jei iki 1 argumento yra "-now flag", debugeris nedelsiant paleidžiamas. Priešingu atveju, debugeris bus paleistas naudojant kitą "Tcl" pareiškimą.

Derinimo komanda nepakeičia spąstų. Palyginkite tai su "Expect" su "-D" vėliava.

Atjungimo komanda atsijungia nuo terminalo pagaminto proceso. Jis tęsiasi fone. Procesui suteikiama proceso grupė. Standartinis I / O nukreipiamas į / dev / null.

Toliau pateiktame fragmente naudojamas atjungimas, kad fonas toliau tęstų scenarijų.

jei {fork! = 0} išjunkite atjungimą. . .

Šis scenarijus nuskaito slaptažodį ir paleidžia programą kas valandą, kuri reikalauja slaptažodžio kiekvieną kartą paleidus. Šis scenarijus pateikia slaptažodį, kad jį turėtumėte įvesti tik vieną kartą.

send_user "slaptažodis? " expect_user -re "(. *) n" už {} 1 {} {if {fork! = 0} (miegoti 3600; tęsti) atjungti spawn priv_prog tikėtis Slaptažodis: siųsti "$ expect_out 1, eilutė) ". . . išeiti}

Prieiga prie atsijungimo naudojant apvalkalo asinchroninį proceso funkciją (&) yra ta, kad tikėtis gali išsaugoti terminalo parametrus prieš atjungiant, o vėliau pritaikyti juos naujiems ptys. Naudojant "&", "Expect" nėra galimybės perskaityti terminalo parametrus, nes terminalas jau yra atjungtas iki laiko, kurį laukia gaunama kontrolė.

išeiti -opts statusas

sukelia tikėtis išeiti ar kitaip pasiruošti tai padaryti.

The -onexit vėliava sukelia kitą argumentą, kuris bus naudojamas kaip išeities tvarkyklė. Be argumento, grąžinamas dabartinis išvesties tvarkyklė.

The -išėjimo nėra vėliavos priežastys Laukti pasiruoškite išeiti, o ne stenkitės faktiškai grįžti į operacinę sistemą. Nustatomas vartotojo apibrėžtas išėjimo tvarkiklis paleidžiamas taip pat, kaip ir "Expect" vidaus tvarkytojai. Daugiau nebesitikima, kad komandos būtų vykdomos. Tai naudinga, jei naudojate tikėtis su kitais Tcl plėtiniais. Dabartinis vertėjas (ir pagrindinis langas, jei Tk aplinkoje) lieka taip, kad kiti Tcl plėtiniai galėtų išvalyti. Jei tikitės išeiti dar vadinamas (tačiau tai gali atsitikti), tvarkytojai nebus pakartojami.

Pasibaigus, visos jungtys su sukurtais procesais yra uždaryti. Užkrėtimo procesai bus aptikti kaip EOF. išeiti nesiima jokių kitų veiksmų, neviršijančių įprastos _exit (2) procedūros. Taigi, sugeneruoti procesai, kurie netikrina EOF, gali tęstis. (Įvairios sąlygos yra svarbios norint nustatyti, pvz., Kokie signalai bus siunčiami atsiradusiam procesui, tačiau jie priklauso nuo sistemos, dažniausiai dokumentuojami išėjimo metu (3).) Nepagrįsti procesai, kurie ir toliau bus vykdomi, bus paveldėti init.

statusas (arba 0, jei nenurodyta) grąžinamas kaip išeities statusas Laukti . išeiti yra netiesiogiai įvykdytas, jei pasiekiamas scenarijaus pabaiga.

exp_continue -continue_timer

Komanda exp_continue leidžia tikėtis save toliau vykdyti, o ne grįžti, kaip tai paprastai. Pagal nutylėjimą exp_continue iš naujo nustato laikmatis. The -continue_timer vėliava neleidžia vėl paleisti laikmatį. (Pamatyti tikėtis Daugiau informacijos.)

exp_internal -f file vertė

sukelia papildomas komandas siųsti vidinę diagnostikos informaciją Laukti į stderr jei vertę yra nulinis. Ši išvestis yra išjungta, jei vertę yra 0. Diagnostikos informacija apima visus gautus ženklus ir kiekvieną bandymą suderinti dabartinę išvestį su modeliais.

Jei neprivaloma failas pateikiama, visa normalioji ir derinimo išvestis įrašoma į tą failą (neatsižvelgiant į vertę ) Bet koks ankstesnis diagnostikos išvesties failas yra uždarytas.

The -info vėliava exp_internal grąžina naujausių neinformuojamų argumentų aprašymą.

exp_open args -i spawn_id

grąžina Tcl failo identifikatorių, kuris atitinka pradinį spawn id. Tada failo identifikatorius gali būti naudojamas taip, tarsi jį atidarė Tcl atviras komanda (Nepavyko naudoti spawn id laukti neturėtų būti įvykdytas.

The -leaveopen vėliava palieka neršto id atvirą prieigai per "Expect" komandas. A laukti turi būti užpildytas spawn id.

exp_pid -i spawn_id

grąžina proceso ID, atitinkantį šiuo metu sukurtą procesą. Jei -i vėliava yra naudojama, pid grąžinama atitinka nurodyto spawn id.

exp_send

yra slapyvardis siųsti .

exp_send_error

yra slapyvardis send_error .

exp_send_log

yra slapyvardis send_log .

exp_send_tty

yra slapyvardis siųsti_tty .

exp_send_user

yra slapyvardis send_user .

exp_version -exit versija

yra naudinga siekiant užtikrinti, kad scenarijus yra suderinamas su dabartine tikėtinos versijos versija.

Nesant argumentų, dabartinė versija Laukti grąžinamas. Ši versija gali būti užkoduota jūsų scenarijuje. Jei iš tikrųjų žinote, kad nesinaudojate naujausių versijų funkcijomis, galite nurodyti ankstesnę versiją.

Versijos susideda iš trijų skaičių, atskirtų taškais. Pirmasis yra didžiausias skaičius. Scripts parašytas versijoms Laukti su kitokiu dideliu skaičiumi beveik neabejotinai neveiks. exp_version grąžina klaidą, jei pagrindiniai numeriai nesutampa.

Antrasis yra nedidelis skaičius. Skriptai, parašyti versijai su mažesne nei dabartinės versijos versija, gali priklausyti nuo kai kurių naujų funkcijų ir gali neveikti. exp_version grąžina klaidą, jei pagrindiniai skaičiai atitinka, tačiau mažesnio scenarijaus numeris yra didesnis nei paleidimo Laukti .

Trečia, yra numeris, kuris neturi jokios versijos palyginimo. Tačiau jis didinamas, kai Laukti programinės įrangos platinimas yra pakeistas bet kokiu būdu, pavyzdžiui, papildomais dokumentais arba optimizavimu. Kiekvienai naujajai nepilnametei versija yra nustatoma iš naujo.

Su -exit vėliava Laukti spausdina klaidą ir išeina, jei versija yra pasenusi.

tikėtis -opts pat1 body1 … -opts patn bodyn

Laukia, kol vienas iš modelių neatitinka pagamintos proceso rezultatų, praėjus tam tikram laikotarpiui arba matyti failo pabaiga. Jei paskutinė įstaiga yra tuščia, ji gali būti praleista.

Naujausius modelius tikėtis prieš komanda yra netiesiogiai naudojama prieš kitus modelius. Naujausius modelius tikimasi po to komanda yra netiesiogiai naudojama po bet kokių kitų modelių.

Jei argumentai visai tikėtis teiginys reikalauja daugiau nei vienos eilutės, visi argumentai gali būti "pritvirtinti" į vieną, kad nebūtų nutraukta kiekviena eilutė su grįžtamojo brūkšniu. Šiuo vienu atveju, įprasti Tcl pakeitimai įvyks nepaisant liemenių.

Jei modelis yra raktinis žodis eof , atitinkama įstaiga vykdoma failo pabaigoje. Jei modelis yra raktinis žodis laikas baigėsi , atitinkama įstaiga vykdoma po laiko tarpio. Jei nenaudojamas "timeout" raktinis žodis, numanomas nulinis veiksmas vykdomas pasibaigus taimatui. Numatytasis laiko tarpas yra 10 sekundžių, tačiau gali būti nustatytas, pavyzdžiui, iki 30, pagal komandą "set timeout 30". Begalinis laiko tarpas gali būti žymimas -1 reikšme. Jei modelis yra raktinis žodis numatytas , atitinkama įstaiga vykdoma po laiko tarpo arba pabaigos bylos.

Jei modelis sutampa, tuomet vykdomas atitinkamas kūnas. tikėtis grąžina kūno rezultatą (arba tuščią eilutę, jei nėra modelio). Jei įvairaus pobūdžio modeliai sutampa, pirmasis rodomas pirmasis naudojamas kūno pasirinkimui.

Kiekvieną kartą, kai gaunamas naujas produktas, jis yra lyginamas su kiekvienu modeliu, kuris yra sąraše. Taigi, galite patikrinti, ar nėra atitikties, nes paskutinį modelį garantuojote, kad jis pasirodys, pvz., Greita. Tais atvejais, kai nėra greito, turite naudoti laikas baigėsi (kaip ir jūs, jei bendraujate rankiniu būdu).

Temos yra nurodytos trimis būdais. Pagal numatytuosius nustatymus, modeliai yra nurodyti kaip su Tcl styginių rungtynės komanda (Tokie modeliai taip pat panašūs į C-shell reguliarios išraiškos, paprastai vadinamos "glob" modeliais). The -gl vėliava gali būti naudojama apsaugoti modelius, kurie gali būti kitaip tikėtis vėliavos. Bet koks modelis, prasidedantis "-", turėtų būti apsaugotas tokiu būdu. (Visos eilutės, prasidedančios "-", yra rezervuotos būsimoms parinktims.)

Pavyzdžiui, šis fragmentas ieškos sėkmingo prisijungimo. (Prisimink tai nutraukti yra prielaida, kad tai procedūra, apibrėžta kitur scenarijuje.)

tikėtis {busy {užimtas n; exp_continue) nepavyko nutraukti "netinkamo slaptažodžio" nutraukti laiko praleidimą nutraukti prisijungimą}

Citatos yra būtinos ketvirtajame rašte, nes jame yra erdvė, kuri kitaip atskirtų modelį nuo veiksmo.Su tokiu pačiu veiksmu (pvz., 3 ir 4) modeliai reikalauja iš naujo įrašyti veiksmus. Tai galima išvengti naudojant regexp stiliaus modelius (žr. Toliau). Daugiau informacijos apie pasaulinio stiliaus modelių kūrimą galite rasti "Tcl" vadovo.

Regexp stiliaus modeliai tęsiasi pagal Tcl sukurtą sintaksę regexp (santrumpa "reguliariosios išraiškos"). regexp modeliai pateikiami su vėliava -re . Ankstesnis pavyzdys gali būti perrašytas naudojant regexp kaip:

tikėtis {busy {užimtas n; exp_continue) -re "nepavyko | neteisingo slaptažodžio" nutraukti laiko praleidimą nutraukti prisijungti}

Abu tipų modeliai yra "neprilygstami". Tai reiškia, kad modeliai neturi atitikti visos eilutės, bet gali pradėti ir baigti rungtynes ​​bet kurioje eilutėje (tol, kol viskas atitinka). Naudokite ^, kad atitiktų eilutės pradžią, ir $, kad atitiktų pabaigą. Atkreipkite dėmesį, kad jei nelaukite eilutės pabaigos, jūsų atsakymai gali lengvai pasibaigti eilutės viduryje, nes jie yra pakartoti iš sukurto proceso. Nors vis dar gaminami teisingi rezultatai, produkcija gali atrodyti nenatūrali. Taigi, "$" naudojimas yra skatinamas, jei galite tiksliai apibūdinti simbolius eilutės pabaigoje.

Atkreipkite dėmesį, kad daugumoje redaktorių "^" ir "$" atitinka linijų pradžią ir pabaigą. Tačiau, nes tikimasi, kad jis nėra orientuotas į linijas, šie simboliai atitinka duomenų pradžią ir pabaigą (priešingai nei eilutės), kurios šiuo metu yra tikėtinas atitikimo buferis. (Taip pat žr. Toliau pateiktą užrašą apie "sistemos virškinimą.")

The -ex vėliava sukelia modelio atitikimą kaip "tikslią" eilutę. Nebuvo išaiškinta *, ^ ir tt (nors vis dar turi būti laikomasi įprastų TCL susitarimų). Tikslūs modeliai visada yra neprilygstami.

The -nokase vėliavėlė nurodo išvesties didžiąsias raides palyginti taip, lyg būtų mažosios raidės. Šablonas neturi įtakos.

Skaičiuojant išvesties duomenis, daugiau nei 2000 baitų gali priversti ankstesnius baitus būti "pamiršti". Tai gali būti pakeista funkcija match_max . (Atminkite, kad pernelyg didelės reikšmės gali sulėtinti modelio matricą.) Jei patlist yra full_buffer , atitinkama įstaiga vykdoma, jei match_max baitai buvo gauti ir jokių kitų modelių atitiko. Ar ne full_buffer raktažodis yra naudojamas, pamiršti simboliai rašomi expect_out (buferis).

Jei patlist yra raktinis žodis null , ir nuliniai leidžiami (per remove_nulls komanda), atitinkama įstaiga vykdoma, jei suderinamas vienas ASCII kodas 0. Neįmanoma suderinti 0 baitų per glob arba regexp modelius.

Pritaikius modelį (arba eof arba full_buffer), bet kokia atitikmena ir anksčiau nesuderinta išvestis išsaugoma kintamajame expect_out (buferis) . Kintamuosiuose įrašomi iki 9 regexp substring atitikmenų expect_out (1, eilutė) per expect_out (9 eilutė) . Jei -indeksai vėliava naudojama prieš modelį, pradžios ir pabaigos indeksus (tinkamoje formoje) lankstus ) iš 10 eilučių yra saugomi kintamuosiuose expect_out (X, start) ir expect_out (X, end) kur X yra skaitmuo, atitinka buferio antrinės eilutės poziciją. 0 nurodo eilutes, kurios atitiko visą modelį ir sukurtos globų modeliams bei regexp modeliams. Pavyzdžiui, jei procesas generuoja "abcdefgh n" rezultatą, rezultatas:

tikėtis "cd"

tarsi įvykdytų šie teiginiai:

set expec_out (0, string) cd set expec_out (buffer) abcd

ir "efgh n" lieka išvesties buferyje. Jei procesas generuoja išvestį "abbbcbkkkka n", rezultatas:

tikėtis -indeksai -re "b (b *). * (k +)"

tarsi įvykdytų šie teiginiai:

set expec_out (0, start) 1 set expec_out (0, end) 10 set expec_out (0, string) bbbcabkkkk set expec_out (1, start) 2 set expec_out (1, end) 3 set expec_out (1, string) bb set expec_out (2, start) 10 set expec_out (2, end) 10 set expec_out (2, string) k set expec_out (buffer) abbbcabkkkk

ir "a n" lieka išvesties buferyje. Modulis "*" (ir -re ". *") Išstumia išvesties buferį, neišskaičius jokio proceso išėjimo.

Paprastai suderinta išvestis yra atmestos iš "Expect" vidinių buferių. Tai gali užkirsti kelią įterpiant modelį su -transportavimas vėliava Ši vėliava yra ypač naudinga eksperimentuojant (ir eksperimentuojant ją galima sutrumpinti "-not" patogumui).

Nepavyko identifikacija, susieta su atitinkama išvestimi (arba eof arba full_buffer), yra saugoma expect_out (spawn_id) .

The -laikas baigėsi vėliava sukelia dabartinę tikėtiną komandą naudoti šią vertę kaip laiko tarpą, o ne naudoti laiko pabaigos kintamojo reikšmę.

Pagal numatytuosius nustatymus modeliai suderinami su dabartinio proceso rezultatais, tačiau -i vėliava nurodo, kad išvardyto spawn_id sąrašo išvestis turi būti suderinta su bet kokiais šiais modeliais (iki kitos -i ) "Spawn_id" sąrašas turėtų būti atskirtas atskirai nuo spawn_ids arba kintamasis, nurodantis tokį spawn_ids sąrašą.

Pvz., Šis pavyzdys laukia "connected" iš dabartinio proceso arba "occupy", "failed" arba "invalid password" iš spawn_id, pavadinto $ proc2.

tikėtis {-i $ proc2 užimtas {užimtas n; exp_continue) -re "nepavyko | neteisingo slaptažodžio" nutraukti laiko praleidimą nutraukti prisijungti}

Visuotinio kintamojo vertė any_spawn_id gali būti naudojamas, kad atitiktų modelius visiems spawn_ids, kurie yra pavadinti kartu su visais kitais -i vėliavos dabartinėje tikėtis komanda Spawn_id iš a -i vėliavėlė su nesusijęs modelio (t. y., po to tuoj pat kitą -i ) yra prieinamas visiems kitiems modeliams tikėtis su komanda susijusi any_spawn_id.

The -i vėliava taip pat gali pavadinti globalų kintamąjį, tokiu atveju kintamasis skaitomas neršto identifikatorių sąrašui. Kintamasis perskaičiuojamas kiekvieną kartą, kai jis pasikeičia. Tai suteikia galimybę pakeisti įvesties / išvesties šaltinį vykdant komandą. Tokiu būdu pateikiami spawn ids vadinami "netiesioginiais" spawn ids.

Tokie veiksmai kaip pertrauka ir Tęsti sukelti kontrolės struktūras (t. y. dėl , proc ) elgtis įprastu būdu. Komanda exp_continue leidžia tikėtis save toliau vykdyti, o ne grįžti, kaip tai paprastai.

Tai naudinga siekiant išvengti aiškių kilpų ar pakartotinių numatytų teiginių. Šis pavyzdys yra fragmentas, skirtas rlogin automatizuoti. The exp_continue vengia rašyti antrą tikėtis pareiškimas (norint vėl ieškoti eilutės), jei rlogin raginama įvesti slaptažodį.

n "send_user" n "siųsti" $ expect_out (1, eilutė) r "stty", "$ {{{{password: {stty -echo send_user" slaptažodis ($ user) $ hoste: "expect_user -re" (. *) echo exp_continue} neteisingas {send_user} neteisingas slaptažodis arba sąskaita n "exit" timeout {send_user "ryšys su $ hoste baigėsi n" exit} eof (send_user) ryšys su priimančiuoju nepavyko: $ expec_out (buferinis) "exit} pakartotinai sumokėti}

Pavyzdžiui, šis fragmentas gali padėti naudotojo vadove sąveikai, kuri jau yra visiškai automatizuota. Tokiu atveju terminalas įvedamas į žaliavinį režimą. Jei vartotojas paspaudžia "+", kintamasis padidinamas. Jei paspausite "p", į procesą bus išsiųstas keli grąžinimo būdai, galbūt tam tikru būdu sukimba, o "i" leidžia vartotojui sąveikauti su procesu, veiksmingai ištrindami scenarijaus valdymą. Kiekvienu atveju, exp_continue leidžia dabartinę tikėtis tęsti modelio suderinimą atlikus dabartinį veiksmą.

stty raw - ne "expect_after" (-i $ user_spawn_id "p" (siųsti " r r r"; exp_continue} "+" {incr foo; exp_continue} "i" {interact; exp_continue} "išeiti" išeiti}

Pagal nutylėjimą exp_continue iš naujo nustato laikmatis. Laikmatis nebus paleistas iš naujo, jei exp_continue yra vadinamas su -continue_timer vėliava

tikimasi po ateities expect_args

veikia identiškai tikėtis prieš išskyrus tai, kad abu modeliai tikėtis ir tikimasi po to gali rungtynės, tikėtis modelis yra naudojamas. Žr tikėtis prieš komanda daugiau informacijos.

expect_background expect_args

laikosi tų pačių argumentų kaip irtikėtis , tačiau jis grįžta iš karto. Modeliai yra išbandomi kiekvieną kartą, kai ateina nauja įvestis. Raštaslaikas baigėsi irnumatytas yra beprasmėexpect_background ir tyliai atsisakoma. Priešingu atveju,expect_background komanda naudojatikėtis prieš irtikimasi po to modeliai panašūstikėtis daro

Kadaexpect_background veiksmai yra vertinami, už tą patį spawn id pašalinimas iš anksto yra užblokuotas. Fono apdorojimas atblokuotas, kai veiksmas baigtas. Nors fono apdorojimas yra užblokuotas, tai galima padaryti (pirmojo plano)tikėtis to paties spawn id.

Neįmanoma įvykdytitikėtis o anexpect_background yra atrakintas.expect_background konkretaus spawn id yra ištrinamas, deklaruojant naują expect_background su ta pačia veisle id. Skelbiantisexpect_background be modelio pašalina nurodytą spawn id iš gebėjimo fone suderinti modelius.

laukti_prieš expect_args

laikosi tų pačių argumentų kaip irtikėtis , tačiau jis grįžta iš karto. Modelių veiksmų poros iš naujausiųtikėtis prieš su tuo pačiu spawn id yra netiesiogiai pridėtos prie bet kurios toliau nurodytostikėtis komandos. Jei modelis sutampa, jis laikomas tarsi jis būtų nurodytastikėtis pati komanda, ir susijusi institucija yra vykdoma atsižvelgiant įtikėtis komanda Jei modeliai iš abiejųtikėtis prieš irtikėtis gali rungtynės,tikėtis prieš modelis yra naudojamas.

Jei nenurodyta jokio modelio, nėrinių identifikatoriaus negalima patikrinti jokių modelių.

Nepaisant to, kad a-i vėliavatikėtis prieš modeliai atitinka neršto ID, apibrėžtą tuo metu, kaitikėtis prieš komanda buvo įvykdyta (ne tada, kai jos modelis suderintas).

Žyma -info vėliavatikėtis prieš grąžinti dabartines specifikacijas, kokius modelius jis atitiks. Pagal numatytuosius nustatymus pateikiama informacija apie dabartinį spawn id. Galima pateikti neprivalomą spaustuvių identifikacijos specifikaciją, kad būtų galima gauti informacijos apie šį veislės ID. Pavyzdžiui

expect_before-info-i $ proc

Gali būti suteikta bent viena spawn id specifikacija. Vėliavos-netiesioginis slopina tiesiogines spawn ids, kurios pateikiamos tik iš netiesioginių specifikacijų.

Vietoje spawn id specifikacijos vėliava "-all" sukels "-info" ataskaitą apie visus spawn ids.

Informacijos vėliavos išvestis gali būti pakartotinai naudojama kaip argumentas expect_before.

expect_tty expect_args

yra tarsitikėtis bet jis skaito simbolius iš / dev / tty (t. y. vartotojo paspaudimai). Pagal numatytuosius nustatymus skaitymas atliekamas paruoštu režimu. Taigi, linijos turi baigtis grįžti, kadtikėtis juos pamatyti. Tai gali būti pakeista perstty (žrstty komanda žemiau).

expect_user expect_args

yra tarsitikėtis bet jis skaito simbolius iš stdin (t. y. vartotojo paspaudimai). Pagal numatytuosius nustatymus skaitymas atliekamas paruoštu režimu. Taigi, linijos turi baigtis grįžti, kadtikėtis juos pamatyti.Tai gali būti pakeista perstty (žrstty komanda žemiau).

šakutė

sukuria naują procesą. Naujas procesas yra tiksli dabartinės kopijosLaukti procesas. Sėkmingaišakutė grąžina 0 į naują (vaiko) procesą ir grąžina proceso ID procesą vaiko procesui tėvų procesą. Dėl nesėkmės (visada dėl išteklių stokos, pvz., Apsikeitimo vietos, atminties)šakutė grąžina -1 į tėvų procesą ir nėra sukurtas vaiko procesas.

Forked procesai išeina perišeiti komanda, kaip ir pradinis procesas. Forked procesai leidžiama rašyti į žurnalo failus. Jei neveikia daugelio procesų derinimo ar prisijungimo, rezultatas gali būti paini.

Kai kuriuos pty diegimus gali supainioti keli skaitytojai ir rašytojai, netgi akimirksniu. Taigi, tai yra saugiausiašakutė prieš neršto procesus.

bendrauti string1 body1 … stringn bodyn

suteikia dabartiniam procesui valdyti naudotoją, taigi klaviatūros siunčiamos į dabartinį procesą ir grąžinamos dabartinio proceso stdout ir stderr.

Styginių kūno poros gali būti nurodytos kaip argumentai, tokiu atveju kūnas yra vykdomas, kai įvedama atitinkama eilutė. (Numatyta, eilutė nėra išsiųsta į dabartinį procesą.)vertėjas manoma, kad jei trūksta galutinio kūno.

Jei argumentai visaibendrauti teiginys reikalauja daugiau nei vienos eilutės, visi argumentai gali būti "pritvirtinti" į vieną, kad nebūtų nutraukta kiekviena eilutė su grįžtamojo brūkšniu. Šiuo vienu atveju, įprasti Tcl pakeitimai įvyks nepaisant liemenių.

Pavyzdžiui, ši komanda paleidžia sąveiką su šiomis eilučių kūno poromis: kai paspaudžiamas ^ Z,Laukti yra sustabdytas. (The-reset vėliava atkuria terminalo režimus.) Kai paspaudžiamas ^ A, vartotojas mato "jūs įvedėte" control-A ", o procesas išsiųstas ^ A. Kai paspaudus $, vartotojas mato datą. Kai paspaudus ^ C,Laukti išeina. Jei įvesta "foo", vartotojas mato "juostą". Kai paspauskite ~~, paspauskiteLaukti vertėjas veikia interaktyviai.

nustatyti CTRLZ 032 bendrauti {-reset $ CTRLZ {exec kill -STOP pid} 001 (send_user) įvedėte valdiklį-A n "; išsiųskite " 001") $ {send_user "data yra laikrodžio formatas laikrodžio sekundės."} 003 išeiti foo {send_user "juosta"} ~~}

Styginių kūno porose stygos sutampa tokia tvarka, kokia jie yra išvardyti kaip argumentai. Stygos, kurios iš dalies sutampa, nėra siunčiamos į dabartinį procesą, laukiant likusios ateities. Jei tada simboliai įvesti tokiu būdu, kad nebegalima būti tos pačios rungtynės, tik proceso dalis bus siunčiama tiktai eilutei, kuri negali pradėti kito atitikimo. Taigi, stygos, kurios yra dalinių atitikmenų substrings, gali atitikti vėliau, jei pradinės stygos, kurios bandė rungtyniauti, galiausiai nepavyks.

Pagal numatytuosius žodžius eilučių atitikimas yra tikslus be laukinių kortelių. (Priešingai,tikėtis komanda pagal nutylėjimą naudoja glob stiliaus modelius.)-ex vėliava gali būti naudojama apsaugoti modelius, kurie kitu atveju gali būti suderintibendrauti vėliavos. Bet koks modelis, prasidedantis "-", turėtų būti apsaugotas tokiu būdu. (Visos eilutės, prasidedančios "-", yra rezervuotos būsimoms parinktims.)

The-re vėliava verčia eilutę interpretuoti kaip regexp stiliaus modelį. Šiuo atveju kintamojoje laikomi atitinkami substringi interact_out panašiai kaip ir būdastikėtis saugo kintamojo produkcijątikėtis iš . The-indeksai vėliava yra panašiai palaikoma.

Raštaseof pateikia veiksmą, kuris vykdomas pasibaigus bylai. Atskiraseof modelis gali taip pat laikytis- išpardavimas vėliava, tokiu atveju ji yra suderinta, jei įrašant produkciją nustatomas eof. Numatytasiseof veiksmas yra "grįžti", kadbendrauti tiesiog grįžta į bet kurį EOF.

Raštaslaikas baigėsi pristato laiką (sekundėmis) ir veiksmą, kuris vykdomas po to, kai tam tikru laiku nėra skaitomų simbolių. Thelaikas baigėsi modelis taikomas visai neseniai nurodytam procesui. Nenustatytas numatytasis laikas. Specialusis kintamasis "timeout" (naudojamastikėtis komanda) neturi jokio poveikio šiam laikui.

Pvz., Šis teiginys gali būti naudojamas autologuojantiems vartotojams, kurie valandą neįvedė, bet vis dar dažnai gauna sisteminius pranešimus:

sąveikauti -input $ user_spawn_id timeout 3600 return-output $ nerwn_id

Jei modelis yra raktinis žodisnull , ir nuliniai leidžiami (perremove_nulls komanda), atitinkama įstaiga vykdoma, jei suderinamas vienas ASCII kodas 0. Neįmanoma suderinti 0 baitų per glob arba regexp modelius.

Ankstyvas modelis su vėliava-aš rašau sukelia kintamąjį interact_out (spawn_id) kuris turi būti nustatytas į spawn_id, kuris atitinka modelį (arba eof).

Tokie veiksmai kaippertrauka irTęsti sukelti kontrolės struktūras (t. y.dėl , proc ) elgtis įprastu būdu. Tačiaugrįžti sukelia sąveikauti, kad grįžtų į savo skambinančiojo, norsinter_return priežastysbendrauti sukelti grįžimą savo skambinančiojo. Pavyzdžiui, jei "proc foo" vadinamasbendrauti kuris tada įvykdė veiksmąinter_return , proc foo grįš. (Tai reiškia, kad jeibendrauti skambučiaivertėjas interaktyviai rašydamigrįžti sukels sąveiką tęsti, ointer_return sukels sąveiką, kad sugrįžtų į savo skambintoją.)

Perbendrauti , žalias režimas naudojamas, kad visi simboliai būtų perkelti į dabartinį procesą.Jei dabartinis procesas nesulaiko darbo valdymo signalų, jis sustabdomas, jei siunčiamas stabdymo signalas (pagal nutylėjimą ^ Z). Jei norite iš naujo paleisti, išsiųskite tęsti signalą (pvz., "Nužudyti -CONT"). Jei tikrai norite nusiųsti SIGSTOP tokį procesą (pagal ^ Z), pirmiausia apsvarstykite neršimą csh ir paleiskite programą. Kita vertus, jei norite nusiųsti SIGSTOP įLaukti pats, pirmojo pokalbio vertėjas (galbūt naudodamas pabraukimo simbolį), tada paspauskite ^ Z.

Styginių kūno poros gali būti naudojamos kaip stenograma, siekiant išvengti, kad reikia įvesti vertėją ir vykdyti komandas interaktyviai. Ankstesnio terminalo režimas naudojamas, kai vykdomas styginių kūno poros kūnas.

Greičio atveju veiksmai vykdomi žaliaviniu režimu pagal nutylėjimą. The-reset vėliavėlė iš naujo nustato terminalą į režimą, kurį jis turėjo anksčiaubendrauti buvo įvykdytas (visada paruoštas režimas). Atkreipkite dėmesį į tai, kad simboliai, įvestos, kai įjungiamas režimas, gali būti prarasti (gaila terminalų tvarkyklės funkcija kai kuriose sistemose). Vienintelė priežastis naudoti-reset yra, ar jūsų veiksmas priklauso nuo paruošto režimo veikimo.

The-echo vėliava siunčia simbolius, kurie atitinka šį modelį, atgal į procesą, kuris juos sukūrė, kai skaitomas kiekvienas simbolis. Tai gali būti naudinga, kai vartotojas turi matyti iš dalies įvestų modelių atsiliepimus.

Jei modelis persijungia, bet galiausiai neatitinka, simboliai siunčiami į sukurtą procesą. Jei atsiradęs procesas juos perkaina, vartotojas du kartus pamatys simbolius.-echo greičiausiai tik tinka situacijose, kai vartotojas vargu ar neužpildys modelio. Pavyzdžiui, ištrauka yra iš rftp, rekursyvo-ftp scenarijaus, kur naudotojas raginamas įvesti ~ g, ~ p arba ~ l, gauti reikiamą katalogą, įdėti jį ar į jį į sąrašą. Tai yra taip toli nuo įprastų ftp komandų, kad vartotojui greičiausiai netyčia įvesti ~ ir nieko kito, išskyrus klaidingą, tokiu atveju jie vis tiek ignoruoja rezultatą.

bendrauti {-echo ~ g (getcurdirectory 1) -echo ~ l (getcurdirectory 0) -echo ~ p (putcurdkeyory}}

The-puolikas vėliava siunčia simbolius, kurie atitinka šį modelį į išvesties procesą, kai skaitmenys skaitomi.

Tai naudinga, kai norite leisti programai atkurti modelį. Pavyzdžiui, toliau nurodyta informacija gali būti naudojama stebint, kur asmuo yra rinkęs numerį ("Hayes" stiliaus modemas). Kiekvieną kartą, kai matysite "atd", scenarijus užregistruos likusią eilutės dalį.

proc lognumber {} {interact -nobuffer -re "(. *)" return returns puts $ log "clock format clock seconds: dialed $ interact_out (1, string)" interact -nobuffer "atd" lognumber

Perbendrauti , ankstesnis naudojimaslog_user yra ignoruojamas. Visų pirmabendrauti priverstų savo išvestį prisijungti (išsiųstas į standartinę išvestį), nes manoma, kad vartotojas nenori aklai sąveikauti.

The-o vėliava sukelia bet kokias šias raktų kūno poras, kurios turi būti taikomos dabartinio proceso išėjimui. Tai gali būti naudinga, pavyzdžiui, bendraujant su kompiuteriais, kurie siunčia nepageidaujamus simbolius Telnet sesijos metu.

Pagal nutylėjimąbendrauti tikisi, kad vartotojas turi rašyti stdin ir skaityti stdout išLaukti pats procesas. The-u vėliava ("naudotojui")bendrauti ieškokite naudotojo kaip proceso, nurodyto jo argumentu (kuris turi būti sukurtas id).

Tai leidžia sujungti du nesusijusius procesus be aiškios kilpos. Norėdami padėti derinti, tikiuosi, kad diagnostika visada eina į stderr (arba stdout tam tikrai prisijungimo ir derinimo informacijai). Dėl tos pačios priežastiesvertėjas komanda interaktyviai skaito iš stdin.

Pavyzdžiui, šis fragmentas sukuria prisijungimo procesą. Tada jis renka vartotoją (nerodomas) ir pagaliau sujungia abi. Žinoma, visi prisijungimo procesai gali būti pakeisti. Pavyzdžiui, lukštas gali leisti vartotojui dirbti nepateikus paskyros ir slaptažodžio.

spawn login set login $ spawn_id spawn tip modemas # nukreipti atgal į vartotoją # sujungti naudotoją prisijungti bendrauti -u $ login

Norėdami išsiųsti produkciją į kelis procesus, nurodykite kiekvieną spawn id sąrašą, kurį anksčiau sukūrė a- išpardavimas vėliava Įvestis iš išvestinių nerštų idijų grupės gali būti nustatoma pagal spaustuvių identifikatorių sąrašą, kurį sudaro a-input vėliava (Abu-input ir- išpardavimas gali priimti sąrašus tokiu pačiu formatu kaip ir-i vėliavatikėtis komandą, išskyrus tai, kad any_spawn_id nėra prasmingasbendrauti .) Šioje įvestyje taikomos visos toliau nurodytos vėliavos ir stygos (arba modeliai), kol pasirodys dar viena įvesties vėliavėlė. Jei ne-input pasirodo- išpardavimas reiškia "-input $ user_spawn_id -output". (Panašiai ir su modeliais, kurių neturite-input .) Jei vienas-input yra nurodytas, jis ignoruoja $ user_spawn_id. Jei antrą kartą-input yra nurodytas, jis ignoruoja $ spawn_id. Papildomas-input gali būti nurodytos vėliavos.

Du numatytieji įvesties procesai pagal nutylėjimą reiškia, kad jų išvestys nurodytos kaip $ spawn_id ir $ user_spawn_id (atvirkščiai). Jeigu-input vėliava pasirodo su ne- išpardavimas vėliava, šio proceso simboliai yra atmestos.

The-i vėliava pakeičia esamą spawn_id, kai nėra kito-input arba- išpardavimas naudojamos vėliavos. Žymė "-i" reiškia "-o" vėliavą.

Galima keisti procesus, su kuriais susiduriama, naudojant netiesioginius spawn ids. (Netiesioginiai spawn id yra apibūdinami skyriuje apie tikėtiną komandą.) Netiesioginiai spawn ids gali būti nurodyti su-i, -u, -input arba-output flags.

vertėjas args

sukelia naudotojui interaktyvų raginimąLaukti ir Tcl komandas. Kiekvienos komandos rezultatas išspausdinamas.

Tokie veiksmai kaippertrauka irTęsti sukelti kontrolės struktūras (t. y.dėl , proc ) elgtis įprastu būdu. Tačiaugrįžti verčia pasikalbėti su savo skambinančiu, norsinter_return priežastysvertėjas sukelti grįžimą savo skambinančiojo. Pavyzdžiui, jei "proc foo" vadinamasvertėjas kuris tada įvykdė veiksmąinter_return , proc foo grįš. Bet kokios kitos komandos priežastysvertėjas ir toliau raginti naujas komandas.

Numatyta, kad eilutėje yra du sveikieji skaičiai. Pirmasis sveikasis skaičius apibūdina vertinimo kampo gylį (t.y., kiek kartų buvo sukonfigūruotas Tcl_Eval). Antrasis sveikasis skaičius yra Tcl istorijos identifikatorius. Parametras gali būti nustatomas apibrėžiant procedūrą, vadinamą "prompt1", kurios grąžinamoji vertė tampa kita eilute. Jei teiginys turi atviras kabutes, parencijas, petnešomis ar skliaustus, antrinis eilutė (pagal nutylėjimą "+>") išduodama naujoje eilutėje. Antrinį greitį galima nustatyti apibrėžiant procedūrą, vadinamą "prompt2".

Pervertėjas , virimo režimas naudojamas, net jei jo skambinančiojo telefonas naudojo žaliavinį režimą.

Jei stdin yra uždarytas,vertėjas grįš nebent-eof vėliava yra naudojama, tokiu atveju yra naudojamas vėlesnis argumentas.

log_file args -a failas

Jei pateikiamas failo pavadinimas,log_file įrašys failo seansą (pradedant tuo momentu).log_file jei nebus pateikta jokių argumentų, nebebus įrašoma. Bet koks ankstesnis žurnalo failas yra uždarytas.

Vietoj failo pavadinimo Tcl failo identifikatorius gali būti naudojamas naudojant-atviras arba-leaveopen vėliavos. Tai yra panaši įneršti komanda (Pamatytineršti Daugiau informacijos.)

The-a vėliavos pajėgos turi būti įregistruotas, kuris buvo užblokuotaslog_user komanda

Numatyta, kadlog_file komanda prideda senus failus, o ne juos truputį, kad būtų galima patogiau atsijungti ir kelis kartus per vieną seansą. Norėdami sutrumpinti failus, naudokite-Navaikyti vėliava

The-info vėliava sukelia log_file grąžinti naujausių neinformuojamų argumentų aprašymą.

log_user -info | 0 | 1

Pagal numatytuosius nustatymus dialogas siųsti / laukti įrašomas į stdout (ir logfile, jei jis atidarytas). Prisijungimas prie stdout yra išjungtas komandą "log_user 0" ir vėl įjungta "log_user 1". Prisijungimas prie žurnalo yra nepakeistas.

The-info vėliavėlė sukelia log_user grąžinti naujausių neinformuojamų argumentų apibūdinimą.

match_max -d -i spawn_id dydis

apibrėžia buferio dydį (baitais), kurį naudoja vidujetikėtis . Su Nr dydis argumentas, grąžinamas dabartinis dydis.

Su-d vėliava nustatytas numatytasis dydis. (Pradinis numatytasis yra 2000 m.)-i vėliava, dydis nustatytas pavadintam spawn id, kitaip jis nustatomas dabartiniam procesui.

perdanga - # spawn_id - # spawn_id … programa args

vykdo "programa args "vietoj dabartinėsLaukti programa, kuri baigiasi. Gautas brūkšnio argumentas verčia brūkšnelį prieš komandų pavadinimą, tarsi jis būtų prisijungimo lukštas. Visi spawn_ids yra uždaryti, išskyrus tuos, kurie vadinami argumentais. Jie yra susieti su nurodytais failų identifikatoriais.

Spawn_ids yra susietos su failo identifikatoriais, skirtais paveldėti naują programą. Pavyzdžiui, ši eilutė paleidžia šachmatą ir leidžia kontroliuoti dabartinį procesą, tarkim, šachmatą.

perdanga -0 $ spawn_id -1 $ spawn_id -2 $ spawn_id šachmatai

Tai yra efektyvesnis už "sąveiką su" -u, tačiau jis aukoja galimybę atlikti programuotą sąveiką nuoLaukti procesas nebėra kontroliuojamas.

Atkreipkite dėmesį, kad nėra valdymo terminalo. Taigi, jei atsijungsite arba pakeisite standartinį įvestį, programos, kuriose vykdoma darbo kontrolė (kriauklės, prisijungimas ir tt), netinkamai funkcionuos.

paritetas -d -i spawn_id vertė

apibrėžia, ar paritetas turėtų būti išlaikytas ar pašalintas iš generuojamų procesų rezultatų. Jei vertę yra lygus nuliui, paritetas yra nuimamas, priešingu atveju jis nenuimtas. Su Nr vertę argumentas, grąžinama dabartinė vertė.

Su-d vėliava, nustatyta numatytoji pariteto reikšmė. (Pradinis numatytasis skaičius yra 1, t.y., paritetas nėra išvalytas.) Su-i vėliava, pariteto vertė yra nustatyta pavadintam spawn id, kitaip jis nustatomas dabartiniam procesui.

remove_nulls -d -i spawn_id vertė

apibrėžia, ar nuliai yra išsaugomi arba pašalinami iš sukurtų procesų išėjimo iki modelio suderinimo ar išsaugojimo kintamajame tikėtis iš arba interact_out . Jei vertę yra 1, nuliai pašalinami. Jei vertę yra 0, nulls nepašalinami. Su Nr vertę argumentas, grąžinama dabartinė vertė.

Su-d vėliava, nustatyta numatytoji reikšmė. (Pradinis numatytasis yra 1, t.y. nuliniai yra pašalinami.) Su-i vėliava, reikšmė nustatoma pavadintam spawn id, kitaip jis nustatomas dabartiniam procesui.

Nesvarbu, ar nuliai pašalinami, ar neLaukti įrašys nulinius baitus žurnale ir stdout.

siųskite -flags eilutę

Siunčia eilutė į dabartinį procesą. Pavyzdžiui, komanda

siųsti "sveika pasaulis"

siunčia simbolius, kurie yra prieinami dabartiniam procesui. ("Tcl" yra "printf" tipo komanda (vadinamaformatas ), kuris gali kurti savavališkai sudėtingas eilutes.)

Simboliai siunčiami iš karto, nors programos su linijiniu tašku užpildytu įvestu elementu neskaitys, kol nebus siunčiamas grąžinimo simbolis. Grąžinimo simbolis žymimas " r".

The-- vėliava reiškia, kad kitas argumentas turi būti interpretuojamas kaip eilutė, o ne vėliava.Bet kokia eilutė gali būti prieš "-", ar ji iš tikrųjų atrodo kaip vėliava. Tai užtikrina patikimą mechanizmą, skirtą nurodyti kintamas stygas, netrukdydamas tų, kurie atsitiktinai atrodo kaip vėliavos. (Visos eilutės, prasidedančios "-", yra rezervuotos būsimoms parinktims.)

The-i vėliava deklaruoja, kad eilutė yra siunčiama į pavadintą spawn_id. Jei spawn_id yra user_spawn_id , o terminalas yra neapdorotas, eilutės naujos eilutės verčiamos į "return-newline" sekas, kad jie atrodytų taip, tarsi terminalas būtų paruoštas. The-raw vėliava išjungia šį vertimą.

The-Null vėliava siunčia nulinius simbolius (0 baitų). Pagal nutylėjimą siunčiamas vienas nulis. Ištisas skaičius gali sekti-Null nurodyti, kiek nulių siųsti.

The-pertrauka vėliava sukuria pertraukos būklę. Tai tik prasminga, jei spawn id reiškia tty įrenginį, atidarytą per "spawn-open". Jei sukėlėte tokį procesą, kaip antspaudas, turėtumėte naudoti "tip" sutartį, kad galėtumėte sukurti pertrauką.

The-s vėliavos jėgos turi būti išsiųstos "lėtai", taigi būtų išvengta bendros situacijos, kai kompiuteris išvedė įvesties buferį, kuris buvo sukurtas žmogui, kuris niekada nebebūtų to paties buferio. Ši išvestis yra kontroliuojama kintamojo "send_slow" vertės, kuris apima dviejų elementų sąrašą. Pirmasis elementas yra sveikasis skaičius, apibūdinantis baitų skaičių atominiu būdu. Antrasis elementas yra tikras skaičius, apibūdinantis sekundžių skaičių, per kurį turi būti atskiriamas atominis signalas. Pavyzdžiui, "set send_slow (10 .001") privers "send -s" siųsti eilutes su 1 milisekunde tarp kiekvieno iš 10 siunčiamų simbolių.

The-h vėliavos jėgos turi būti išsiunčiamos (šiek tiek) kaip žmogus, iš tikrųjų rašydamas. Tarp simbolių atsiranda žmogaus panašūs vėlavimai. (Šis algoritmas remiasi "Weibull" paskirstymu, kurio pakeitimai atitinka konkrečią taikomąją programą.) Šią produkciją kontroliuoja kintamojo "send_human" vertė, kuri užima penkių elementų sąrašą. Pirmieji du elementai yra vidutinis simbolių tarpusavio laikas sekundėmis. Pirmasis naudojamas pagal nutylėjimą. Antrasis naudojamas žodžių pabaigoje, kad būtų imituojamos subtilios pauzės, kurios retkarčiais atsiranda tokiuose perėjimuose. Trečiasis parametras yra kintamumo matas, kai .1 yra gana kintamas, 1 yra pagrįstai kintamasis, o 10 yra gana nesikeičiamas. Galūnės yra nuo 0 iki begalybės. Paskutiniai du parametrai yra atitinkamai mažiausias ir didžiausias tarpinis laikas. Mažiausias ir didžiausias naudojamas paskutinis ir "klipas" paskutinį kartą. Galutinis vidurkis gali labai skirtis nuo nurodyto vidurkio, jei minimalus ir didžiausias klipas pakankamai vertingas.

Pavyzdžiui, ši komanda imituos greitą ir nuoseklią mašinistą:

set send_human (.1 .3 1 .05 2) siųsti -h "Aš alkanas. Darykime pietus".

o pogiriai gali būti tinkamesni:

set send_human (.4 .4 .2 .5 100) siųsti -h "Goodd party lash night!"

Atminkite, kad klaidos nėra imituojamos, tačiau galite patys nustatyti klaidų taisymo situacijas, įtraukdami klaidas ir pataisymus siuntimo argumentuose.

Nulinių simbolių siuntimo vėliavos, pertraukos siuntimo, lėto išvesties įvedimo ir žmogaus formos išvesties, yra viena išimčių. Bus naudojamas tik vienas nurodytas paskutinis. Be to, ne eilutė argumentas gali būti nurodytas su vėliavomis norint siųsti nulinius simbolius ar pertraukas.

Tai yra gera idėja prieš pirmąsiųsti į procesątikėtis. tikėtis laukia proceso pradžios, tuo tarpusiųsti negaliu Visų pirma, jei pirmasissiųsti baigia prieš pradedant procesą, galite išvengti duomenų praradimo. Tais atvejais, kai interaktyviosios programos nesiūlo pradinio skubo, galite tęstisiųsti vėluoju, kaip:

# Siekiant išvengti, kad įsilaužėliai nepateiks patarimų, kaip įsilaužti, # ši sistema nerodo išorinio slaptažodžio. # Palaukite 5 sekundes, kol exec užpildys spawn telnet very.secure.gov miego 5 siųsti slaptažodį

exp_send yra slapyvardis siųsti Jei naudojate Expectk arba kitą "Expect" variantą Tk aplinkoje,siųsti yra apibrėžta Tk visiškai kitokiu tikslu.exp_send yra numatytas suderinamumas tarp aplinkos. Panašios slapyvardžiai yra numatyti kitoms "Expect" kitoms siuntimo komandoms.

send_error -flags string

yra tarsisiųsti , išskyrus tai, kad produkcija siunčiama į stderr, o ne dabartinį procesą.

send_log - eilutė

yra tarsisiųsti , išskyrus tai, kad eilutė siunčiama tik į žurnalo failą (žrlog_file .) Argumentai ignoruojami, jei nė vienas žurnalo failas nėra atidarytas.

siųsti_tty -flags eilutė

yra tarsisiųsti , išskyrus tai, kad produkcija siunčiama į / dev / tty, o ne dabartinį procesą.

send_user -flags eilutė

yra tarsisiųsti , išskyrus tai, kad produkcija siunčiama į stdout, o ne pagal dabartinį procesą.

miego sekundes

sukelia scenarijų miegoti tam tikrą sekundžių skaičių. Sekundės gali būti dešimtainis skaičius. Pertraukimai (ir Tk įvykiai, jei naudojate Expectk) yra apdorojami, o tikisi, kad miega.

spawn args programa args

sukuria naują procesą "programa args ". Jo stdin, stdout ir stderr yra prijungti prie Expect, kad juos galėtų perskaityti ir parašyti kitiLaukti komandos. Ryšys yra sugadintasUždaryti arba jei pats procesas uždaro bet kokį failo identifikatorių.

Kai procesas prasidedaneršti , kintamasis spawn_id yra nustatytas į deskriptorių, susijusį su šiuo procesu. Procesas aprašytas spawn_id laikoma "dabartinis procesas ". spawn_id gali būti skaitoma arba parašyta, iš tikrųjų suteikiant darbo kontrolę.

user_spawn_id yra globalus kintamasis, kuriame yra aprašas, kuris nurodo naudotoją. Pavyzdžiui, kada spawn_id yra nustatyta į šią vertę,tikėtis elgiasi kaipexpect_user .

.I error_spawn_id yra pasaulinis kintamasis, kuriame yra deskriptorius, kuris nurodo standartinę klaidą. Pavyzdžiui, kada spawn_id yra nustatyta į šią vertę,siųsti elgiasi kaipsend_error .

tty_spawn_id yra globalus kintamasis, kuriame yra deskriptorius, kuris nurodo / dev / tty. Jei / dev / tty neegzistuoja (pvz., Cron, at, arba partijos scenarijus), tada tty_spawn_id nėra apibrėžta. Tai gali būti išbandyta kaip:

jei {info vars tty_spawn_id} {# / dev / tty egzistuoja} else {# / dev / tty neegzistuoja # tikriausiai cron, partijos ar scenarijaus}

neršti grąžina UNIX proceso ID. Jei procesas nėra sukurtas, 0 grąžinamas. Kintamasis spawn_out (vergas, vardas) yra nustatytas pty slave įrenginio pavadinimas.

Pagal nutylėjimąneršti echo komandos pavadinimą ir argumentus. The-noecho vėliava sustojaneršti tai padaryti.

The-konsolė vėliava sukelia konsolės išvesties nukreipimą į sukurtą procesą. Tai nėra palaikoma visose sistemose.

Vidujeneršti naudoja pty, inicializuotas taip pat kaip ir vartotojo tty. Tai dar kartą inicijuojama taip, kad visi nustatymai yra "normalūs" (pagal stty (1)). Jei kintamasis stty_init yra apibrėžta, ji yra interpretuojama kaip stty argumentų kaip papildoma konfigūracija. Pavyzdžiui, "nustatytas stty_init žaliavinis" bus toliau generuojamų procesų terminalai pradėti žaliaviniu režimu.-nottykopija praleidžia inicializavimą pagal vartotojo tty.-notitytis praleidžia "normalus" iniciaciją.

Paprastaineršti trunka mažai laiko vykdyti. Jei pastebėjote, kad neršia daug laiko, tai tikriausiai susiduria su kliūtimis. Siekiant išvengti klaidinančių procesų, atliekami keli testai. (Tai užtrunka 10 sekundžių už kiekvieną suspaustą kt.) Bėgimas laukia su-d parinktis bus rodoma, jeiLaukti susiduria su daugybe ptys netikėtose būsenose. Jei negalite nužudyti procesų, prie kurių pridedami šie ptys, jūsų vienintelis būdas gali būti iš naujo paleisti.

Jei programa sėkmingai nesukurta, nes exec (2) nepavyksta (pvz., kai programa neegzistuoja), klaidos pranešimas bus grąžintas kitobendrauti arbatikėtis komandą, tarsi programa bėgo ir sukūrė klaidos pranešimą kaip produkciją. Toks elgesys yra natūralus "neršti . Viduje šeriai kūjai, po kurio atsiradęs procesas neturi jokio ryšio su originaluLaukti procesas, išskyrus ryšį per spawn_id.

The-atviras vėliava sukelia, kad kitas argumentas būtų interpretuojamas kaip Tcl failo identifikatorius (t. y. grąžintasatviras .) Tada spawn id gali būti naudojamas taip, tarsi tai būtų sukurtas procesas. (Failo identifikatorius nebeturėtų būti naudojamas.) Tai leidžia apdoroti žaliuosius įrenginius, failus ir vamzdynus kaip sukurtus procesus, nenaudojant pty. 0 grąžinamas norint parodyti, kad nėra susijusio proceso. Kai ryšys su sukurtu procesu yra uždarytas, taip pat yra Tcl failo identifikatorius. The-leaveopen vėliava yra panaši į-atviras išskyrus tai-leaveopen sukelia failo identifikatoriaus atidarymą net ir po to, kai spawn id yra uždarytas.

The-pty vėliava kyla atverti pty, bet procesas nerastas. 0 grąžinamas norint parodyti, kad nėra susijusio proceso. Spawn_id nustatytas kaip įprasta.

Kintamasis spawn_out (vergas, fd) yra nustatytas failo identifikatorius, atitinkantis pty slave. Jis gali būti uždarytas naudojant "close-slave".

The-gnoras vėliava žymi signalą, kurį reikia ignoruoti sukurtuose procesuose. Priešingu atveju signalai gauna numatytąjį elgesį. Signalai yra pavadinti kaipspąstai komandą, išskyrus tai, kad kiekvienam signalui reikalinga atskira vėliava.

strace lygis

Prieš pradedant versijas, atsiranda nurodymų, kuriuos reikia išspausdinti. (Tcl tradicinių komandų pėdsakai kintamieji.) lygis rodo, kiek toli žemyn skambučio kampe atsekti. Pavyzdžiui, paleidžiama ši komandaLaukti atskleidžiant pirmuosius 4 skambučių lygius, tačiau jų nėra.

tikėtis-c "strace 4" script.exp

The-info vėliava sukelia strace, kad būtų grąžintas naujausių neinformuojamų argumentų aprašymas.

stty args

keičia terminalų režimus panašiai kaip išorinė komanda stty.

Pagal numatytuosius nustatymus pasiekiamas valdymo terminalas. Prie kitų terminalų galima susipažinti, pridedant "Statuso užklausos grąžina ją kaip komandos rezultatą. Jei statuso neprašoma ir prieiga prie valdymo terminalo, ankstesnis neapdorotų ir echo atributų statusas grąžinamas į formą, kuri vėliau gali būti naudoja komanda.

Pavyzdžiui, argumentaižaliavinis arba- virti įdėkite terminalą į neapdorotą režimą. Argumentai-raw<