Odotetaan, että ohjelma käsittelee muita interaktiivisia ohjelmia skriptin mukaan. Käsikirjoituksen jälkeen Expect tietää, mitä ohjelmasta voidaan odottaa ja mikä oikea vastaus on. Tulkittu kieli tarjoaa haarautumisen ja korkean tason ohjausrakenteet ohjaamaan dialogia. Lisäksi käyttäjä voi hallita ja toimia vuorovaikutuksessa suoraan halutulla tavalla ja palauttaa sen jälkeen komentosarjan.
Expectk on yhdistelmä Expect ja Tk. Se käyttäytyy aivan kuten odottaa ja Tk: n toive. Odota voidaan käyttää myös suoraan C tai C ++ ilman Tcl: ää.
Nimi "Odottaa" tulee käsitteestä lähettää / odottaa sekvenssejä, joita uucp, kermit ja muut modeemiohjausohjelmat suosittivat. Kuitenkin toisin kuin uucp, Expect on yleistetty niin, että sitä voidaan käyttää käyttäjäkohtaisena komennona minkä tahansa ohjelman ja tehtävän mielessä. Odottaa voi puhua useille ohjelmille samanaikaisesti.
Mitä odottaa voivansa tehdä
Esimerkiksi tässä on joitakin asioita, joita odottaa komento voi tehdä:
- Syy tietokoneesi soittamaan sinut takaisin, jotta voit kirjautua sisään maksamatta puhelun.
- Aloita peli ja jos optimaalinen kokoonpano ei tule näkyviin, käynnistä se uudestaan ja uudestaan), kunnes se tulee, ja anna sen jälkeen hallinta.
- Suorita fsck ja vastata kysymyksiisi vastaamalla "kyllä" tai "ei" tai hallitsemaan sinua uudelleen ennalta määrätyin perustein.
- Yhdistä toiseen verkkoon ja hakee automaattisesti sähköpostiviestisi niin, että se näyttää kuin se lähetettiin alun perin paikalliseen järjestelmään.
- Siirrä ympäristömuuttujat, nykyinen hakemisto tai mikä tahansa tieto rlogin, telnet, tip, su tai chgrp kautta
On olemassa useita syitä, miksi kuori ei pysty suorittamaan näitä tehtäviä. Kaikki ovat mahdollisia odottaa.
Yleensä Expect on hyödyllinen minkä tahansa ohjelman suorittamiseen, joka edellyttää vuorovaikutusta ohjelman ja käyttäjän välillä. Tarvitaan vain, että vuorovaikutusta voidaan karakterisoida ohjelmallisesti. Odotettavissa voi myös antaa takaisin ohjauksen käyttäjälle pysäyttämättä ohjelmaa ohjattavaksi. Samoin käyttäjä voi palauttaa ohjauksen komentosarjalle milloin tahansa.
Käyttö
Odottaa lukee cmdfile listalle suorittavat komennot. Odotetaan, että niitä voidaan käyttää implisiittisesti järjestelmiin, jotka tukevat #! merkinnällä merkitsemällä komentosarja suoritettavaksi ja tekemällä komentorivin ensimmäisellä rivillä:
#! / usr / local / bin / odottaa -f
Tietenkin polku on kuvattava tarkasti, missä odottaa elää. / usr / local / bin on vain esimerkki.
-C-lippu esikentää komennon, joka on suoritettava ennen komentoa. Komento tulisi mainita estääkseen sen, että kuori murtautuu. Tätä vaihtoehtoa voidaan käyttää useita kertoja. Useita komentoja voidaan suorittaa yhdellä -c: llä erottamalla ne puolipisteillä. Komennot suoritetaan siinä järjestyksessä kuin ne näkyvät. Käytettäessä Expectkia tämä vaihtoehto määritellään -komennoksi.
-D-lippu mahdollistaa joitain vianmääritystuloksia, jotka kertovat ensisijaisesti sellaisten komentojen sisäisestä toiminnasta kuin odottaa ja vuorovaikutteisesti. Tämä lippu on sama kuin "exp_internal 1" Expect-komentosarjan alussa, ja Expect-version versio tulostetaan.
-D-lippu mahdollistaa interaktiivisen virheenkorjaajan. Tällöin tulee olla kokonaisluku. Debuggeri ottaa hallinnan ennen seuraavaa Tcl-menettelyä, jos arvo ei ole nolla tai jos ^ C on painettu tai breakpoint on osuma tai jokin muu asianmukainen virheenkorjauskomento ilmestyy käsikirjoituksessa. Käytettäessä Expectkia tämä vaihtoehto on määritelty nimellä -Debug.
-F-lippu esikentää tiedoston, josta lukea komentoja. Lippu itsessään on valinnainen, koska se on vain hyödyllistä käytettäessä #! merkintä, niin että muita argumentteja voidaan toimittaa komentoriville. Käytettäessä Expectkia tämä vaihtoehto määritellään -fileksi.
Oletuksena komentotiedosto luetaan muistiin ja toteutetaan kokonaisuudessaan. On toisinaan toivottavaa lukea tiedostoja yhdellä rivillä kerrallaan. Jotta pakotettaisiin mielivaltaisia tiedostoja käsiteltäväksi tällä tavalla, käytä -b-lippua. Käytettäessä Expectkia, tämä vaihtoehto määritetään -puhelimeksi.
Jos merkkijono "-" toimitetaan tiedostonimenä, sen sijasta lukee tavallinen tulo. Käytä "./-" lukea tiedostoa nimeltä "-".
-I-lipun syyt Odottavat, että komennot komennetaan vuorovaikutteisesti sen sijaan, että ne lukisivat ne tiedostosta. Kutsu päättyy poistokomennon tai EOF: n kautta. -I lippu oletetaan, jos komentotiedostoa tai -c ei ole käytössä. Käytettäessä Expectkia tämä vaihtoehto määritellään -interaktiiviseksi.
- voidaan käyttää rajojen lopettamiseen. Tämä on hyödyllistä, jos haluat välittää optiomallin argumentin käsikirjoituksestasi ilman, että odottaa sitä. Tämä voidaan kätevästi sijoittaa #! line estää odottamattoman tulkinnan lippua. Esimerkiksi seuraavat jättävät alkuperäiset argumentit, mukaan lukien skriptin nimi muuttujaan argv .
#! / usr / local / bin / expect -
Huomaa, että tavanomaisia getopt (3) ja execve (2) -käytäntöjä on noudatettava lisäämällä argumentteja #! linja.
Tiedosto $ exp_library / expect.rc hankitaan automaattisesti, jos se on läsnä, ellei N-lippua käytetä. (Käytettäessä Expectkia, tämä vaihtoehto on määritetty nimellä -NORC.) Välittömästi tämän jälkeen tiedosto ~ / .expect.rc saadaan automaattisesti, ellei -n-lippua käytetä. Jos DOTDIR-ympäristömuuttuja on määritetty, sitä käsitellään hakemistona ja .expect.rc luetaan siellä. Käytettäessä Expectkia tämä vaihtoehto on määritetty -norciksi.Tämä hankinta tapahtuu vasta sen jälkeen, kun suoritetaan mitään -c-lippuja.
-v-syyt Odottaa tulostaa versionumeron ja poistua. Vastaava lipun Expectkissa, joka käyttää pitkää lipun nimeä, on -versio.
Valinnainen argumentti luodaan luetteloon ja tallennetaan muuttujalle nimeltä argv ja. argc alustetaan argv: n pituuteen.
Argv0 määritellään komentosarjan nimeen tai binaariin, jos komentosarjaa ei käytetä. Seuraavassa tulostetaan esimerkiksi käsikirjoituksen nimi ja kolme ensimmäistä argumenttia:
send_user "$ argv0 lrange $ argv 0 2 n"
komennot
Odota käyttää työkalun komentokieltä. Tcl tarjoaa ohjauksen virtauksen (jos, katkeaa), lausekkeen arviointi ja useita muita ominaisuuksia, kuten rekursiota ja prosessin määrittelyä. Komentoja, joita ei ole määritelty (asetettu, jos, exec) ovat Tcl-komentoja. Odottaa tukee muita komentoja. Jollei toisin mainita, komennot palauttavat tyhjä merkkijonon.
Komennot on lueteltu aakkosjärjestyksessä, jotta ne voidaan sijoittaa nopeasti. Uudet käyttäjät saattavat kuitenkin helpommin aloittaa lukemalla kutsujen, lähetysten, odotusten ja vuorovaikutusten kuvaukset tässä järjestyksessä.
sulje -selaus -onexec 0 | 1 -i spawn_id
sulkee yhteyden nykyiseen prosessiin. Useimmat interaktiiviset ohjelmat havaitsevat EOF: n niiden stdin ja exit: täten kiinni riittää yleensä tappaa myös prosessi. -I lippu ilmoittaa, että prosessi sulkeutuu vastaamaan nimettyä spawn_id.
Molemmat odottavat ja toimivat vuorovaikutuksessa havaitsevat, milloin nykyinen prosessi poistuu ja implisiittisesti sulkeutuu, mutta jos menetät prosessin sanomalla "exec kill $ pid", sinun täytyy nimenomaisesti soittaa lähelle.
-Onexec-lippu määrittää, onko kutujakso suljettu mistä tahansa uudesta kutuutetusta prosessista tai jos prosessi on päällystetty. Jätä uusi kutu auki, käytä arvoa 0. Muu kuin nollan kokonaisluvun arvo pakottaa kutunsa sulkeutumaan uusissa prosesseissa.
-Lave-lippu sulkee isännän, joka liittyy kutujakaan. Kun yhteys suljetaan, orja suljetaan automaattisesti myös, jos se on vielä auki.
Riippumatta siitä, onko yhteys suljettu epäsuorasti tai eksplisiittisesti, sinun pitäisi soittaa, odottaa, että poistetaan vastaava ydinprosessi. Sulkeutuva komento ei anna odotustilaa, koska ei ole takeita siitä, että prosessiliitännän sulkeminen aiheuttaa sen lopettamisen.
debug -now 0 | 1
ohjaa Tcl-vianmääritysohjelmaa, jonka avulla voit selata lausekkeita ja asettaa raja-arvot.
Jos argumentteja ei ole, 1 palautetaan, jos debuggeri ei ole käynnissä, muuten 0 palautetaan.
1-argumentilla debuggeri käynnistetään. 0-argumentilla debuggeri pysäytetään. Jos 1-argumenttia edeltää -now flag, debugger käynnistyy välittömästi. Muutoin debuggeri käynnistetään seuraavalla Tcl-lausunnolla.
Debug-komento ei muuta lukkoja. Vertaa tätä aloittaaksesi odottaa -D-lippua.
Disconnect-komento irrottaa haarukkaprosessin päätelaitteesta. Se jatkuu taustalla. Prosessille annetaan oma prosessiryhmä. Standardi I / O ohjataan / dev / nulliksi.
Seuraava fragmentti käyttää yhteyden katkaisemista, jotta komentojonoa jatketaan taustalla.
jos {fork! = 0} poistuu irti. . .
Seuraava käsikirjoitus lukee salasanan ja suorittaa sen joka tunti, joka vaatii salasanan joka kerta, kun sitä ajetaan. Skripti antaa salasanan, joten sinun tarvitsee vain kirjoittaa se kerran.
send_user "salasana? " expect_user -re "(. *) n" for {} 1 {} {if {fork! = 0} {sleep 3600; 1, merkkijono) r ". . . poistu}
Etuna kuoren asynkronisen prosessiominaisuuden (&) yli tapahtuvan irrottamisen käyttämisen kanssa on, että odottaa voi tallentaa päätelaitteen parametrit ennen irtikytkemistä ja sitten soveltaa niitä myöhemmin uuteen ptys-järjestelmään. With &, Expect ei ole mahdollisuutta lukea päätelaitteen parametreja, koska päätelaite on jo katkaistu, kun odottaa, että odottaa ohjausta.
poistu -opts tila
odottaa poistua tai muuten valmistautua tekemään niin.
-onexit lippu aiheuttaa seuraavan argumentin käyttämisen poistumiskäsittelijänä. Ilman argumenttia, nykyinen poistumiskäsittelijä palautetaan.
-ei uloskäyntiä lippu aiheuttaa Odottaa valmistautua poistumaan, mutta lopettaa todellisen ohjauksen palauttaminen käyttöjärjestelmään. Käyttäjän määrittelemä poistokäsittelijä suoritetaan sekä odottaa omaa sisäistä käsittelijää. Ei enää odottaa komentoja olisi suoritettava. Tämä on hyödyllistä, jos käytät odottaa muiden Tcl-laajennusten kanssa. Nykyinen tulkki (ja pääikkuna, jos Tk-ympäristössä) säilyvät niin, että muut Tcl-laajennukset voivat puhdistaa. Jos odotat poistuminen kutsutaan uudelleen (mutta tämä saattaa ilmetä), käsittelijät eivät toistu.
Poistuessaan kaikki yhteydet kutsuihin ovat suljettuina. Sulkeminen havaitaan EOF: ksi kutsuvien prosessien avulla. poistuminen ei tee mitään muita toimenpiteitä kuin tavallinen _exit (2) -menetelmä. Siten kutomatut prosessit, jotka eivät tarkista EOF: ää, voivat jatkaa toimintaansa. (Erilaiset olosuhteet ovat tärkeitä esimerkiksi sen määrittämiseksi, mitä signaaleja kutsuun prosessiin lähetetään, mutta nämä ovat järjestelmän riippuvuuksia, tyypillisesti dokumentoituna poistumisen (3) alla.) Init: n periytyvät prosessoidut prosessit.
status (tai 0, jos ei määritetty) palautetaan Odottaa . poistuminen toteutetaan implisiittisesti, jos komentosarjan loppu on saavutettu.
exp_continue -continue_timer
Käsky exp_continue sallii odottaa itse jatkaa suorittamista sen sijaan, että se palautuisi normaalisti. Oletuksena exp_continue palauttaa aikakatkaisun ajastimen. -continue_timer lippua estää ajastimen uudelleenkäynnistyksen. (Katso odottaa Lisätietoja.)
exp_internal -f-tiedosto -arvo
aiheuttaa lisäkomentoja lähettää sisäisiä vianmääritystietoja Odottaa stderr jos arvo on ei-nolla. Tämä tulos on poistettu käytöstä, jos arvo on 0. Diagnostiikkatieto sisältää jokaisen vastaanotetun merkin, ja jokainen yritys, joka on tehty vastaamaan nykyistä lähtöä malleihin nähden.
Jos valinnainen tiedosto toimitetaan kaikki normaalit ja virheenkorjauslähdöt kirjoitetaan kyseiseen tiedostoon (riippumatta siitä, mikä arvo on arvo ). Kaikki aiemmat vianmääritystiedostot on suljettu.
-tiedot lippu aiheuttaa exp_internal palauttaa kuvauksen tuoreimmista ei-info-argumentteista.
exp_open args -i spawn_id
palauttaa Tcl-tiedostunnisteen, joka vastaa alkuperäistä kutualuetta. Tiedostunnistetta voidaan käyttää sen jälkeen, kun Tcl: t avasivat sen avata komento. (Kutama tunnusta ei tule enää käyttää odota ei pitäisi suorittaa.
-leaveopen lippu jättää kutu id avoinna pääsy kautta odottaa komentoja. odota on täytettävä kutsuhetkellä.
exp_pid -i spawn_id
palauttaa prosessin id, joka vastaa tällä hetkellä syntynyttä prosessia. Jos -i lippua käytetään, palautettu pid vastaa kyseisen lomakkeen tunnuslukua.
exp_send
on alias lähettää .
exp_send_error
on alias send_error .
exp_send_log
on alias send_log .
exp_send_tty
on alias send_tty .
exp_send_user
on alias send_user .
exp_version -exit versio
on hyödyllinen sen varmistamiseksi, että käsikirjoitus on yhteensopiva Expectin nykyisen version kanssa.
Ei argumentteja, nykyisen version Odottaa palautetaan. Tämä versio voidaan sitten koodata käsikirjassasi. Jos tiedät itse, että et käytä viimeisimpien versioiden ominaisuuksia, voit määrittää aiemman version.
Versiot koostuvat kolmesta numerosta, jotka on erotettu pisteillä. Ensimmäinen on suurin numero. Scripts kirjoitettu versiot Odottaa eri suurella numerolla ei varmasti toimi. exp_version palauttaa virheen, jos suurimmat numerot eivät täsmää.
Toinen on pieni numero. Skriptit, jotka on kirjoitettu versioon, jolla on pienempi määrä kuin nykyinen versio, voivat olla riippuvaisia uudesta ominaisuudesta, ja ne eivät ehkä toimi. exp_version palauttaa virheen, jos suurimmat numerot vastaavat, mutta komentosarjan vähäinen luku on suurempi kuin juoksu Odottaa .
Kolmas on numero, jolla ei ole mitään osaa versiovertailussa. Kuitenkin se kasvaa, kun Odottaa ohjelmistojakelua muutetaan millään tavoin, kuten lisädokumentaation tai optimoinnin avulla. Se nollataan 0 uudelle pienemmälle versiolle.
Kanssa exit lippu, Odottaa tulostaa virheen ja poistuu, jos versio on vanhentunut.
odottaa -opts pat1 body1 … -opts patn bodyn
odottaa, kunnes jokin kuvioista vastaa kutustetun prosessin tuotos, tietyn ajan kuluttua tai tiedoston loppu on näkyvissä. Jos lopullinen elin on tyhjä, se voidaan jättää pois.
Uusimmat mallit expect_before komentoa käytetään epäsuorasti ennen muita malleja. Uusimmat mallit expect_after komentoa käytetään implisiittisesti minkä tahansa muun mallin jälkeen.
Jos argumentit koko odottaa lauseke vaatii useamman kuin yhden rivin, kaikki argumentit voidaan "sulauttaa" yhteen, jotta vältetään kunkin rivin lopettaminen vastakkaisella kielellä. Tässä tapauksessa tavanomaiset Tcl-substituutit tapahtuvat rintaliiveistä huolimatta.
Jos kuvio on avainsana eOF , vastaava elin suoritetaan tiedoston loppuessa. Jos kuvio on avainsana Aikalisä , vastaava elin suoritetaan aikakatkaisuna. Jos aikakatkaisun avainsanaa ei käytetä, implisiittinen nollaustoiminto suoritetaan aikakatkaisun aikana. Oletusajanjakso on 10 sekuntia, mutta se voidaan asettaa esimerkiksi 30: een komennolla "asetettu aikakatkaisu 30". Lopullinen aikakatkaisu voidaan nimetä arvolla -1. Jos kuvio on avainsana oletusarvo , vastaava elin suoritetaan joko aikakatkaisulla tai loppupuolella.
Jos kuvio täsmää, vastaava kappale suoritetaan. odottaa palauttaa kehon tuloksen (tai tyhjän merkkijonon, jos kuvio ei vastaa). Jos useat kuvakkeet sopivat yhteen, sitä käytetään ensin valitsemaan keho.
Joka kerta, kun uusi tuotos saapuu, sitä verrataan kuhunkin kuvioon siinä järjestyksessä kuin ne on lueteltu. Siksi voit testata ottelun poissaoloa tekemällä viimeisen mallin, jolla jotain taatusti ilmestyy, kuten kehote. Tilanteissa, joissa ei ole kehotetta, sinun on käytettävä Aikalisä (kuten sinä, jos olisit vuorovaikutuksessa manuaalisesti).
Mallit on määritetty kolmella tavalla. Oletusarvoisesti kuvioita määritellään kuten Tcl: n kanssa merkkijono komento. (Tällaiset mallit ovat myös samanlaisia kuin C-kuoren säännölliset ilmaisut, joita yleensä kutsutaan "glob" -malleiksi). -GL lippua voidaan käyttää sellaisten kuvioiden suojaamiseen, jotka muuten saattavat olla yhteensopivia odottaa lippuja. Kaikki "-" -alkuisesta kuvioista tulisi suojata tällä tavoin. (Kaikki merkkijonot, jotka alkavat "-", varataan tuleville vaihtoehdoille.)
Esimerkiksi seuraava kappale etsii onnistuneen kirjautumisen. (Ota huomioon, että keskeyttää oletetaan olevan muussa käsikirjoituksessa määritelty menettely.)
odottaa {busy {asettaa varattu n; exp_continue} epäonnistui keskeyttää "virheellinen salasana" keskeyttää aikakatkaisu keskeytetty kytketty}
Lainaukset ovat välttämättömiä neljännellä kuvioinnilla, koska siinä on tilaa, joka muutoin erottaa kuvion toiminnosta.Samat toiminnot (kuten kolmas ja neljäs) vaativat, että toiminnot luetellaan uudelleen. Tämä voidaan välttää käyttämällä regexp-tyyppisiä kuvioita (katso alla). Tcl-käsikirjasta löytyy lisää tietoa globaalien kuvioiden muodostamisesta.
Regexp-tyyliset kuviot noudattavat Tcl: n määrittelemää syntaksia regexp (lyhyt "säännöllinen lauseke") komento. regexp-kuviot lisätään lippuun -re . Edellinen esimerkki voidaan kirjoittaa käyttäen regexp: tä seuraavasti:
odottaa {busy {asettaa varattu n; exp_continue} -re "epäonnistui | virheellinen salasana" keskeytys aikakatkaisu keskeytetty kytketty}
Kummankin tyyppiset kuviot ovat "ankkuroitumattomia". Tämä tarkoittaa, että kuvioiden ei tarvitse olla koko merkkijono, mutta ne voivat alkaa ja lopettaa ottelun missä tahansa merkkijono (niin kauan kuin kaikki muut vastaavat). Käytä ^ vastaamaan merkkijonon alkua ja $ vastaamaan loppua. Huomaa, että jos et odota merkkijoukkojen loppua, vastauksesi voivat helposti päätyä merkkijonon keskelle, kun ne kerätään uudestaan. Vaikka tuottaa edelleen oikeita tuloksia, tuotos voi näyttää luonnottomalta. Näin ollen $: n käyttöä kannustetaan, jos voit tarkasti kuvata merkkejä merkkijonon lopussa.
Huomaa, että monissa editorissa ^ ja $ vastaavat rivien alkua ja loppua. Koska odotukset eivät kuitenkaan ole linja-suuntaisia, nämä merkit sopivat vastaavan puskurin odottamassa olevan datan alkuun ja loppuun (toisin kuin rivit). (Katso myös alla oleva huomautus "systeemihäiriöistä".)
-Ex lippu tekee mallin sovitettavaksi "tarkaksi" merkkijonoksi. Ei *, ^ jne. Tulkinta tehdään (vaikka tavallisia Tcl-konventiona on vielä noudatettava). Täsmälliset kuviot ovat aina ankkuroitumattomia.
-nocase lippu merkitsee lähdön isojen kirjainten vertaamista ikään kuin pieniä merkkejä. Kuvio ei vaikuta.
Lukemisen aikana yli 2000 tavua voi pakottaa aikaisemmat tavut "unohtumaan". Tätä toimintoa voidaan muuttaa match_max . (Huomaa, että liian suuret arvot voivat hidastaa kuvion sovittimen.) Jos patlist on full_buffer , vastaava elin suoritetaan, jos match_max tavua on vastaanotettu eikä muita kuvioita ole sovitettu. Olipa kyseessä full_buffer avainsanaa käytetään, unohdetut merkit kirjoitetaan expect_out (puskuri).
Jos patlist on avainsana tyhjä , ja nollat sallitaan ( remove_nulls komento), vastaava elin suoritetaan, jos yhdeksi ASCII 0: ksi on sovitettu. Ei ole mahdollista vastata 0 tavua glob- tai regexp-mallien kautta.
Kun kuvio (tai eof tai full_buffer) on sovitettu, kaikki vastaava ja aiemmin vertaansa vailla oleva tuotos tallennetaan muuttujaan expect_out (puskuri) . Muuttujille tallennetaan enintään 9 regexp-merkkijoukkoa expect_out (1, string) kautta expect_out (9, string) . Jos -indices lippua käytetään ennen mallia, alkumis- ja päättymisindeksit (muodossa, joka sopii lrange ) 10 stringsistä tallennetaan muuttujille expect_out (X, alku) ja expect_out (X, pää) jossa X on numero, vastaa substraatin asemaa puskurissa. 0 viittaa merkkijonoihin, jotka sopivat koko kuvioon ja muodostetaan glob-malleille sekä regexp-malleille. Jos esimerkiksi prosessi tuottaa "abcdefgh n" -tuotteen, tulos:
odottaa "cd"
on ikään kuin seuraavat toteumat olisi toteutettu:
set expect_out (0, merkkijono) cd set expect_out (buffer) abcd
ja "efgh n" on jäljellä lähtöpuskurissa. Jos prosessi tuotti tuotoksen "abbbcabkkkka n", tulos:
odottaa -indeksit -re "b (b *). * (k +)"
on ikään kuin seuraavat toteumat olisi toteutettu:
set expect_out (0, aloita) 1 set expect_out (0, loppu) 10 set expect_out (0, merkkijono) bbbcabkkkk set expect_out (1, aloita) 2 set expect_out (1, loppu) 3 set expect_out (1, merkkijono) bb set expect_out (2, aloita) 10 set expect_out (2, loppu) 10 set expect_out (2, merkkijono) k set expect_out (puskuri) abbbcabkkkk
ja "a n" on jäljellä lähtöpuskurissa. Kuvio "*" (ja -re ". *") Tasoittaa tulostuspuskuria lukematta prosessin tuottoa.
Tavallisesti vastaava lähtö hylätään Expectin sisäisistä puskureista. Tämä voidaan estää esikirjoittamalla kuvio -notransfer lippu. Tämä lippu on erityisen hyödyllinen kokeilemisessa (ja sitä voidaan lyhentää "-not" helpottamaan kokeilemista).
Matching-lähdöön (tai eof tai full_buffer) liittyvä kutu id on tallennettu sisään expect_out (spawn_id) .
-Aikalisä lippu aiheuttaa nykyisen odotuskomennon käyttämään seuraavaa arvoa aikakatkaisuna aikakatkaisu-muuttujan arvon sijasta.
Oletusarvoisesti kuvioita vastaavat nykyisen prosessin lähdöstä, mutta -i lippu ilmoittaa, että nimetty spawn_id-listan tuotos on sovitettu vastaaviin kuvioihin (seuraavaan -i ). Spawn_id-luettelon pitäisi olla joko välilyönnillä erotettu spawn_ids-luettelo tai muuttuja, joka viittaa tällaiseen spawn_ids-luetteloon.
Esimerkiksi seuraava esimerkki odottaa nykyisestä prosessista "liitetty" tai "varattu", "epäonnistunut" tai "virheellinen salasana" $ proc2: n nimellä nimetystä spawn_idistä.
odottaa {-i $ proc2 kiireinen {asettaa varattuin n; exp_continue} -re "epäonnistui | virheellinen salasana" keskeytys aikakatkaisu keskeytetty kytketty}
Globaalin muuttujan arvo any_spawn_id voidaan käyttää vastaamaan malleja mihin tahansa muuhun nimeämiin spawn_ideihin -i lippuja nykyisessä odottaa komento. Spawn_id a -i lippu, jolla ei ole siihen liittyvää mallia (eli seuraa välittömästi toinen -i ) on saatavana mille tahansa muulle samaan malliin odottaa komento liittyy any_spawn_id.
-i lippu voi myös nimetä globaalin muuttujan, jolloin muuttuja luetaan listalle kutuviestejä. Muuttuja kertoo aina, kun se muuttuu. Tämä antaa keinon muuttaa I / O-lähdettä komennon suorittamisen aikana. Sillä tavalla annettuja spawn-tunnuksia kutsutaan "epäsuoriksi" kutujäljiksi.
Toimet kuten tauko ja jatkaa aiheuttaa kontrollirakenteita (so. varten , proc ) käyttäytyä tavallisella tavalla. Käsky exp_continue sallii odottaa itse jatkaa suorittamista sen sijaan, että se palautuisi normaalisti.
Tämä on hyödyllistä välttääkseen selkeät silmukat tai toistuvat odotetut lausunnot. Seuraava esimerkki on osa fragmenttia rlogin automatisoimiseksi. exp_continue välttää joutua kirjoittamaan toisen odottaa lausunto (jos haluat etsiä kehotteen uudelleen), jos rlogin pyytää salasanaa.
odottaa {salasana: {stty -echo send_user "salasana ($ käyttäjälle) $ host:" expect_user -re "(. *) n" send_user " n" lähetä "$ expect_out (1, merkkijono) r" echo {send_user "yhteys isäntään epäonnistui: $ expect_out (puskuri)" exit} - poistuminen} echo exp_continue} virheellinen {send_user "virheellinen salasana tai tili n" exit} timeout {send_user " re $ prompt}
Esimerkiksi seuraava fragmentti voi auttaa oppaassa vuorovaikutusta, joka on jo täysin automatisoitu. Tällöin päätelaite asetetaan raakamuotoiseksi. Jos käyttäjä painaa "+", muuttujaa kasvatetaan. Jos painetaan "p", prosessiin lähetetään useita palautusvaihtoehtoja, ehkäpä itkemään sitä jollakin tavalla, ja "i" antaa käyttäjälle mahdollisuuden toimia vuorovaikutuksessa prosessin kanssa, tehokkaasti varastaen ohjattavan komentosarjan. Kussakin tapauksessa exp_continue sallii nykyisen odottaa jatkaa kuvion sovittamista nykyisen toiminnon suorittamisen jälkeen.
stty raw -echo expect_after {-i $ user_spawn_id "p" {lähetä " r r r"; exp_continue} "+" {incr foo; exp_continue} "i" {vuorovaikutuksessa; exp_continue} "lopeta" poistuminen}
Oletuksena, exp_continue palauttaa aikakatkaisun ajastimen. Ajastinta ei käynnistetä uudelleen, jos exp_continue kutsutaan nimellä -continue_timer lippu.
expect_after expect_args
toimii samalla tavalla kuin expect_before paitsi jos molempien mallit odottaa ja expect_after voi sopia, odottaa mallia käytetään. Katso expect_before komennolla lisätietoja.
expect_background expect_args
ottaa samoja argumentteja kuinodottaa , mutta se palaa välittömästi. Mallit testataan aina, kun uusi syöttö saapuu. KaavaAikalisä jaoletusarvo ovat merkityksettömiäexpect_background ja ne hävitetään hiljaa. Muussa tapauksessaexpect_background komentoaexpect_before jaexpect_after malleja aivan kutenodottaa tekee.
Kunexpect_background toimenpiteitä arvioidaan, taustalla tapahtuvaa käsittelyä saman kutevan tunnuksen estämiseksi. Taustatekniikka on estetty, kun toiminto on valmis. Vaikka taustakäsittely on estetty, on mahdollista tehdä (etualalla)odottaa samalla kutualuilla.
Ei ole mahdollista suorittaaodottaa kun taasexpect_background on estetty.expect_background tietyn kutuviestin poistetaan ilmoittamalla uusi expect_background, jolla on sama kutukohde. julistamisestaexpect_background ilman mallia poistaa tietyn kutevan tunnuksen taustalla olevien kuvioiden yhteensopivuudesta.
odottaa ennen expect_args
ottaa samoja argumentteja kuinodottaa , mutta se palaa välittömästi. Pattern-action -pareja viimeisimmistäexpect_before samaa kutehakemaa lisätään implisiittisesti seuraaviinodottaa komentoja. Jos kuvio täsmää, sitä käsitellään ikään kuin se olisi määritetty kohdassaodottaa komento itsessään ja siihen liittyvä elin suoritetaanodottaa komento. Jos molemmista kuvioistaexpect_before jaodottaa voi sopia,expect_before mallia käytetään.
Jos mikään kuvio ei ole määritetty, kutukohtaa ei ole valittu mihinkään kuvioon.
Ellei a-i lippu,expect_before mallit ottelevat vastakkain sukupuolen kanssa, joka on määritelty ajankohtana, jolloinexpect_before komento suoritettiin (ei silloin, kun sen malli sovitettiin).
-Info-lippu aiheuttaaexpect_before palauttaa nykyiset määritykset siitä, millaisia kuvioita se vastaa. Oletusarvoisesti se raportoi nykyisestä kutualueesta. Valinnaisen kutee-tunnuksen määrittely voidaan antaa kyseisen kutevan tunnuksen tietoja varten. Esimerkiksi
expect_before -info -i $ proc
Enintään korkeintaan voidaan antaa yksi kutuviestin tunnus. Lippu-välillinen tukahduttaa suorat kutuviivat, jotka tulevat vain epäsuorista spesifikaatioista.
Kutable-tunnuksen määrittelyn sijasta lippu "-all" saa "-info" raportoimaan kaikista kutuviesteistä.
-Info-lipun tuotos voidaan käyttää uudestaan argumentiksi odottaa ennen.
expect_tty expect_args
on kuinodottaa mutta se lukee merkkejä / dev / tty (ts. käyttäjän näppäimistä). Oletusarvoisesti lukeminen suoritetaan keitetyössä. Niinpä rivejä on päätettävä paluumatkallaodottaa nähdä heidät. Tätä voidaan muuttaastty (ksstty alla oleva komento).
expect_user expect_args
on kuinodottaa mutta se lukee merkkejä stdin (eli käyttäjän näppäimistä). Oletusarvoisesti lukeminen suoritetaan keitetyössä. Niinpä rivejä on päätettävä paluumatkallaodottaa nähdä heidät.Tätä voidaan muuttaastty (ksstty alla oleva komento).
haarukka
luo uuden prosessin. Uusi prosessi on tarkka kopio nykyisestäOdottaa käsitellä asiaa. Menestyksestä,haarukka palauttaa 0: n uuteen (lapsi) prosessiin ja palauttaa prosessin prosessin tunnuksen vanhempaprosessiin. On epäonnistunut (poikkeuksetta resurssien puutteen vuoksi, esim. Swap-tilaa, muistia)haarukka palauttaa -1 vanhempiin prosesseihin, eikä lapsiprosessi luoduksi.
Haarukoidut prosessit päätyvät ulospoistuminen komento, aivan kuten alkuperäinen prosessi. Haarukoidut prosessit sallitaan kirjoittaa lokitiedostoihin. Jos et poista virheenkorjausta tai kirjaudu useimpiin prosesseihin, tulos voi olla hämmentävä.
Useat lukijat ja kirjoittajat voivat sekoittaa joitain pty-toteutuksia, jopa hetkellisesti. Näin ollen se on turvallisinhaarukka ennen kututamisprosesseja.
vuorovaikutuksessa string1 body1 … stringn bodyn
antaa nykyisen prosessin hallinnan käyttäjälle, niin että näppäinpainallukset lähetetään nykyiseen prosessiin ja nykyisen prosessin stdout ja stderr palautetaan.
String-kehon paria voidaan määrittää argumentteina, jolloin keho suoritetaan, kun vastaava merkkijono syötetään. (Oletuksena merkkijonoa ei lähetetä nykyiseen prosessiin.)tulkki komennon oletetaan, jos lopullinen elin puuttuu.
Jos argumentit kokoolla vuorovaikutuksessa lauseke vaatii useamman kuin yhden rivin, kaikki argumentit voidaan "sulauttaa" yhteen, jotta vältetään kunkin rivin lopettaminen vastakkaisella kielellä. Tässä tapauksessa tavanomaiset Tcl-substituutit tapahtuvat rintaliiveistä huolimatta.
Esimerkiksi seuraavat komennot toimivat vuorovaikutuksessa seuraavien merkkijono-osapuolten kanssa: Kun ^ Z painetaan,Odottaa on keskeytetty. (Sen-Palauta lippua palauttaa päätemoodit.) Kun ^ A painetaan, käyttäjä näkee "kirjoitit ohjauksen A" ja prosessi lähetetään ^ A. Kun $ on painettu, käyttäjä näkee päivämäärän. Kun ^ C painetaan,Odottaa poistuu. Jos syötetään "foo", käyttäjä näkee "palkin". Kun ~~ painetaan,Odottaa tulkki toimii interaktiivisesti.
aseta CTRLZ 032 vuorovaikutteinen {-reset $ CTRLZ {exec -tappi -STOP pid} 001 {send_user "kirjoitit valvonta-A n"; lähetä " 001"} $ {send_user "Päivämäärä on kelloformaatti kello sekunnissa."} 003 exit foo {send_user "bar"} ~~}
Kielet-runkopareissa jouset rinnastetaan siinä järjestyksessä kuin ne on lueteltu argumentteina. Osittaisia vihjeitä ei lähetetä nykyiseen prosessiin ennen kuin loppu tulee. Jos merkkejä syötetään siten, ettei ottelu enää ole mahdollista, vain merkkijono osa lähetetään prosessiin, joka ei voi aloittaa uutta ottelua. Niinpä merkkijonoja, jotka ovat osittaisten ottelujen alivärejä, voivat vastata myöhemmin, jos alkuperäiset stringsit, jotka yrittivät vastata, lopulta epäonnistuvat.
Oletusarvon mukaan merkkijonon täsmäyttäminen on täsmälleen vailla luonnollisia kortteja. (Sitä vastoinodottaa komento käyttää oletusarvoisesti globaaleja kuvioita.)-Ex lippua voidaan käyttää sellaisten kuvioiden suojaamiseen, jotka muuten sopisivat yhteenolla vuorovaikutuksessa lippuja. Kaikki "-" -alkuisesta kuvioista tulisi suojata tällä tavoin. (Kaikki merkkijonot, jotka alkavat "-", varataan tuleville vaihtoehdoille.)
-re lippu pakottaa merkkijonon tulkittamaan regexp-tyyppisen kuvion. Tällöin muuttujaan tallennetaan vastaavat alivälit interact_out samalla tavoinodottaa tallentaa tuotoksen muuttujaanexpect_out .-indices lippua tuetaan samalla tavoin.
KaavaeOF esittelee toiminnon, joka suoritetaan tiedoston loppuessa. ErillineneOF malli voi myös seurata-Output lippu, jolloin se sovitetaan, jos eof on havaittu kirjoitettaessa lähtöä. OletusarvoeOF toiminta on "paluuta", jotenolla vuorovaikutuksessa yksinkertaisesti palauttaa minkä tahansa EOF: n.
KaavaAikalisä esittelee aikakatkaisun (sekunteina) ja toimet, jotka suoritetaan sen jälkeen, kun merkkejä ei ole luettu tietyn ajan.Aikalisä kuvio koskee viimeksi määritettyä prosessia. Ei ole oletusviiveaikaa. Special variable "timeout" (jota käytetäänodottaa komento) ei vaikuta tähän aikakatkaisuun.
Esimerkiksi seuraavaa lausetta voitaisiin käyttää autologoutiin käyttäjiä, jotka eivät ole kirjoittaneet mitään tunnin ajan, mutta joilla on yhä usein järjestelmäviestejä:
vuorovaikutteinen -input $ user_spawn_id aikakatkaisu 3600 paluu -output $ spawn_id
Jos kuvio on avainsanatyhjä , ja nollat sallitaan (remove_nulls komento), vastaava elin suoritetaan, jos yhdeksi ASCII 0: ksi on sovitettu. Ei ole mahdollista vastata 0 tavua glob- tai regexp-mallien kautta.
Liitemerkin esikuoritus-kirjoitan aiheuttaa muuttujan interact_out (spawn_id) asetetaan spawn_id: lle, joka sopi kuvioon (tai eof).
Toimet kutentauko jajatkaa aiheuttaa kontrollirakenteita (so.varten , proc ) käyttäytyä tavallisella tavalla. kuitenkinpalata aiheuttaa vuorovaikutuksen palata sen soittajalle, kun taasinter_return syytolla vuorovaikutuksessa aiheuttaa paluun soittajalle. Esimerkiksi, jos "proc foo" kutsutaanolla vuorovaikutuksessa joka sitten toteutti toiminnoninter_return , proc foo palaisi. (Tämä tarkoittaa sitä, että josolla vuorovaikutuksessa puheluttulkki kirjoittamalla vuorovaikutteisestipalata aiheuttaa vuorovaikutuksen jatkuvan, kun taasinter_return aiheuttaa vuorovaikutuksen palata soittajalle.)
Aikanaolla vuorovaikutuksessa , raakamoodia käytetään siten, että kaikki merkit voidaan siirtää nykyiseen prosessiin.Jos nykyinen prosessi ei löydä työn ohjaussignaaleja, se pysähtyy, jos se lähettää pysäytyssignaalin (oletusarvoisesti ^ Z). Voit käynnistää sen uudelleen lähettämällä jatkuvan signaalin (kuten "kill -CONT"). Jos haluat todella lähettää SIGSTOP: n tällaiseen prosessiin (^ Z), harkitse ensin kutemista csh ensin ja käynnistä sitten ohjelma. Toisaalta, jos haluat lähettää SIGSTOPinOdottaa itse, ensimmäisenpuhelun tulkki (ehkä käyttämällä poistumissignaalia) ja paina sitten ^ Z.
String-rungon paria voidaan käyttää lyhenteenä, jotta vältytään tultaessa tulkkiin ja suorittamaan komentojen vuorovaikutteisesti. Edellistä päätelaitetta käytetään, kun jono-kehon parin runko on suoritettu.
Nopeutta varten toiminnot suoritetaan raakamoodissa oletuksena.-Palauta lippu palauttaa päätelaitteen aiemmalle tilalleolla vuorovaikutuksessa (poikkeuksetta, keitetyt tilat). Huomaa, että tilan ollessa kytkettynä kirjoitetut merkit saattavat kadota (eräiden järjestelmien pääteajurien valitettava ominaisuus). Ainoa syy käyttää-Palauta on, jos toiminto riippuu käynnistyksestä keitetyssä tilassa.
-echo lippu lähettää merkkejä, jotka vastaavat seuraavia kuvioita takaisin prosessiin, joka luo ne kun jokainen merkki on luettu. Tämä voi olla hyödyllinen, kun käyttäjän on saatava palautetta osittain kirjoitetuista kuvioista.
Jos kuviota toistetaan, mutta lopulta se ei onnistu, merkit lähetetään kerättyyn prosessiin. Jos kutennettu prosessi sitten heijastaa niitä, käyttäjä näkee merkit kahdesti.-echo on todennäköisesti vain tarkoituksenmukaista tilanteissa, joissa käyttäjä ei todennäköisesti pysty täyttämään mallia. Esimerkiksi seuraava osio on rftp, rekursiivinen ftp-skripti, jossa käyttäjää kehotetaan syöttämään ~ g, ~ p tai ~ l saadakseen, laittamaan tai luetteloimaan nykyistä rekisteriä. Nämä ovat niin kaukana tavanomaisista ftp-komennoista, että käyttäjä ei todennäköisesti kirjoita ~ seuraa mitään muuta, paitsi virheellisesti, jolloin he luultavasti vain jättävät tuloksen huomiotta.
vuorovaikutteinen {-echo ~ g {getcurdirectory 1} -echo ~ l {getcurdirectory 0} -echo ~ p {putcurdirectory}}
-nobuffer lippu lähettää merkkejä, jotka vastaavat seuraavia kuvioita tulostusprosessiin merkkien luettaessa.
Tämä on hyödyllistä, kun haluat, että ohjelma palaa takaisin kuvioon. Seuraavassa voidaan esimerkiksi seurata, missä henkilö soittaa (Hayes-tyyppinen modeemi). Joka kerta kun "atd" näkyy, komentosarja kirjaa loput rivistä.
proc lognumber {} {interact -nobuffer -re "(. *) palauttaa $ log" kellonmuoto kello sekuntia: soitettu $ interact_out (1, merkkijono) "} vuorovaikutus -nobuffer" atd "lognumber
Aikanaolla vuorovaikutuksessa , aiempi käyttölog_user jätetään huomiotta. Erityisesti,olla vuorovaikutuksessa pakottaa sen lähdön kirjautumaan (lähetetään vakiotulokseen), koska oletetaan, että käyttäjä ei halua toimia sokeasti.
-o lippu aiheuttaa minkä tahansa seuraavien avainkehysparien soveltamisen nykyisen prosessin lähdölle. Tämä voi olla hyödyllistä esimerkiksi silloin, kun käsitellään isänniä, jotka lähettävät ei-toivottuja merkkejä telnet-istunnon aikana.
Oletuksena,olla vuorovaikutuksessa odottaa käyttäjän kirjoittavan stdin ja lukemisen stdoutOdottaa prosessi itse.-u lippu ("käyttäjä") tekeeolla vuorovaikutuksessa etsiä käyttäjää sen argumentin nimettynä prosessina (joka on kutuutunut id).
Tämä sallii kaksi liityntäprosessia yhdistää toisiinsa ilman selkeää silmukkaa. Vianmäärityksen tukemiseksi odottaa diagnostiikan aina stderr (tai stdout tiettyjen kirjautumis- ja virheenkorjaustietojen). Samasta syystätulkki komento lukee vuorovaikutteisesti stdin.
Esimerkiksi seuraava fragmentti luo kirjautumisprosessin. Sitten se soittaa käyttäjälle (ei esitetty) ja liittää ne yhteen. Tietenkin jokainen prosessi voi korvata kirjautumiseen. Esimerkiksi kuori antaisi käyttäjälle mahdollisuuden työskennellä antamatta tiliä ja salasanaa.
spawn login set login $ spawn_id spawn kärki modeemi # soita takaisin käyttäjäksi # liitä käyttäjä sisäänkirjautumiseen interact -u $ login
Jos haluat lähettää tuotetta useisiin prosesseihin, listaa jokainen kutehakemistoluettelo, jonka esipaino on a-Output lippu. Lähtökuvioiden tunnisteryhmän tulo voidaan määrittää käyttämällä ainput lippu. (Molemmatinput ja-Output voi tehdä listoja samassa muodossa kuin-i lippuodottaa komento, paitsi että any_spawn_id ei ole mielekästä sisäänolla vuorovaikutuksessa .) Kaikki seuraavat lippuja ja merkkijonoja (tai kuvioita) koskevat tätä syöttöä, kunnes toinen sisääntulolippu tulee näkyviin. Jos eiinput näkyviin,-Output tarkoittaa "-input $ user_spawn_id -output". (Samalla tavalla, jossa ei oleinput .) Jos yksiinput on määritetty, se ohittaa $ user_spawn_id. Jos toineninput on määritetty, se ohittaa $ spawn_id. lisä-input liput voidaan määritellä.
Kaksi implisiittistä syöttöprosessia oletuksena on, että niiden tuotokset määritetään $ spawn_id ja $ user_spawn_id (käänteisesti). Josinput lippu ilmestyy ilman numeroa-Output lippu, kyseisestä prosessista olevat merkit hylätään.
-i lippu tuo korvaamaan nykyisen spawn_id-arvon, kun mikään muu ei oleinput tai-Output käytetään lippuja. -I-lippu merkitsee -o-merkintää.
On mahdollista muuttaa prosessit, joita vuorovaikutuksessa käytetään epäsuorien kutujen tunnusten avulla. (Epäsuorat kutuviivat on kuvattu odotuskomennon osassa.) Epäsuorat kutualuetunnukset voidaan määrittää -i, -u, -input- tai -vientilipuilla.
tulkki args
aiheuttaa käyttäjälle vuorovaikutteisen kehotuksenOdottaa ja Tcl-komentoja. Kunkin komennon tulos tulostetaan.
Toimet kutentauko jajatkaa aiheuttaa kontrollirakenteita (so.varten , proc ) käyttäytyä tavallisella tavalla. kuitenkinpalata tulkki palaa soittajan luokseinter_return syyttulkki aiheuttaa paluun soittajalle. Esimerkiksi, jos "proc foo" kutsutaantulkki joka sitten toteutti toiminnoninter_return , proc foo palaisi. Mikä tahansa muu komento aiheuttaatulkki jatkaa uusien komentojen pyytämistä.
Oletuksena kehote sisältää kaksi kokonaislukua. Ensimmäinen kokonaisluku kuvaa arviointipinon syvyyttä (eli kuinka monta kertaa Tcl_Eval on kutsuttu). Toinen kokonaisluku on Tcl-historiantunniste. Kysely voidaan asettaa määrittämällä menettely, jonka nimi on "prompt1", jonka paluuarvo tulee seuraavaa kehotetta. Jos lausekkeessa on avoimia hintatarjouksia, parens, braces tai kannakkeita, toissijainen kehote (oletuksena "+>") annetaan uuden rivin kanssa. Toissijainen kehote voidaan asettaa määrittelemällä menettely "prompt2".
Aikanatulkki , käytetään keitettyä tilaa, vaikka sen soittaja olisi käyttänyt raakamoodia.
Jos stdin on suljettu,tulkki palaa, ellei-eof käytetään lippua, jolloin käytetään myöhempiä argumentteja.
log_file args -a -tiedosto
Jos tiedostonimi annetaan,loki tiedosto tallentaa tiedoston istuntoselostuksen (alkavan siinä vaiheessa).loki tiedosto lopettaa tallennuksen, jos argumenttia ei anneta. Kaikki aikaisemmat lokitiedostot suljetaan.
Tiedostonimen sijaan Tcl-tiedoston tunniste voidaan antaa käyttämällä-avata tai-leaveopen lippuja. Tämä on samanlainen kuinkutea komento. (Katsokutea lisätietoja.)
-a lippujoukkojen ulostulo kirjattavaksi, jota alistettiinlog_user komento.
Oletusarvoisestiloki tiedosto komento liittää vanhoihin tiedostoihin sen sijaan, että ne katkaisivat ne, jotta se olisi helppo ottaa pois päältä ja useita kertoja yhdessä istunnossa. Voit katkaista tiedostoja käyttämällä-noappend lippu.
-tiedot lippu aiheuttaa log_file palauttaa kuvaus viimeisimmistä ei-info-argumentteista.
log_user -info | 0 | 1
Oletusarvoisesti lähetys / odota dialogi kirjataan stdoutiin (ja lokitiedosto, jos se on auki). Stdout-kirjaus poistetaan komennolla "log_user 0" ja palautetaan "log_user 1" kautta. Lokitiedostoon kirjaaminen ei ole muuttunut.
-tiedot lippu aiheuttaa log_user palauttaa kuvaus viimeisimmistä ei-info-argumentteista.
match_max -d -i spawn_id koko
määrittelee puskurin koon (tavuina), jota käytetään sisäisestiodottaa . Ei koko argumentti, nykyinen koko palautetaan.
Kanssa-D lippu, oletuskoko on asetettu. (Alkuperäinen oletusarvo on 2000.)-i lippu, koko asetetaan nimetylle kutualueelle, muussa tapauksessa se on asetettu nykyiseen prosessiin.
päällekkäinen - # spawn_id - # spawn_id … ohjelma args
toteuttaja "ohjelmoida args "sijasta nykyistäOdottaa ohjelma, joka päättyy. Paljas yhdysviiva-argumentti pakottaa komennon nimen eteen, ikään kuin se olisi kirjautumiskuori. Kaikki spawn_ids suljetaan lukuun ottamatta argumentteja kutsuttuja. Nämä kartoitetaan nimetyille tiedostunnisteille.
Spawn_idit on kartoitettu tiedostojen tunnisteiksi uuden ohjelman perimiseksi. Esimerkiksi seuraava rivi ajaa shakkia ja sallii sen olevan ohjattavissa nykyisellä prosessilla - esim. Shakin päälliköltä.
peitto -0 $ spawn_id -1 $ spawn_id -2 $ spawn_id shakki
Tämä on tehokkaampaa kuin "vuorovaikutteinen -u", mutta se uhraa kykyä ohjelmoidun vuorovaikutuksen jälkeenOdottaa prosessi ei enää ole hallinnassa.
Huomaa, että mitään säätöpäätettä ei ole. Näin ollen, jos irrotat tai räätälöität vakiotulon, ohjelmat, jotka tekevät työnhallintaa (kuoret, kirjautumiset jne.), Eivät toimi oikein.
pariteetti -d -i spawn_id arvo
määrittelee, onko pariteetin säilytettävä tai hävitettävä kutomatun prosessin tuotosta. Jos arvo on nolla, pariteetti on riisuttu, muuten se ei ole riisuttu. Ei arvo argumentti, nykyinen arvo palautetaan.
Kanssa-D lippu, oletusarvoinen pariteettiarvo on asetettu. (Alkuperäinen oletusarvo on 1, eli pariteettia ei poisteta.)-i lippua, pariteettiarvo asetetaan nimetylle kutualueelle, muussa tapauksessa se on asetettu nykyiselle prosessille.
remove_nulls -d -i spawn_id arvo
määritetään, säilytetäänkö nollat vai poistetaankö kutuutettujen prosessien tuotosta ennen kuvion sovittamista tai tallentamista muuttujaan expect_out tai interact_out . Jos arvo on 1, nollat poistetaan. Jos arvo on 0, nollia ei poisteta. Ei arvo argumentti, nykyinen arvo palautetaan.
Kanssa-D lippu, oletusarvo on asetettu. (Alkuperäinen oletusarvo on 1, eli nollat poistetaan.)-i lippu, arvo on asetettu nimetylle kutehakemistolle, muuten se on asetettu nykyiselle prosessille.
Onko nullit poistettu,Odottaa tallentaa nolla tavua lokiin ja stdoutiin.
lähetä -flags merkkijono
lähettää jono nykyiseen prosessiin. Esimerkiksi komento
lähetä "hello world"
lähettää hahmoja, jotka ovat nykyisessä prosessissa. (Tcl sisältää printf-kaltaisen komennon (nsmuoto ), joka voi rakentaa mielivaltaisesti monimutkaisia merkkijonoja.)
Hahmot lähetetään välittömästi, vaikka ohjelmat, joissa on rivi-puskuroitu syöte, eivät lue merkkejä, ennen kuin palautusmerkki lähetetään. Palautusmerkki on merkitty " r".
-- lippu pakottaa seuraavan argumentin tulkitsemaan merkkijono eikä lippu.Mikä tahansa merkkijono voi edeltää "-" onko se todellakin lippua. Tämä tarjoaa luotettavan mekanismin muokattavien merkkijonojen määrittelemiseksi ilman, että ne laukaisevat ne, jotka vahingossa näyttävät lippuja. (Kaikki merkkijonot, jotka alkavat "-", varataan tuleville vaihtoehdoille.)
-i lippu ilmoittaa, että merkkijono lähetetään nimeltä spawn_id. Jos spawn_id on user_spawn_id , ja päätelaite on raakamoodissa, merkkijonossa olevat uudet rivit käännetään paluu-uudelle rivin sekvensseille niin, että ne näyttävät olevan terminaalin ollessa valmiustilassa.-raaka lippu poistaa tämän käännöksen käytöstä.
-tyhjä lippu lähettää nollimerkkejä (0 tavua). Oletusarvoisesti lähetetään yksi nolla. Numero voi olla kokonaisluku-tyhjä ilmoittaa, kuinka monta nollaa lähetetään.
-tauko lippu luo tauon kunnon. Tällöin on järkevää vain, jos kutuviittaus viittaa tty-laitteeseen, joka avataan "spawn -open" kautta. Jos olet kehittänyt prosessin, kuten kärjen, käytä kärkikokousta tauon luomiseen.
-S lippujen voimat lähetetään lähetettäväksi "hitaasti", jolloin vältetään yhteinen tilanne, jossa tietokone ulkoistaa tulostuspuskurin, joka on suunniteltu ihmiselle, joka ei koskaan poistaisi samaa puskuria. Tätä lähtöä hallitsee muuttujan "send_slow" arvo, joka ottaa kaksiosainen luettelo. Ensimmäinen elementti on kokonaisluku, joka kuvaa atomien lähettämien tavujen määrää. Toinen elementti on todellinen luku, joka kuvaa sekuntien lukumäärää, jonka mukaan atomi- lähetykset on erotettava toisistaan. Esimerkiksi "set send_slow {10 .001}" pakottaisi "send -s" lähettää merkkijonoja 1 millisekunnilla jokaisen lähetetyn 10 merkin välein.
-h lippu voimat lähetetään lähetettäväksi (jonkin verran) kuin ihmisen kirjoittaminen. Merkkien välillä esiintyy ihmisen kaltaisia viiveitä. (Algoritmi perustuu Weibull-jakeluun, jossa on modifikaatiot tämän sovelluksen mukaisiksi.) Tätä lähtöä ohjataan muuttujan "send_human" arvon avulla, joka ottaa viiden elementtiluettelon. Ensimmäiset kaksi elementtiä ovat merkkien keskimääräinen saapumisaika sekunteina. Ensimmäistä käytetään oletusarvoisesti. Toista käytetään sanan päätepisteissä, simuloimaan hienovaraisia taukoja, jotka satunnaisesti esiintyvät tällaisissa siirtymissä. Kolmas parametri on muuttujan mittaus, jossa .1 on varsin muuttuvaa, 1 on kohtuullisen muuttuva ja 10 on täysin muuttumaton. Ääripäät ovat 0 - ääretön. Viimeiset kaksi parametria ovat vastaavasti vähimmäis- ja maksimitalletusajan. Minimi ja maksimi käytetään viimeisenä ja "leike" viimeinen aika. Perimmäinen keskiarvo voi olla melko erilainen kuin annettu keskiarvo, jos minimi- ja maksimaalinen leike riittävät arvoihin.
Esimerkiksi seuraava komento emuloi nopeaa ja yhtenäistä konekirjoitinta:
set send_human {.1 .3 1 .05 2} lähetä -h "Olen nälkäinen.
kun taas seuraavat voivat olla sopivampia hangoverin jälkeen:
set send_human {.4 .4 .2 .5 100} lähetä -h "Goodd-puolueen lash night!"
Huomaa, että virheitä ei ole simuloitu, mutta voit itse määrittää virheenkorjaustilanteet upottamalla virheitä ja korjauksia lähetyssarjassa.
Lippujen lähettäminen nollimerkkien, lähetysten lähettämiseksi, hidaslähtöisyyden pakottamiseksi ja ihmisen tyylien tuottamiseksi ovat toisistaan poissulkevia. Käytetään vain aiemmin määritettyä. Lisäksi ei jono argumentti voidaan määrittää lippujen avulla nollamerkkien tai taukojen lähettämiseen.
On hyvä edetä ennen ensimmäistälähettää prosessiinodottaa. odottaa odottaa prosessin alkamista, kun taaslähettää ei voi. Erityisesti, jos ensimmäinenlähettää suoritetaan ennen kuin prosessi alkaa käynnistyä, vaarannat sen, että tietosi jätetään huomiotta. Jos tilanteissa, joissa vuorovaikutteiset ohjelmat eivät tarjoa alustavaa kehotetta, voit edeltäälähettää viivästymällä kuten:
# Jotta hakkerit eivät saa vihjeitä siitä, miten murtautua, # tämä järjestelmä ei pyydä ulkoista salasanaa. # Odota 5 sekuntia, jotta exec täyttää spawn telnet very.secure.gov nukkumaan 5 lähettää salasanaa
exp_send on alias lähettää. Jos käytät Expectkia tai muuta odotettua versiota Tk-ympäristössä,lähettää määritellään Tk: llä täysin erilaiseen tarkoitukseen.exp_send on tarkoitettu ympäristöjen yhteensopivuuden varmistamiseksi. Samanlaisia aliaksia annetaan muille odotettavissa oleville muille lähetyskomentoille.
send_error -flags merkkijono
on kuinlähettää , paitsi että lähetys lähetetään stderrille nykyisen prosessin sijasta.
send_log - merkkijono
on kuinlähettää , paitsi että merkkijono lähetetään vain lokitiedostoon (ksloki tiedosto .) Argumentit ohitetaan, jos lokitiedostoa ei ole avattu.
send_tty -flags merkkijono
on kuinlähettää , paitsi että lähetys lähetetään / dev / tty: lle pikemmin kuin nykyiseen prosessiin.
send_user -flags merkkijono
on kuin




