Ang inaasahan ay isang programa na nagsasalita sa iba pang mga interactive na programa ayon sa isang script. Kasunod ng script, inaasahan ng Expect kung ano ang maaaring inaasahan mula sa isang programa at kung ano ang nararapat na tugon. Ang isang interpreted na wika ay nagbibigay ng mga istraktura ng kontrol sa pagsasanib at mataas na antas upang idirekta ang dialog. Bilang karagdagan, maaaring kontrolin ng user at direktang makipag-ugnay kapag nais, pagkatapos ay bumalik na kontrol sa script.
Ang Expectk ay isang halo ng Expect and Tk. Ito ay gumaganap tulad ng inaasahan at inaasahan ng Tk. Ang inaasahan ay maaari ding gamitin nang direkta sa C o C ++ na walang Tcl.
Ang pangalan na "Asahan" ay mula sa ideya ng magpadala / asahan ang mga pagkakasunud-sunod na pinapakalat ng uucp, kermit at iba pang mga programang kontrol sa modem. Gayunpaman hindi tulad ng uucp, inaasahan ay pangkalahatan upang maaari itong tumakbo bilang command ng user-level na may anumang programa at gawain sa isip. Asahan ay maaaring makipag-usap sa maraming mga programa sa parehong oras.
Ano ang Magagawa ng Asahan
Halimbawa, narito ang ilang mga bagay na magagawa ng inaasahang utos:
- Pakawalan ang iyong computer upang i-dial ka pabalik, upang makapag-log in ka nang hindi nagbabayad para sa tawag.
- Magsimula ng isang laro at kung ang pinakamainam na configuration ay hindi lilitaw, i-restart ito muli at muli) hanggang sa ito ay, at pagkatapos ay ibigay ang kontrol sa iyo.
- Patakbuhin ang fsck, at bilang tugon sa mga tanong nito, sagutin ang "oo" o "hindi" o ibalik ang kontrol sa iyo, batay sa predetermined criteria.
- Kumonekta sa isa pang network at awtomatikong kunin ang iyong mail upang lumitaw ito kung ito ay orihinal na ipinadala sa iyong lokal na sistema.
- Magdala ng mga variable sa kapaligiran, kasalukuyang direktoryo, o anumang uri ng impormasyon sa buong rlogin, telnet, tip, su, o chgrp
Mayroong iba't ibang mga kadahilanan kung bakit hindi maaaring isagawa ng shell ang mga gawaing ito. Ang lahat ay posible sa inaasahan.
Sa pangkalahatan, ang Asahan ay kapaki-pakinabang para sa pagpapatakbo ng anumang programa na nangangailangan ng pakikipag-ugnayan sa pagitan ng programa at ng gumagamit. Lahat ng kailangan ay ang pakikipag-ugnayan ay maaaring characterized sa programming. Asahan ay maaari ring magbigay ng kontrol sa likod ng gumagamit nang hindi pahintu-hiwalay ang programa. Katulad nito, ang user ay maaaring bumalik control sa script sa anumang oras.
Paggamit
Inaasahan nagbabasa ng cmdfile para sa isang listahan ng mga utos upang isagawa. Ang inaasahan ay maaaring mahigpit na mahihingi sa mga sistema na sumusuporta sa #! notasyon sa pamamagitan ng pagmamarka ng script bilang executable at paggawa ng unang linya sa script:
#! / usr / local / bin / expect -f
Siyempre, ang landas ay dapat tumpak na naglalarawan kung saan inaasahan ang buhay. / usr / local / bin ay isang halimbawa lamang.
Ang flag na -c ay nagsisimula sa isang command na maisagawa bago ang alinman sa script. Ang utos ay dapat na naka-quote upang maiwasan ang pagiging nasira ng shell. Maaaring gamitin ang pagpipiliang ito nang maraming beses. Maramihang mga utos ay maaaring isagawa sa isang solong -c sa pamamagitan ng paghihiwalay sa mga ito sa mga semicolon. Ang mga utos ay pinapatupad sa pagkakasunud-sunod na lumilitaw. Kapag gumagamit ng Expectk, tinukoy ang opsyong ito bilang-komand.
Ang -d na flag ay nagbibigay-daan sa ilang diagnostic output, na pangunahing nag-uulat ng panloob na aktibidad ng mga utos tulad ng inaasahan at nakikipag-ugnayan. Ang bandilang ito ay may parehong epekto bilang "exp_internal 1" sa simula ng script na inaasahan, kasama ang bersyon ng Expect ay nakalimbag.
Ang -D na bandila ay nagbibigay-daan sa isang interactive na debugger. Dapat sundin ang isang integer value. Ang debugger ay magkakontrol bago ang susunod na pamamaraan ng Tcl kung ang halaga ay di-zero o kung ang isang ^ C ay pinindot o isang breakpoint ay pindutin, o iba pang naaangkop na debugger command ay lumilitaw sa script. Kapag gumagamit ng Expectk, tinukoy ang opsyong ito bilang -Debug.
Ang -f flag ay nagsisimula sa isang file kung saan magbasa ng mga command. Ang bandila mismo ay opsyonal na ito ay kapaki-pakinabang lamang kapag ginagamit ang #! notasyon, upang ang iba pang mga argumento ay maibibigay sa command line. Kapag gumagamit ng Expectk, tinukoy ang opsyong ito bilang -file.
Bilang default, ang command file ay mababasa sa memorya at papatayin sa kabuuan nito. Paminsan-minsan ay kanais-nais na basahin ang mga file ng isang linya sa isang pagkakataon. Upang pilitin ang mga di-makatwirang mga file na hawakan sa ganitong paraan, gamitin ang -b na bandila. Kapag gumagamit ng Expectk, tinukoy ang opsyong ito bilang -buffer.
Kung ang string "-" ay ibinigay bilang isang filename, ang karaniwang input ay binabasa sa halip. Gamitin ang "./-" upang basahin mula sa isang file na talagang pinangalanang "-".
Ang -i flag nagiging sanhi ng inaasahan upang interactive na prompt para sa mga utos sa halip ng pagbabasa ng mga ito mula sa isang file. Tinapos ang pag-prompt sa pamamagitan ng command exit o sa EOF. Ang -i flag ay ipinapalagay na kung alinman sa isang command file o -c ay ginagamit. Kapag gumagamit ng Expectk, tinukoy ang opsyong ito bilang -interactive.
- Maaaring gamitin upang mabawasan ang dulo ng mga pagpipilian. Ito ay kapaki-pakinabang kung nais mong ipasa ang isang opsyon-tulad ng argumento sa iyong script nang hindi ito binigyang-kahulugan ng inaasahan. Maaari itong gamitin nang kapaki-pakinabang sa #! linya upang maiwasan ang anumang pagpapahiwatig ng bandila sa pamamagitan ng Inaasahan. Halimbawa, ang mga sumusunod ay iiwan ang mga orihinal na argumento kasama ang pangalan ng script sa variable argv .
#! / usr / local / bin / expect -
Tandaan na ang karaniwang getopt (3) at execve (2) na mga kombensiyon ay dapat na sundin kapag nagdadagdag ng mga argumento sa #! linya.
Ang file na $ exp_library / expect.rc ay awtomatikong gagamitin kung kasalukuyan, maliban kung ang -N flag ay ginagamit. (Kapag gumagamit ng Expectk, tinukoy ang opsyon na ito bilang -NORC.) Kaagad pagkatapos nito, awtomatikong galing ang file ~ / .expect.rc, maliban kung ang -n flag ay ginagamit. Kung tinukoy ang variable na DOTDIR ng kapaligiran, ito ay itinuturing bilang direktoryo at .expect.rc ay binasa mula roon. Kapag gumagamit ng Expectk, tinukoy ang opsyong ito bilang -norc.Ang pagkuha na ito ay nangyayari lamang pagkatapos maisagawa ang anumang mga flags ng -c.
-v nagiging sanhi Maghintay na i-print ang numero ng bersyon nito at lumabas. Ang nararapat na bandila sa Expectk, na gumagamit ng mahabang pangalan ng bandila, ay -bugbog.
Ang mga opsyonal args ay binuo sa isang listahan at naka-imbak sa variable na may pangalang argv at. Ang argc ay pinasimulan sa haba ng argv.
Ang argv0 ay tinukoy na ang pangalan ng script o binary kung walang script na ginagamit. Halimbawa, ang sumusunod na mga kopya ang pangalan ng script at ang unang tatlong argumento:
send_user "$ argv0 lrange $ argv 0 2 n"
Mga utos
Inaasahan ay gumagamit ng Tool Command Language. Ang Tcl ay nagbibigay ng control flow (kung, para, break), pagsusuri ng expression at ilang iba pang mga tampok tulad ng recursion at kahulugan ng pamamaraan. Ang mga utos na ginamit dito ngunit hindi tinukoy (nakatakda, kung, exec) ay mga utos ng Tcl. Ang inaasahan ay sumusuporta sa mga karagdagang utos. Maliban kung tinukoy, ang mga utos ay ibabalik ang walang laman na string.
Ang mga utos ay nakalista ayon sa alpabeto upang mabilis na maabot ang mga ito. Gayunpaman, mas madaling makahanap ng mga bagong user sa pamamagitan ng pagbabasa ng mga paglalarawan ng mga itlog ng isda, ipadala, inaasahan, at makipag-ugnayan, sa utos na iyon.
isara -slave -onexec 0 | 1 -i spawn_id
Isinasara ang koneksyon sa kasalukuyang proseso. Karamihan sa mga interactive na programa ay makikitang EOF sa kanilang stdin at exit; kaya naman malapit na kadalasan ay sapat na upang patayin ang proseso. Ang -i flag ay nagpapahayag ng proseso upang isara ang nararapat sa pinangalanang spawn_id.
Ang parehong inaasahan at nakikipag-ugnayan ay tiktikan kapag lumabas ang kasalukuyang proseso at halos magsasara, ngunit kung papatayin mo ang proseso sa pamamagitan ng, sabihin, "exec kill $ pid", kailangan mong tahasang tumawag nang malapit.
Tinutukoy ng flag ng -onexec kung ang id ng isda ay sarado sa anumang mga bagong proseso ng pagpapagana o kung ang proseso ay overlayed. Upang mag-iwan ng isang id ng bukang-bukong, gamitin ang halaga 0. Ang isang di-zero na integer na halaga ay pinipilit ang mga itlog ng isda na sarado sa anumang mga bagong proseso.
Isinasara ng flag -llave ang alipin na nauugnay sa spawn id. Kapag ang koneksyon ay sarado, ang alipin ay awtomatikong sarado pati na rin kung bukas pa rin ito.
Hindi mahalaga kung ang koneksyon ay sarado nang sarado o tahasang, dapat kang tumawag ng paghihintay upang i-clear ang katugmang kernel na proseso ng kernel. Ang malapit na utos ay hindi tumawag sa paghihintay dahil walang garantiya na ang pagsasara ng isang koneksyon sa proseso ay magiging dahilan upang lumabas ito.
debug -now 0 | 1
kumokontrol sa isang Tcl debugger na nagpapahintulot sa iyo na hakbang sa pamamagitan ng mga pahayag at magtakda ng mga breakpoint.
Walang mga argumento, ang isang 1 ay ibabalik kung ang debugger ay hindi tumatakbo, kung hindi, isang 0 ay ibinalik.
Sa isang argumento, nagsimula ang debugger. Sa isang 0 argument, ang debugger ay tumigil. Kung ang isang argumento ay nauna sa pamamagitan ng -nang bandila, ang debugger ay nagsimula kaagad. Kung hindi, ang debugger ay nagsimula sa susunod na pahayag ng Tcl.
Ang utos ng debug ay hindi nagbabago ng anumang mga traps. Ihambing ito sa simula Maghintay sa -D flag.
Ang disconnect command ay nagtatanggal ng isang proseso ng tinidor mula sa terminal. Patuloy itong tumatakbo sa background. Ang proseso ay binibigyan ng sarili nitong pangkat ng proseso. Ang standard I / O ay na-redirect sa / dev / null.
Gumagamit ang sumusunod na fragment na idiskonekta upang magpatuloy na patakbuhin ang script sa background.
kung ang {fork! = 0} lumabas sa exit. . .
Ang sumusunod na script ay bumabasa ng isang password at pagkatapos ay nagpapatakbo ng isang programa sa bawat oras na hinihingi ng isang password sa bawat oras na ito ay tumakbo. Nagbibigay ang script ng password upang mayroon ka lamang i-type ito nang isang beses.
ipadala_user "password? " expect_user -re "(. *) n" para sa {} 1 {} {if {fork! = 0} {sleep 3600; 1, string) r ". . . exit}
Ang isang kalamangan sa paggamit ng pag-disconnect sa shell na tampok na asynchronous na proseso (&) ay ang inaasahan na maaaring i-save ang mga parameter ng terminal bago ang pagtatanggal at pagkatapos ay ilapat ang mga ito sa mga bagong ptys. Sa & amp; Expect ay hindi magkaroon ng pagkakataon na basahin ang mga parameter ng terminal dahil ang terminal ay naka-disconnect ng oras Expect na natatanggap ng kontrol.
exit -opts kalagayan
nagiging dahilan upang lumabas o maghandang gawin ito.
Ang -onexit Ang flag ay nagiging sanhi ng susunod na argumento na gagamitin bilang isang handler sa exit. Kung walang argumento, ang kasalukuyang handler na exit ay ibabalik.
Ang -walang labasan Mga sanhi ng bandila Asahan upang maghanda upang lumabas ngunit huminto sa aktwal na pagbabalik ng kontrol sa operating system. Ang user-defined na handler na exit ay tumatakbo pati na rin ang sariling mga panloob na humahawak ng Expect. Walang karagdagang Mga inaasahang utos ang dapat isagawa. Ito ay kapaki-pakinabang kung tumatakbo ka Maghintay sa iba pang mga extension ng Tcl. Ang kasalukuyang interpreter (at pangunahing window kung nasa kapaligiran ng Tk) ay mananatiling upang ang iba pang mga extension ng Tcl ay malinis. Kung inaasahan lumabas ay tinatawag na muli (gayunpaman ito ay maaaring mangyari), ang mga humahawak ay hindi muling paglilipat.
Sa paglabas, ang lahat ng koneksyon sa mga proseso ng pagsasagawa ay sarado. Ang pagsasara ay napansin bilang isang EOF sa pamamagitan ng mga proseso ng pagsasagawa. lumabas wala nang iba pang mga pagkilos na lampas sa kung ano ang ginagawa ng normal na _exit (2) pamamaraan. Samakatuwid, ang mga proseso ng pagproseso na hindi nag-check para sa EOF ay maaaring patuloy na tumakbo. (Ang iba't ibang mga kundisyon ay mahalaga sa pagtukoy, halimbawa, kung ano ang mga senyales ng isang proseso na tinatangkilik ay ipapadala, ngunit ang mga ito ay nakasalalay sa sistema, kadalasang dokumentado sa ilalim ng exit (3).) Ang mga naipong proseso na patuloy na tatakbo ay pagmana ng init.
katayuan (o 0 kung hindi tinukoy) ay ibinalik bilang katayuan ng exit ng Asahan . lumabas ay ipinatupad lamang kung ang dulo ng script ay naabot.
exp_continue -continue_timer
Ang utos exp_continue nagpapahintulot asahan mismo upang ipagpatuloy ang pag-e-execute sa halip na bumalik gaya ng karaniwan. Bilang default exp_continue Nire-reset ang timer ng timeout. Ang -continue_timer pinipigilan ng bandila ang timer mula sa muling pag-restart. (Tingnan asahan para sa karagdagang impormasyon.)
exp_internal -f file na halaga
nagiging sanhi ng karagdagang mga utos upang magpadala ng diagnostic na impormasyon sa panloob Asahan upang stderr kung halaga ay di-zero. Ang output na ito ay hindi pinagana kung halaga ay 0. Ang diagnostic na impormasyon ay kinabibilangan ng bawat character na natanggap, at bawat pagtatangka na ginawa upang tumugma sa kasalukuyang output laban sa mga pattern.
Kung ang opsyonal file ay ibinigay, ang lahat ng normal at debugging output ay isinulat sa file na iyon (hindi alintana ang halaga ng halaga ). Anumang naunang diagnostic output file ay sarado.
Ang -info Ang mga flag na sanhi exp_internal upang ibalik ang isang paglalarawan ng pinakahuling argumento na hindi pang impormasyon na ibinigay.
exp_open args -i spawn_id
Nagbabalik ng isang Tcl file identifier na tumutugma sa orihinal na itlog ng isda id. Pagkatapos ay maaring gamitin ang tagatukoy ng file bilang kung binuksan ito ng Tcl bukas utos. (Hindi dapat gamitin ang id ng spawn maghintay hindi dapat papatayin.
Ang -Libre flag dahon ang spawn id bukas para ma-access sa pamamagitan ng mga utos na inaasahan. A maghintay Dapat na isagawa sa id ng itlog ng isda.
exp_pid -i spawn_id
Nagbabalik ang proseso ng id na nakaayon sa kasalukuyang proseso ng pagpapagana. Kung ang -i Ang bandila ay ginagamit, ang pid na bumalik ay tumutugma sa na ibinigay na id ng itlog ng isda.
exp_send
ay isang alias para sa magpadala .
exp_send_error
ay isang alias para sa send_error .
exp_send_log
ay isang alias para sa send_log .
exp_send_tty
ay isang alias para sa send_tty .
exp_send_user
ay isang alias para sa send_user .
exp_version -exit version
ay kapaki-pakinabang para sa pagtiyak na ang script ay tugma sa kasalukuyang bersyon ng Asahan.
Walang mga argumento, ang kasalukuyang bersyon ng Asahan ay ibinalik. Ang bersyon na ito ay maaaring naka-encode sa iyong script. Kung alam mo talaga na hindi ka gumagamit ng mga tampok ng mga pinakabagong bersyon, maaari mong tukuyin ang isang naunang bersyon.
Ang mga bersyon ay binubuo ng tatlong numero na pinaghihiwalay ng mga tuldok. Una ang pangunahing numero. Ang mga script na isinulat para sa mga bersyon ng Asahan na may isang iba't ibang mga pangunahing numero ay halos tiyak na hindi gumagana. exp_version nagbabalik ng isang error kung ang mga pangunahing numero ay hindi tumutugma.
Pangalawa ay ang menor de edad na numero. Ang mga script na isinulat para sa isang bersyon na may mas malaking menor de edad kaysa sa kasalukuyang bersyon ay maaaring depende sa ilang mga bagong tampok at hindi maaaring tumakbo. exp_version Nagbalik ang isang error kung tumutugma ang mga pangunahing numero, ngunit ang mas maliit na bilang ng script ay mas malaki kaysa sa pagtakbo Asahan .
Ikatlo ay isang numero na walang bahagi sa paghahambing ng bersyon. Gayunpaman, ito ay incremented kapag ang Asahan Ang pamamahagi ng software ay nabago sa anumang paraan, tulad ng sa pamamagitan ng karagdagang dokumentasyon o pag-optimize. I-reset ito sa 0 sa bawat bagong menor de edad na bersyon.
Kasama ang -exit bandila, Asahan nag-print ng isang error at labasan kung ang bersyon ay wala na sa petsa.
asahan -opts pat1 body1 … -opts patn bodyn
naghihintay hanggang sa ang isa sa mga pattern ay tumutugma sa output ng isang spawned na proseso, ang isang tinukoy na tagal ng panahon ay lumipas, o isang end-of-file ay nakikita. Kung ang huling katawan ay walang laman, maaari itong iwanan.
Mga pattern mula sa pinakabagong expect_before utos ay kaparehong ginagamit bago ang anumang iba pang mga pattern. Mga pattern mula sa pinakabagong expect_after utos ay kaparehong ginagamit pagkatapos ng anumang iba pang mga pattern.
Kung ang mga argumento sa buong asahan pahayag ay nangangailangan ng higit sa isang linya, ang lahat ng mga argumento ay maaaring "braced" sa isa upang maiwasan ang pagtatapos ng bawat linya sa isang backslash. Sa isang kaso na ito, ang karaniwang mga pagkalipol ng Tcl ay magaganap sa kabila ng mga tirante.
Kung ang isang pattern ay ang keyword tama , ang kaukulang katawan ay papatayin sa dulo ng file. Kung ang isang pattern ay ang keyword timeout , ang kaukulang katawan ay pinapatupad sa oras ng pag-timeout. Kung walang ginamit na keyword ng timeout, ang isang walang-kapantay na pagkilos na null ay papatupad sa oras ng pag-timeout. Ang tagal ng default na timeout ay 10 segundo ngunit maaaring itakda, halimbawa sa 30, sa pamamagitan ng command na "itakda ang timeout 30". Ang isang walang-katapusang pag-timeout ay maaaring itinalaga ng halaga -1. Kung ang isang pattern ay ang keyword default , ang kaukulang katawan ay pinapatupad sa alinman sa timeout o end-of-file.
Kung ang isang pattern tumutugma, pagkatapos ay ang kaukulang katawan ay naisakatuparan. asahan nagbabalik ang resulta ng katawan (o ang walang laman na string kung walang pattern na naitugmang). Sa kaganapan na tumutugma ang maramihang mga pattern, ang unang lumilitaw ay ginagamit upang pumili ng isang katawan.
Sa bawat oras na dumating ang bagong output, ito ay inihambing sa bawat pattern sa pagkakasunud-sunod ng mga ito ay nakalista. Sa gayon, maaari mong subukan ang kawalan ng isang tugma sa pamamagitan ng paggawa ng huling pattern ng isang bagay na garantisadong upang lumitaw, tulad ng isang prompt. Sa mga sitwasyon kung saan walang prompt, dapat mong gamitin timeout (tulad ng gagawin mo kung manu-mano mong nakikipag-ugnayan).
Ang mga pattern ay tinukoy sa tatlong paraan. Bilang default, tinukoy ang mga pattern tulad ng sa Tcl's pagtutugma ng string utos. (Ganitong mga pattern ay katulad din sa C-shell regular expression na karaniwang tinutukoy bilang "glob" pattern). Ang -gl Maaaring gamitin ang bandila upang protektahan ang mga pattern na maaaring tumugma sa iba asahan mga flag mula sa paggawa nito. Anumang pattern na nagsisimula sa isang "-" ay dapat protektado sa ganitong paraan. (Lahat ng mga string na nagsisimula sa "-" ay nakalaan para sa mga pagpipilian sa hinaharap.)
Halimbawa, ang sumusunod na fragment ay naghahanap ng isang matagumpay na pag-login. (Tandaan na abort ay itinuturing na isang pamamaraan na tinukoy sa ibang lugar sa script.)
asahan (abala {naglalagay abala n; exp_continue} Nabigo i-abort ang "hindi wastong password" abort timeout i-abort konektado}
Kinakailangan ang mga panipi sa ikaapat na pattern dahil naglalaman ito ng isang espasyo, na kung saan ay maaaring paghiwalayin ang pattern mula sa pagkilos.Ang mga pattern na may parehong aksyon (tulad ng sa ika-3 at ika-4) ay nangangailangan ng paglilista muli ng mga aksyon. Maaari itong maiwasan sa pamamagitan ng paggamit ng mga estilo ng estilo ng regexp (tingnan sa ibaba). Ang karagdagang impormasyon tungkol sa pagbubuo ng mga pattern ng estilo ng globo ay matatagpuan sa manwal ng Tcl.
Ang mga pattern ng estilo ng regexp ay sinusunod ang syntax na tinukoy ng Tcl's regexp (maikli para sa "regular na expression") na utos. Ang pattern ng regexp ay ipinakilala sa bandila -re . Ang nakaraang halimbawa ay maaaring muling isinulat gamit ang isang regexp bilang:
asahan (abala {naglalagay abala n; exp_continue} -re "failed | invalid password" abort timeout abort konektado}
Ang parehong mga uri ng mga pattern ay "unanchored". Nangangahulugan ito na hindi dapat tumugma ang mga pattern sa buong string, ngunit maaari itong magsimula at tapusin ang tugma sa kahit saan sa string (hangga't lahat ng iba ay tumutugma). Gamitin ^ upang tumugma sa simula ng isang string, at $ upang tumugma sa dulo. Tandaan na kung hindi ka maghintay para sa dulo ng isang string, ang iyong mga tugon ay maaaring madaling end up sa gitna ng string habang ang mga ito ay echoed mula sa proseso ng spawned. Habang gumagawa pa rin ng tamang mga resulta, ang output ay maaaring tumingin hindi natural. Kaya, ang paggamit ng $ ay hinihikayat kung maaari mong eksaktong ilarawan ang mga character sa dulo ng isang string.
Tandaan na sa maraming mga editor, ang ^ at $ ay tumutugma sa simula at dulo ng mga linya ayon sa pagkakabanggit. Gayunpaman, dahil ang inaasahan ay hindi oriented na linya, tumutugma ang mga character na ito sa simula at dulo ng data (kumpara sa mga linya) na kasalukuyang inaasahang buffer matching. (Gayundin, tingnan ang tala sa ibaba sa "hindi pagkatunaw ng sistema.")
Ang -ex Ang mga flag ay nagiging sanhi ng pattern na maitugma bilang isang "eksaktong" string. Walang pagpapakahulugan ng *, ^, atbp ang ginawa (bagaman ang karaniwang mga convention ng Tcl ay dapat pa rin sundin). Ang mga eksaktong mga pattern ay palaging hindi nakalaan.
Ang -nag-imbak Ang bandila ay nagiging sanhi ng mga uppercase character ng output upang ihambing na kung sila ay maliliit na character. Ang pattern ay hindi apektado.
Habang nagbabasa ng output, higit sa 2000 bytes ang puwersahin ang mga naunang byte na "nakalimutan". Ito ay maaaring mabago gamit ang function match_max . (Tandaan na ang sobrang malalaking halaga ay maaaring makapagpabagal sa pattern matcher.) Kung patlist ay full_buffer , ang kaukulang katawan ay papatayin kung match_max ang mga byte ay natanggap at walang iba pang mga pattern na naitugmang. Kung o hindi ang full_buffer Ang keyword ay ginagamit, ang nakalimutan na mga character ay nakasulat sa expect_out (buffer).
Kung patlist ang keyword wala , at nulls ay pinapayagan (sa pamamagitan ng remove_nulls command), ang kaukulang katawan ay papatayin kung ang isang solong ASCII 0 ay katugma. Ito ay hindi posible upang tumugma 0 bytes sa pamamagitan ng glob o regexp pattern.
Sa pagtutugma ng isang pattern (o eof o full_buffer), anumang pagtutugma at dati walang kaparis na output ay naka-save sa variable expect_out (buffer) . Hanggang 9 mga regexp substring match ay naka-save sa mga variable expect_out (1, string) sa pamamagitan ng expect_out (9, string) . Kung ang - Mga ugnayan Ang bandila ay ginagamit bago ang isang pattern, ang panimulang at pangwakas na mga indeks (sa isang form na angkop para sa lrange ) ng 10 mga string ay naka-imbak sa mga variable expect_out (X, magsimula) at expect_out (X, dulo) kung saan ang X ay isang digit, tumutugma sa posisyon ng substring sa buffer. 0 ay tumutukoy sa mga string na tumutugma sa buong pattern at ay binuo para sa mga pattern ng glob pati na rin ang mga pattern ng regexp. Halimbawa, kung ang isang proseso ay gumawa ng output ng "abcdefgh n", ang resulta ng:
umasa "cd"
ay parang ang mga sumusunod na pahayag ay naisakatuparan:
set expect_out (0, string) cd set expect_out (buffer) abcd
at "efgh n" ay naiwan sa output buffer. Kung ang isang proseso ay gumawa ng output na "abbbcabkkkka n", ang resulta ng:
umasa -indices -re "b (b *). * (k +)"
ay parang ang mga sumusunod na pahayag ay naisakatuparan:
set expect_out (0, simulan) 1 set expect_out (0, string) bbbcabkkkk set expect_out (1, simulan) 2 set expect_out (1, (2, simulan) 10 set expect_out (2, katapusan) 10 set expect_out (2, string) k set expect_out (buffer) abbbcabkkkk
at "isang n" ay naiwan sa output buffer. Ang pattern na "*" (at -re ". *") Ay mag-flush sa output buffer nang hindi magbabasa ng anumang karagdagang output mula sa proseso.
Karaniwan, ang pinarehang output ay itinapon mula sa mga panloob na buffer ng Expect. Maaaring maiiwasan ito sa pamamagitan ng prefixing pattern sa -notransfer bandila. Ang bandila na ito ay lalong kapaki-pakinabang sa pag-eksperimento (at maaaring i-abbreviate sa "-not" para sa kaginhawaan habang eksperimento).
Ang spawn id na nauugnay sa pagtutugma ng output (o eof o full_buffer) ay naka-imbak sa expect_out (spawn_id) .
Ang -timeout Ang flag ay nagpapahiwatig ng kasalukuyang inaasahang command na gamitin ang sumusunod na halaga bilang isang timeout sa halip na gamitin ang halaga ng variable ng timeout.
Bilang default, tumutugma ang mga pattern laban sa output mula sa kasalukuyang proseso, gayunpaman -i ipinapahayag ng bandila ang output mula sa pinangalanang listahan ng spawn_id matched laban sa anumang sumusunod na mga pattern (hanggang sa susunod -i ). Ang lista ng spawn_id ay dapat na isang whitespace separated list ng spawn_ids o isang variable na tumutukoy sa naturang listahan ng spawn_ids.
Halimbawa, naghihintay ang sumusunod na halimbawa ng "konektado" mula sa kasalukuyang proseso, o "abala", "nabigo" o "hindi wastong password" mula sa spawn_id na pinangalanang ng $ proc2.
asahan ang {-i $ proc2 busy {naglalagay ng abala n; exp_continue} -re "failed | invalid password" abort timeout abort konektado}
Ang halaga ng pandaigdigang variable any_spawn_id ay maaaring gamitin upang tumugma sa mga pattern sa anumang spawn_ids na pinangalanan sa lahat ng iba pa -i mga flag sa kasalukuyang asahan utos. Ang spawn_id mula sa isang -i flag na walang nauugnay na pattern (ibig sabihin, sinundan kaagad ng isa pa -i ) ay magagamit sa anumang iba pang mga pattern sa parehong asahan utos na nauugnay sa any_spawn_id.
Ang -i Ang bandila ay maaari ring pangalanan ang isang pandaigdigang variable kung saan ang variable ay mababasa para sa isang listahan ng mga elliptical spade. Ang variable ay reread tuwing nagbabago ito. Nagbibigay ito ng isang paraan ng pagbabago ng I / O pinagmulan habang ang utos ay nasa pagpapatupad. Ang mga uhaw na ids na ibinigay sa ganitong paraan ay tinatawag na "di-tuwirang" mga ung-ung ung-ung.
Mga aksyon tulad ng pahinga at magpatuloy maging sanhi ng mga istrukturang kontrol (ibig sabihin, para sa , proc ) upang kumilos sa karaniwang paraan. Ang utos exp_continue nagpapahintulot asahan mismo upang ipagpatuloy ang pag-e-execute sa halip na bumalik gaya ng karaniwan.
Ito ay kapaki-pakinabang para sa pag-iwas sa tahasang mga loop o paulit-ulit na inaasahan ng mga pahayag. Ang sumusunod na halimbawa ay bahagi ng isang piraso upang i-automate ang rlogin. Ang exp_continue iwasan na magsulat ng isang segundo asahan pahayag (upang hanapin muli ang prompt) kung ang rlogin ay nag-uudyok para sa isang password.
umasa {Password: {stty -echo send_user "password (para sa $ user) sa $ host:" expect_user -re "(. *) n" send_user " n" send "$ expect_out (1, string) echo exp_continue} hindi tamang {send_user "hindi wastong password o account n" exit} Ang timeout ng koneksyon sa 'send_user' sa $ host ay natalo n "exit} eo {send_user " na koneksyon sa host ay nabigo: $ expect_out (buffer) "exit} - muling $ prompt}
Halimbawa, ang sumusunod na fragment ay maaaring makatulong sa gabay ng gumagamit ng pakikipag-ugnayan na ganap na awtomatiko. Sa kasong ito, ang terminal ay inilalagay sa raw mode. Kung pinindot ng gumagamit ang "+", isang variable ay incremented. Kung pinindot ang "p", ang ilang mga pagbalik ay ipinadala sa proseso, marahil ay poket ito sa ilang mga paraan, at "ako" ay nagbibigay-daan sa gumagamit na makipag-ugnay sa proseso, na epektibong pagnanakaw ng kontrol mula sa script. Sa bawat kaso, ang exp_continue nagpapahintulot sa kasalukuyang asahan upang ipagpatuloy ang pagtutugma ng pattern pagkatapos maisagawa ang kasalukuyang aksyon.
stty raw -echo expect_after {-i $ user_spawn_id "p" {send " r r r"; exp_continue} "+" {incr foo; exp_continue} "i" {nakikipag-ugnayan; exp_continue} "umalis" exit}
Bilang default, exp_continue Nire-reset ang timer ng timeout. Ang timer ay hindi na-restart, kung exp_continue ay tinatawag na ang -continue_timer bandila.
expect_after expect_args
gumagana nang magkatulad sa expect_before maliban na kung ang mga pattern mula sa pareho asahan at expect_after maaaring tumugma, ang asahan ginagamit ang pattern. Tingnan ang expect_before utos para sa karagdagang impormasyon.
expect_background expect_args
tumatagal ang parehong argumento bilangasahan , gayunpaman nagbabalik ito kaagad. Sinusubok ang mga pattern tuwing dumating ang bagong input. Ang patterntimeout atdefault ay walang kabuluhanexpect_background at tahimik na itinapon. Kung hindi, angexpect_background Gumagamit ng commandexpect_before atexpect_after tulad ng mga patternasahan ay.
Kailanexpect_background sinusuri ang mga pagkilos, ang pagpoproseso ng background para sa parehong id ng itlog ay naharang. Naka-unblock ang pagpoproseso ng background kapag nakumpleto ang pagkilos. Habang naka-block ang pagpoproseso ng background, posible na gawin ang isang (foreground)asahan sa parehong spawn id.
Hindi posible na magsagawa ng isangasahan habang ang isangexpect_background ay naka-unblock.expect_background para sa isang partikular na id ng itlog ay tinanggal sa pamamagitan ng pagdeklara ng isang bagong expect_background na may parehong itlog ng isda id. Nagpapahayagexpect_background na walang pattern inaalis ang ibinigay na spawn id mula sa kakayahan upang tumugma sa mga pattern sa background.
expect_before expect_args
tumatagal ang parehong argumento bilangasahan , gayunpaman nagbabalik ito kaagad. Mga pares ng pattern-action mula sa pinakahulingexpect_before na may parehong itlog ng isda id ay implicitly idinagdag sa anumang mga sumusunodasahan utos. Kung ang isang pattern tumutugma, ito ay itinuturing na kung ito ay tinukoy saasahan utos mismo, at ang nauugnay na katawan ay isinasagawa sa konteksto ngasahan utos. Kung ang mga pattern mula sa parehoexpect_before atasahan maaaring tumugma, angexpect_before ginagamit ang pattern.
Kung walang tinukoy na pattern, ang id ng spawn ay hindi siniyasat para sa anumang mga pattern.
Maliban kung binago ng isang-i bandila,expect_before tumutugma ang mga pattern laban sa id ng idineklarang id sa panahong iyonexpect_before Ang command ay pinaandar (hindi kapag ang katugma nito ay tumutugma).
Ang -info flag na sanhiexpect_before upang ibalik ang kasalukuyang mga pagtutukoy kung anong mga pattern ang tutugma nito. Sa pamamagitan ng default, ito ay nag-uulat sa kasalukuyang spawn id. Ang isang opsyonal na spawn id specification ay maaaring ibigay para sa impormasyon sa na itlog ng isda id. Halimbawa
expect_before -info -i $ proc
Sa karamihan ng isang spawn id pagtutukoy ay maaaring ibigay. Ang flag -indirect suppresses direct spawn id na dumating lamang mula sa hindi direktang mga pagtutukoy.
Sa halip ng isang spawn id specification, ang bandila "-all" ay magdudulot ng "-info" na mag-ulat sa lahat ng spawn ids.
Ang output ng bandang -info ay maaaring magamit muli bilang argumento sa inaasahan_sa bago.
expect_tty expect_args
kagaya niasahan ngunit binabasa nito ang mga character mula sa / dev / tty (ie mga keystroke mula sa user). Bilang default, ang pagbabasa ay ginaganap sa lutong mode. Kaya, ang mga linya ay dapat magtapos na may return order para saasahan para makita sila. Ito ay maaaring mabago sa pamamagitan ngstty (tingnan angstty utos sa ibaba).
expect_user expect_args
kagaya niasahan ngunit binabasa nito ang mga character mula sa stdin (hal. keystrokes mula sa user). Bilang default, ang pagbabasa ay ginaganap sa lutong mode. Kaya, ang mga linya ay dapat magtapos na may return order para saasahan para makita sila.Ito ay maaaring mabago sa pamamagitan ngstty (tingnan angstty utos sa ibaba).
tinidor
Lumilikha ng isang bagong proseso. Ang bagong proseso ay isang eksaktong kopya ng kasalukuyangAsahan proseso. Sa tagumpay,tinidor bumalik 0 sa bagong (anak) na proseso at ibabalik ang ID ng proseso ng proseso ng bata sa proseso ng magulang. Sa pagkabigo (karaniwan dahil sa kakulangan ng mga mapagkukunan, hal., Swap space, memorya),tinidor nagbabalik -1 sa proseso ng magulang, at walang proseso ng anak ang nilikha.
Ang mga proseso ng pag-alis ay lumabas sa pamamagitan nglumabas utos, tulad ng orihinal na proseso. Pinapayagan ang mga proseso ng pag-usig upang sumulat sa mga file ng pag-log. Kung hindi mo i-disable ang debugging o pag-log in sa karamihan ng mga proseso, ang resulta ay maaaring nakalilito.
Ang ilang mga pagpapatupad ng pty ay maaaring malito ng maraming mambabasa at manunulat, kahit na ilang sandali. Kaya, ito ay pinakaligtas satinidor bago ang proseso ng pangingitlog.
makipag-ugnayan string1 body1 … stringn bodyn
ay nagbibigay ng kontrol sa kasalukuyang proseso sa gumagamit, upang ang mga keystroke ay ipapadala sa kasalukuyang proseso, at ang stdout at stderr ng kasalukuyang proseso ay ibinalik.
Ang mga pares ng katawan ay maaaring itukoy bilang mga argumento, kung saan ang katawan ay papatayin kapag ang kaukulang string ay ipinasok. (Bilang default, ang string ay hindi ipinapadala sa kasalukuyang proseso.) Anginterpreter Ang utos ay ipinapalagay, kung ang huling katawan ay nawawala.
Kung ang mga argumento sa buongMakipag-ugnayan pahayag ay nangangailangan ng higit sa isang linya, ang lahat ng mga argumento ay maaaring "braced" sa isa upang maiwasan ang pagtatapos ng bawat linya sa isang backslash. Sa isang kaso na ito, ang karaniwang mga pagkalipol ng Tcl ay magaganap sa kabila ng mga tirante.
Halimbawa, ang sumusunod na utos ay nagpapatakbo ng nakikipag-ugnay sa mga sumusunod na mga pares ng string-katawan na tinukoy: Kapag ^ Z ay pinindot,Asahan ay nasuspinde. (Ang-reset i-restore ng bandila ang mga mode ng terminal.) Kapag ^ A ay pinindot, nakikita ng gumagamit ang "nag-type ka ng isang kontrol-A" at ang proseso ay ipinadala sa isang ^ A. Kapag ang $ ay pinindot, nakikita ng gumagamit ang petsa. Kapag ^ C ay pinindot,Asahan labasan. Kung ang "foo" ay ipinasok, nakikita ng gumagamit ang "bar". Kapag ~ ~ ay pinindot, angAsahan interpreter ay nagpapatakbo ng interactively.
set CTRLZ 032 interact {-reset $ CTRLZ {exec kill -STOP pid} 001 {send_user "nag-type ka ng control-A n"; magpadala ng " 001"} $ {send_user "Ang petsa ay format ng orasan segundo ng segundo."} 003 exit foo {send_user "bar"} ~~}
Sa mga pares ng string-katawan, ang mga string ay katugma sa pagkakasunud-sunod na nakalista bilang argumento. Ang mga string na bahagyang tumutugma ay hindi ipinapadala sa kasalukuyang proseso sa pag-asam ng natitirang darating. Kung ipinasok ang mga character na kaya't hindi na posibleng maging isang tugma, tanging ang bahagi ng string ay ipapadala sa proseso na hindi maaaring magsimula ng isa pang tugma. Kaya, ang mga string na substrings ng mga bahagyang tugma ay maaaring tumugma sa ibang pagkakataon, kung ang orihinal na mga string na sinusubukan na tumutugma sa huli ay nabigo.
Bilang default, ang pagtutugma ng string ay eksaktong walang mga ligaw na baraha. (Sa kabilang banda, angasahan Ang command ay gumagamit ng mga pattern ng estilo ng globo bilang default.) Ang-ex Maaaring gamitin ang bandila upang protektahan ang mga pattern na maaaring tumugma sa ibaMakipag-ugnayan mga flag mula sa paggawa nito. Anumang pattern na nagsisimula sa isang "-" ay dapat protektado sa ganitong paraan. (Lahat ng mga string na nagsisimula sa "-" ay nakalaan para sa mga pagpipilian sa hinaharap.)
Ang-re Ang mga flag na pwersa ang string na ipakahulugan bilang isang estilo ng estilo ng regexp. Sa kasong ito, ang pagtutugma ng mga substrip ay nakaimbak sa variable interact_out katulad ng paraanasahan nag-iimbak ng output nito sa variableexpect_out . Ang- Mga ugnayan Ang bandila ay sinusuportahan din.
Ang patterntama nagpapakilala ng isang aksyon na naisakatuparan sa dulo ng file. Ang magkahiwalaytama maaaring sundin ng pattern ang-output bandila na kung saan ito ay naitugmang kung ang isang ee ay nakita habang nagsusulat ng output. Ang defaulttama aksyon ay "bumalik", kaya naMakipag-ugnayan magbabalik lang sa anumang EOF.
Ang patterntimeout nagpapakilala ng isang timeout (sa mga segundo) at pagkilos na isinasagawa pagkatapos ng walang mga character na nabasa para sa isang naibigay na oras. Angtimeout nalalapat ang pattern sa pinakahuling tinukoy na proseso. Walang default na timeout. Ang espesyal na variable na "timeout" (ginagamit ngasahan command) ay hindi nakakaapekto sa timeout na ito.
Halimbawa, ang sumusunod na pahayag ay maaaring magamit sa mga gumagamit ng autologout na hindi nag-type ng anumang bagay sa loob ng isang oras ngunit sino pa ring nakakakuha ng madalas na mga mensahe ng system:
nakikipag-ugnayan -input $ user_spawn_id timeout 3600 return -output $ spawn_id
Kung ang pattern ay ang keywordwala , at nulls ay pinapayagan (sa pamamagitan ngremove_nulls command), ang kaukulang katawan ay papatayin kung ang isang solong ASCII 0 ay katugma. Ito ay hindi posible upang tumugma 0 bytes sa pamamagitan ng glob o regexp pattern.
Prefacing isang pattern na may bandila-Nagsusulat ako nagiging sanhi ng variable interact_out (spawn_id) upang itakda sa spawn_id na tumutugma sa pattern (o eof).
Mga aksyon tulad ngpahinga atmagpatuloy maging sanhi ng mga istrukturang kontrol (ibig sabihin,para sa , proc ) upang kumilos sa karaniwang paraan. Gayunpamanbumalik nagiging sanhi ng pakikipag-ugnay upang bumalik sa tumatawag nito, habanginter_return sanhiMakipag-ugnayan upang maging sanhi ng isang pagbabalik sa tumatawag nito. Halimbawa, kung tinatawag na "proc foo"Makipag-ugnayan kung saan pagkatapos ay naisakatuparan ang pagkilosinter_return , proc foo babalik. (Nangangahulugan ito na kungMakipag-ugnayan tawaginterpreter interactive na pag-typebumalik ay magdudulot ng pakikipag-ugnayan upang magpatuloy, habanginter_return ay magiging sanhi ng pakikipag-ugnayan upang bumalik sa tumatawag nito.)
Sa panahonMakipag-ugnayan , ang raw na mode ay ginagamit upang ang lahat ng mga character ay maipasa sa kasalukuyang proseso.Kung ang kasalukuyang proseso ay hindi nakakuha ng mga signal control ng trabaho, ito ay titigil kung nagpadala ng stop signal (sa pamamagitan ng default ^ Z). Upang i-restart ito, magpadala ng isang patuloy na signal (tulad ng sa pamamagitan ng "kill -CONT"). Kung gusto mo talagang magpadala ng isang SIGSTOP sa ganitong proseso (sa pamamagitan ng ^ Z), isaalang-alang muna ang pagtatanim ng csh at pagkatapos ay patakbuhin ang iyong programa. Sa kabilang banda, kung gusto mong magpadala ng isang SIGSTOP saAsahan mismo, unang tawag interpreter (marahil sa pamamagitan ng paggamit ng isang escape character), at pagkatapos ay pindutin ang ^ Z.
Ang mga pares ng katawan ay maaaring gamitin bilang isang takigrapya para sa pag-iwas sa pagpasok sa interpreter at magsagawa ng mga utos na interactively. Ang nakaraang terminal mode ay ginagamit habang ang katawan ng isang pares ng string-katawan ay pinaandar.
Para sa bilis, ang mga pagkilos ay gumanap sa raw mode bilang default. Ang-reset Nire-reset ng bandila ang terminal sa mode na datiMakipag-ugnayan ay pinaandar (walang paltos, lutong mode). Tandaan na ang mga character na ipinasok kapag ang mode ay inililipat ay maaaring mawawala (isang kapus-palad na tampok ng terminal driver sa ilang mga system). Ang tanging dahilan upang gamitin-reset ay kung ang iyong pagkilos ay nakasalalay sa pagpapatakbo sa lutong mode.
Ang-echo flag nagpapadala ng mga character na tumutugma sa sumusunod na pattern pabalik sa proseso na nakabuo ng mga ito habang binabasa ang bawat character. Maaaring ito ay kapaki-pakinabang kapag ang gumagamit ay kailangang makakita ng feedback mula sa mga bahagyang naka-type na mga pattern.
Kung ang isang pattern ay echoed ngunit sa huli ay hindi tumutugma, ang mga character ay ipinadala sa proseso ng spawned. Kung ang proseso ng spawned pagkatapos ay magpahid sa kanila, makikita ng user ang mga character nang dalawang beses.-echo marahil ay angkop lamang sa mga sitwasyon kung saan ang gumagamit ay malamang na hindi makumpleto ang pattern. Halimbawa, ang sumusunod na sipi ay mula sa rftp, ang recursive-ftp script, kung saan ang user ay sinenyasan na pumasok sa ~ g, ~ p, o ~ l, upang makuha, ilagay, o i-lista ang kasalukuyang direktoryo nang recursively. Ang mga ito ay napakalayo mula sa mga normal na ftp na utos, na ang gumagamit ay malamang na hindi i-type ~ sinundan ng anumang bagay, maliban sa pagkakamali, kung saan, malamang na hindi nila papansinin ang resulta.
makipag-ugnayan {-echo ~ g {getcurdirectory 1} -echo ~ l {getcurdirectory 0} -echo ~ p {putcurdirectory}}
Ang-nobuffer Ang flag ay nagpapadala ng mga character na tumutugma sa sumusunod na pattern sa proseso ng output habang binabasa ang mga character.
Ito ay kapaki-pakinabang kapag nais mong hayaan ang isang programa echo back ang pattern. Halimbawa, ang mga sumusunod ay maaaring gamitin upang subaybayan kung saan ang isang tao ay pag-dial (isang estilo Hayes-estilo). Sa bawat oras na "atd" ay nakikita ang script log ang natitirang bahagi ng linya.
(), (), (), (), (), (), ()
Sa panahonMakipag-ugnayan , nakaraang paggamit nglog_user ay hindi pinansin. Sa partikular,Makipag-ugnayan ay pinipilit ang output nito na ma-log (ipinadala sa karaniwang output) dahil ito ay itinuturing na ang user ay hindi nais na makipag-ugnayan nang walang taros.
Ang-o Ang flag ay nagiging sanhi ng anumang mga sumusunod na pares ng key-body na ilalapat sa output ng kasalukuyang proseso. Ito ay maaaring maging kapaki-pakinabang, halimbawa, kapag ang pakikitungo sa mga host na nagpapadala ng mga hindi gustong character habang nasa isang sesyon ng telnet.
Bilang default,Makipag-ugnayan Inaasahan ng user na magsulat ng stdin at magbasa ng stdout ngAsahan proseso mismo. Ang-u bandila (para sa "gumagamit") ay gumagawaMakipag-ugnayan hanapin ang user bilang proseso na pinangalanan sa pamamagitan ng argumento nito (na dapat ay isang spawned id).
Pinapayagan nito ang dalawang hindi nauugnay na mga proseso upang maisama nang hindi gumagamit ng isang tahasang loop. Upang tulungan ang pag-debug, palaging ang mga diagnostic na pumunta sa stderr (o stdout para sa ilang impormasyon sa pag-log at pag-debug). Sa parehong dahilan, anginterpreter Ang utos ay magbabasa nang interactively mula sa stdin.
Halimbawa, ang sumusunod na fragment ay lumilikha ng proseso sa pag-login. Pagkatapos ay naka-dial ang user (hindi ipinapakita), at sa wakas ay nag-uugnay sa dalawa nang magkasama. Siyempre, ang anumang proseso ay maaaring mapalitan para sa pag-login. Ang isang shell, halimbawa, ay magpapahintulot sa gumagamit na magtrabaho nang walang supplying isang account at password.
i-spawn login set login $ spawn_id spawn tip modem # i-dial out sa user # connect user upang mag-login makipag-ugnay -u $ login
Upang magpadala ng output sa maramihang mga proseso, ilista ang bawat listahan ng mga itlog ng isda na prefaced ng isang-output bandila. Ang input para sa isang pangkat ng mga output spawn id ay maaaring matukoy ng isang listahan ng spawn id na prefaced ng isang-input bandila. (Parehong-input at-output maaaring tumagal ng mga listahan sa parehong paraan tulad ng-i bandila saasahan utos, maliban na ang any_spawn_id ay hindi makabuluhan saMakipag-ugnayan .) Lahat ng sumusunod na mga flag at string (o mga pattern) ay nalalapat sa pag-input na ito hanggang lumilitaw ang isa pang -input na flag. Kung hindi-input Lumilitaw,-output nagpapahiwatig "-input $ user_spawn_id -output". (Katulad nito, may mga pattern na wala-input .) Kung isa-input ay tinukoy, binabawasan nito ang $ user_spawn_id. Kung isang segundo-input ay tinukoy, binabawasan nito ang $ spawn_id. Karagdagang-input Maaaring tinukoy ang mga flag.
Ang dalawang ipinahiwatig na mga proseso ng input ay default sa pagkakaroon ng kanilang mga output na tinukoy bilang $ spawn_id at $ user_spawn_id (sa reverse). Kung ang-input lumilitaw ang bandila nang walang-output bandila, ang mga character mula sa prosesong iyon ay itinapon.
Ang-i flag introduces isang kapalit para sa kasalukuyang spawn_id kapag walang ibang-input o-output ginagamit ang mga flag. Ang bandang A -i ay nagpapahiwatig ng isang -o bandila.
Posible na baguhin ang mga proseso na nakikipag-ugnayan sa pamamagitan ng paggamit ng mga di-tuwirang mga ung-ung. (Hindi direktang mga ungib ids ay inilarawan sa seksyon sa inaasahan na utos.) Ang mga di-tuwirang mga ungib na ungay ay maaaring tinukoy sa -i, -u, -input, o -output na mga flag.
interpreter args
nagiging sanhi ng interactively ang user na sinenyasan para saAsahan at mga utos ng Tcl. Ang resulta ng bawat utos ay nakalimbag.
Mga aksyon tulad ngpahinga atmagpatuloy maging sanhi ng mga istrukturang kontrol (ibig sabihin,para sa , proc ) upang kumilos sa karaniwang paraan. Gayunpamanbumalik nagiging sanhi ng interpreter upang bumalik sa tumatawag nito, habanginter_return sanhiinterpreter upang maging sanhi ng isang pagbabalik sa tumatawag nito. Halimbawa, kung tinatawag na "proc foo"interpreter kung saan pagkatapos ay naisakatuparan ang pagkilosinter_return , proc foo babalik. Anumang iba pang mga dahilan ng utosinterpreter upang ipagpatuloy ang pagdikta para sa mga bagong utos.
Bilang default, ang prompt ay naglalaman ng dalawang integer. Inilalarawan ng unang integer ang lalim ng pagsusuri stack (ibig sabihin, ilang beses na tinatawag na Tcl_Eval). Ang pangalawang integer ay ang Tcl history identifier. Ang prompt ay maaaring itakda sa pamamagitan ng pagtukoy sa isang pamamaraan na tinatawag na "prompt1" na ang halaga ng pagbabalik ay nagiging susunod na prompt. Kung ang isang pahayag ay may bukas na mga panipi, parens, braces, o braket, isang pangalawang prompt (sa pamamagitan ng default na "+>") ay ibinibigay sa newline. Ang pangalawang prompt ay maaaring itakda sa pamamagitan ng pagtukoy ng isang pamamaraan na tinatawag na "prompt2".
Sa panahoninterpreter , ginagamit ang lutong mode, kahit na ang tumatawag nito ay gumagamit ng raw mode.
Kung ang stdin ay sarado,interpreter babalik maliban kung ang-Eto Ang bandila ay ginagamit, kung saan ang kasunod na argument ay ginagamit.
log_file args -a file
Kung ang isang filename ay ibinigay,log_file ay magtatala ng transcript ng sesyon (simula sa puntong iyon) sa file.log_file ay titigil sa pagtatala kung walang ibinigay na argumento. Anumang nakaraang log file ay sarado.
Sa halip ng isang filename, ang isang Tcl file identifier ay maaaring ibigay sa pamamagitan ng paggamit ng-open o-Libre flags. Ito ay katulad ngumikot utos. (Tingnanumikot para sa higit pang impormasyon.)
Ang-a flag pwersa output na naka-log na pinigilan nglog_user utos.
Bilang default, anglog_file utos nagdagdag sa mga lumang file sa halip na i-truncating ang mga ito, para sa kaginhawahan na i-off ang pag-log off at sa maraming beses sa isang sesyon. Upang i-truncate ang mga file, gamitin ang-nakikita bandila.
Ang-info Ang mga flag na nagiging sanhi ng log_file upang ibalik ang isang paglalarawan ng pinakahuling argumento na hindi pang impormasyon na ibinigay.
log_user -info | 0 | 1
Sa pamamagitan ng default, ang ipadala / asahan ang dialog ay naka-log sa stdout (at isang logfile kung bukas). Ang pag-log sa stdout ay hindi pinagana ng command na "log_user 0" at muling na-enable sa pamamagitan ng "log_user 1". Ang pag-log sa logfile ay hindi nagbabago.
Ang-info Ang mga flag ay nagiging sanhi ng log_user upang ibalik ang isang paglalarawan ng pinakahuling argumentong hindi pang impormasyon na ibinigay.
match_max -d -i spawn_id size
tumutukoy sa laki ng buffer (sa bytes) na ginagamit sa loob ngasahan . Nang walang laki argumento, ang kasalukuyang laki ay ibinalik.
Kasama ang-d bandila, ang default na laki ay nakatakda. (Ang unang default ay 2000.) Gamit ang-i bandila, ang sukat ay nakatakda para sa pinangalanang id ng itlog ng isda, kung hindi man ito nakatakda para sa kasalukuyang proseso.
overlay - # spawn_id - # spawn_id … program args
executes "programa args "sa lugar ng kasalukuyangAsahan programa, na tinatapos. Ang isang hubad na argument ng hyphen ay nagtutulak ng isang gitling sa harap ng pangalan ng command na parang ito ay isang shell ng pag-login. Lahat ng spawn_ids ay sarado maliban sa mga pinangalanan bilang argumento. Ang mga ito ay naka-map sa mga pinangalang mga pagkakakilanlan ng file.
Ang Spawn_ids ay nai-map upang mag-file ng mga pagkakakilanlan para sa pagmamay-ari ng bagong programa. Halimbawa, ang sumusunod na linya ay nagpapatakbo ng chess at pinahihintulutan itong kontrolin ng kasalukuyang proseso - halimbawa, isang master ng chess.
overlay -0 $ spawn_id -1 $ spawn_id -2 $ spawn_id chess
Ito ay mas mahusay kaysa sa "nakikipag-ugnayan -u", gayunpaman, ito ay nagsasakripisyo ng kakayahang mag-program na pakikipag-ugnayan dahil saAsahan ang proseso ay hindi na kontrolado.
Tandaan na walang ipinagkakaloob na pagkontrol ng terminal. Kung gayon, kung tatanggalin mo o palitawin ang karaniwang input, ang mga program na gumagawa ng kontrol sa trabaho (mga shell, pag-login, atbp) ay hindi gagana ng maayos.
pagkakapare-pareho -d -i spawn_id halaga
ay tumutukoy kung ang parity ay dapat manatili o mabubunot mula sa output ng mga proseso ng spawned. Kung halaga ay zero, ang pagkakapantay-pantay ay nakuha, kung hindi, ito ay hindi nakuha. Nang walang halaga argumento, ang kasalukuyang halaga ay ibinalik.
Kasama ang-d flag, ang default na parity value ay naka-set. (Ang unang default ay 1, ibig sabihin, ang pagkakapareho ay hindi nakuha.) Gamit ang-i bandila, ang halaga ng pagkakapare-pareho ay nakatakda para sa pinangalanang id ng isda, kung hindi man ito nakatakda para sa kasalukuyang proseso.
remove_nulls -d -i spawn_id value
tumutukoy kung ang null null ay pinanatili o inalis mula sa output ng mga proseso ng spawned bago ang pagtutugma ng pattern o pag-iimbak sa variable expect_out o interact_out . Kung halaga ay 1, nulls ay inalis. Kung halaga ay 0, nulls ay hindi tinanggal. Nang walang halaga argumento, ang kasalukuyang halaga ay ibinalik.
Kasama ang-d bandila, ang default na halaga ay nakatakda. (Ang unang default ay 1, ibig sabihin, nulls ay inalis.) Gamit ang-i flag, ang halaga ay nakatakda para sa pinangalanang id ng isda, kung hindi man ito nakatakda para sa kasalukuyang proseso.
Kung o hindi nulls ay tinanggal,Asahan ay magtatala ng null bytes sa log at stdout.
magpadala ng -flags na string
Nagpapadala string sa kasalukuyang proseso. Halimbawa, ang utos
magpadala ng "kumusta sa mundo"
nagpapadala ng mga character, h e l l o w o r sa d kasalukuyang proseso. (Tcl nagsasama ng isang printf-tulad ng utos (tinatawag naformat ) na maaaring magtayo ng mga kumplikadong mga string ng arbitraryo.)
Ang mga character ay agad na ipinadala kahit na ang mga program na may input ng line-buffered ay hindi magbabasa ng mga character hanggang sa ipadala ang return character. Ang isang return character ay tinutukoy na " r".
Ang-- Ang mga pwersa ng bandila ang susunod na argumento na ipakahulugan bilang isang string sa halip na isang bandila.Anumang string ay maaaring mauna sa pamamagitan ng "-" kung ito man ay talagang mukhang isang bandila. Nagbibigay ito ng isang maaasahang mekanismo upang tukuyin ang mga variable na mga string nang hindi nasaktan ng mga hindi sinasadyang hitsura ng mga flag. (Lahat ng mga string na nagsisimula sa "-" ay nakalaan para sa mga pagpipilian sa hinaharap.)
Ang-i ipinahayag ng bandila na ang string ay ipinadala sa pinangalanang spawn_id. Kung ang spawn_id ay user_spawn_id , at ang terminal ay nasa hilaw na mode, ang mga bagong linya sa string ay isinalin upang bumalik-bagong mga pagkakasunud-sunod ng linya upang lumitaw ang mga ito kung ang terminal ay nasa lutong mode. Ang-raw hindi pinapagana ng bandila ang pagsasalin na ito.
Ang-wala flag nagpapadala null character (0 bytes). Bilang default, ang isang null ay ipinadala. Ang isang integer ay maaaring sundin ang-wala upang ipahiwatig kung gaano karaming mga nulls ang ipapadala.
Ang-pahinga Ang bandila ay bumubuo ng kondisyon ng pahinga. Ito lamang ang makatuwiran kung ang spawn id ay tumutukoy sa isang tty device na binuksan sa pamamagitan ng "spawn -open". Kung nagsagawa ka ng isang proseso tulad ng tip, dapat mong gamitin ang tip ng kombensyon para sa pagbuo ng pahinga.
Ang-s ang mga pwersa ng bandila ng output ay ipapadala nang "dahan-dahan", kaya maiiwasan ang karaniwang sitwasyon kung saan ang isang computer outtype ng isang input buffer na idinisenyo para sa isang tao na hindi kailanman maaaring i-type ang parehong buffer. Ang output na ito ay kinokontrol ng halaga ng variable na "send_slow" na kumukuha ng dalawang listahan ng elemento. Ang unang elemento ay isang integer na naglalarawan ng bilang ng mga byte upang magpadala ng atomically. Ang ikalawang sangkap ay isang tunay na numero na naglalarawan ng bilang ng mga segundo kung saan ang atomic na nagpapadala ay dapat na pinaghiwalay. Halimbawa, "itakda ang send_slow {10 .001}" ay puwersahin "ipadala -s" upang magpadala ng mga string na may 1 millisecond sa pagitan ng bawat 10 character na ipinadala.
Ang-h ang mga pwersa ng bandila ng output ay ipapadala (medyo) tulad ng isang tao na aktwal na nagta-type. Lumilitaw sa pagitan ng mga character ang mga tao tulad ng mga pagkaantala. (Ang algorithm ay batay sa isang pamamahagi Weibull, na may mga pagbabago upang umangkop sa partikular na application.) Ang output na ito ay kinokontrol ng halaga ng variable na "send_human" na kumukuha ng isang listahan ng limang-element. Ang unang dalawang elemento ay isang average na interarrival na oras ng mga character sa ilang mga segundo. Ang una ay ginagamit bilang default. Ang pangalawa ay ginagamit sa mga endings ng salita, upang gayahin ang mga mahiwagang pag-pause na paminsan-minsan ay nangyari sa naturang mga transisyon. Ang ikatlong parameter ay isang sukatan ng pagkakaiba-iba kung saan .1 ay lubos na variable, 1 ay makatwirang variable, at 10 ay medyo invariable. Ang sobra ay 0 hanggang infinity. Ang huling dalawang parameter ay, ayon sa pagkakabanggit, isang minimum at maximum na interarrival na oras. Ang pinakamaliit at pinakamataas na ginamit sa huling at "clip" sa huling oras. Ang sukdulang average ay maaaring maging lubos na naiiba mula sa ibinigay na average kung ang minimum at maximum na clip sapat na halaga.
Bilang halimbawa, ang sumusunod na utos ay nagpapalabas ng mabilis at pare-pareho na typist:
itakda send_human {.1 .3 1 .05 2} magpadala -h "Ako ay nagugutom.
habang ang mga sumusunod ay maaaring maging mas angkop pagkatapos ng hangover:
itakda ang send_human {.4 .4 .2 .5 100} magpadala -h "Goodd party nightmare night!"
Tandaan na ang mga error ay hindi kunwa, bagaman maaari mong i-set up ang iyong mga sitwasyon ng pagwawasto ng error sa pamamagitan ng pag-embed ng mga pagkakamali at pagwawasto sa isang ipadala na argumento.
Ang mga bandila para sa pagpapadala ng mga character na null, para sa pagpapadala ng mga break, dahil sa pagpilit ng mabagal na output at para sa output ng estilo ng tao ay eksklusibo. Tanging ang tinukoy na huling gagamitin. Higit pa rito, hindi string Ang argumento ay maaaring tinukoy sa mga flag para sa pagpapadala ng null character o break.
Magandang ideya na mauna ang unamagpadala sa isang proseso sa pamamagitan ng isangasahan. asahan maghihintay na magsimula ang proseso, habangmagpadala hindi pwede. Sa partikular, kung ang unamagpadala makumpleto bago tumakbo ang proseso ay tumatakbo, pinapatakbo mo ang panganib na mapansin ang iyong data. Sa mga sitwasyon kung saan ang mga interactive na programa ay nag-aalok ng walang paunang prompt, maaari mong maunamagpadala sa pamamagitan ng isang pagkaantala tulad ng sa:
# Upang maiwasan ang pagbibigay ng mga pahiwatig ng hack sa kung paano masira, # hindi pinapansin ng system na ito ang isang panlabas na password. # Maghintay ng 5 segundo para sa exec upang makumpleto ang mga itlog ng isda telnet very.secure.gov matulog 5 magpadala ng password r
exp_send ay isang alias para sa magpadala. Kung gumagamit ka ng Expectk o ilang iba pang variant ng Expect sa kapaligiran Tk,magpadala ay tinukoy ng Tk para sa isang ganap na magkaibang layunin.exp_send ay ibinigay para sa pagiging tugma sa pagitan ng mga kapaligiran. Ang mga katulad na alyansa ay ibinibigay para sa iba pang mga utos na ipinadala ng iba pang inaasahan.
send_error -flags string
kagaya nimagpadala , maliban na ang output ay ipinadala sa stderr sa halip na sa kasalukuyang proseso.
send_log - string