The Linux Ubuntu / Unix Komando nyangka

Nyangka mangrupakeun program anu ceramah pikeun program interaktif sejenna nurutkeun naskah. Handap naskah, nyangka weruh naon bisa dipiharep tina program sarta naon respon bener kedah. Hiji basa diinterpretasi nyadiakeun branching jeung kontrol-tingkat tinggi struktur langsung dialog nu. Sajaba ti éta, pamaké bisa nyokot kadali sarta berinteraksi langsung nalika erek, afterward balik kadali kana naskah.

Expectk mangrupakeun campuran nyangka na Tk. Ieu behaves ngan jiga ngaharepkeun sarta kahayang Mun noong urang. Nyangka bisa ogé dipaké langsung di C atanapi C ++ tanpa Tcl.

Ngaran "nyangka" asalna tina pamanggih kirim / nyangka urutan ngapopulérkeun ku uucp, kermit sarta program kontrol modem lianna. Sanajan kawas uucp, nyangka ieu digeneralisasi meh bisa ngajalankeun sakumaha paréntah pamaké-tingkat kalayan sagala program jeung tugas dina pikiran. Nyangka bisa ngobrol sababaraha program dina waktos anu sareng.

Naon nyangka Dupi Naha

Contona, di dieu aya sababaraha hal nu nyangka paréntah tiasa ngalakukeun:

Aya rupa-rupa alesan naha éta cangkang teu bisa ngalakukan tugas ieu. Kabéh anu mungkin jeung nyangka.

Sacara umum, nyangka bisa dipake jang ngajalankeun program naon baé nu butuh interaksi antara program jeung pamaké. Kabéh anu perlu éta interaksi bisa dicirikeun programmatically. Nyangka ogé bisa masihan deui kadali ka pamaké tanpa halting program keur dikawasa. Nya kitu, pamaké bisa balik kontrol pikeun naskah iraha wae.

pamakéan

Nyangka berbunyi cmdfile pikeun daptar Paréntah sangkan ngaéksekusi. Nyangka bisa jadi invoked implicitly on sistem nu ngarojong # nu! notasi kucara nyirian Aksara sakumaha laksana tur nyieun garis kahiji dina naskah:

#! / Usr / lokal / bin / nyangka -f

Tangtu, jalur kudu akurat nerangkeun mana nyangka akherat. / Usr / lokal / bin téh sakadar conto.

Bendera -c prefaces paréntah pikeun jadi dieksekusi méméh sagala dina naskah. paréntah kudu dicutat pikeun nyegah keur pegat nepi ku cangkang. pilihan ieu bisa dipaké sababaraha kali. Sababaraha Paréntah bisa jadi dieksekusi ku -c tunggal ku misahkeun sareng semicolons. Paréntah nu dieksekusi dina urutan maranéhna muncul. Lamun maké Expectk, pilihan ieu dieusian sakumaha -command.

Bendera -d nyandak sababaraha kaluaran diagnostik, anu utamina ngalaporkeun kagiatan internal tina paréntah kayaning nyangka na interaksi. bendera ieu boga pangaruh anu sarua sakumaha "exp_internal 1" dina awal hiji nyangka Aksara, ditambah versi nyangka ieu dicitak.

Bendera -D nyandak hiji debugger interaktif. Hiji nilai integer kedah nuturkeun. debugger bakal nyokot kadali saméméh prosedur Tcl hareup lamun nilai nu geus non-enol atawa lamun hiji ^ C dipencet atawa breakpoint ieu pencét, atawa paréntah debugger lianna luyu némbongan dina naskah. Lamun maké Expectk, pilihan ieu dieusian sakumaha - debug.

Bendera -f prefaces file ti mana maca Paréntah. Bendera sorangan pilihan salaku éta ukur mangpaat lamun ngagunakeun # nu! notasi, supaya alesan sejen bisa jadi disadiakeun dina garis paréntah. Lamun maké Expectk, pilihan ieu dieusian sakumaha -file.

Sacara standar, anu file paréntah anu maca kana memori tur dieksekusi dina entirety na. Ieu aya kalana desirable maca file hiji garis dina hiji waktu. Dina urutan maksa file sawenang bisa diatur ku cara ieu, make bendera -b. Lamun maké Expectk, pilihan ieu dieusian sakumaha -buffer.

Lamun string "-" disadiakeun salaku Ngaran koropak a, input baku keur maca gantina. Paké "./-" maca ti file sabenerna ngaranna "-".

Nu jadi sabab bendera -i nyangka interactively ajakan pikeun Paréntah gaganti maca eta tina file a. Nyababkeun ieu terminated via paréntah kaluar atanapi kana EOF. Bendera -i dianggap lamun ngayakeun hiji file paréntah atawa -c dipaké. Lamun maké Expectk, pilihan ieu dieusian sakumaha -interactive.

- bisa dipaké pikeun delimit ahir pilihan. Ieu mangpaat lamun hayang lulus hiji argumen pilihan-kawas naskah Anjeun tanpa eta keur diinterpretasi ku nyangka. Ieu bisa usefully ditempatkeun dina # nu! garis pikeun nyegah sagala flaglike interpretasi ku nyangka. Contona, di handap baris ninggalkeun alesan aslina kaasup nami Aksara dina argv variabel.

! # / Usr / lokal / bin / nyangka -

Catetan yén dawam getopt (3) jeung execve (2) Konvénsi kudu dititénan nalika nambahkeun alesan pikeun # nu! garis.

The file $ exp_library / expect.rc ieu sourced otomatis lamun hadir, iwal bendera -N dipaké. (Nalika migunakeun Expectk, pilihan ieu dieusian sakumaha -NORC.) Langsung sanggeus ieu, anu file ~ / .expect.rc ieu sourced otomatis, iwal bendera -n dipaké. Lamun lingkungan variabel DOTDIR dihartikeun, mangka diperlakukeun salaku diréktori sarta .expect.rc geus maca ti dinya. Lamun maké Expectk, pilihan ieu dieusian sakumaha -norc. sourcing Ieu lumangsung ngan sanggeus executing sagala umbul -c.

sabab -V nyangka nyitak angka Vérsi sarta kaluar. Pakait bendera di Expectk, nu migunakeun ngaran bendera lila, nyaéta -version.

args pilihan anu diwangun kana daftar sarta disimpen dina variabel ngaranna argv na. argc ieu initialized kana panjang argv.

Argv0 diartikeun janten nami naskah atanapi binér lamun euweuh Aksara ieu dipaké. Contona, di handap dina prints kaluar ngaran Aksara jeung tilu alesan kahiji:

send_user "$ argv0 [lrange $ argv 0 2] \ n"

Paréntah

Nyangka migunakeun Alat Komando Basa. Tcl nyadiakeun aliran control (lamun, keur, putus), evaluasi babasan jeung sababaraha fitur sejenna kayaning harti prosedur recursionand. Paréntah dipaké di dieu tapi teu tangtu (set, upami, exec) mangrupakeun paréntah Tcl. Nyangka ngarojong Paréntah tambahan. Iwal mun disebutkeun dieusian, Paréntah balik ka string kosong.

Paréntah ieu dibéréndélkeun alphabetically ambéh maranéhanana bisa gancang lokasina. Sanajan kitu, pamaké anyar bisa manggihan eta gampang pikeun ngamimitian ku maca déskripsi ngeunaan spawn, ngirim, nyangka, sarta interaksi, dina urutan éta.

nutup [-slave] [-onexec 0 | 1] [-i spawn_id]

nutup éta sambungan ka ayeuna proses . Paling program interaktif baris ngadeteksi EOF on stdin tur kaluar maranéhna; sahingga nutup biasana suffices maehan ka prosés ogé. Bendera -i ngumumkeun éta prosés pikeun nutup pakait kana spawn_id ngaranna.

Duanana nyangka na interaksi bakal ngadeteksi lamun arus prosés kaluar na implicitly do nutup hiji, tapi lamun maéhan éta prosés ku, sebutkeun, "exec sono $ pid", anjeun kedah kuduna nelepon nutup.

Bendera -onexec nangtukeun naha spawn id geus ditutup dina sagala anyar ngaluncurkeun prosés atawa lamun proses ieu overlayed. Ninggalkeun hiji spawn id kabuka, nganggo nilai 0. A nilai integer non-enol Angkatan nu spawn ditutup dina sagala proses anyar.

Bendera -slave nutup budak dikaitkeun jeung spawn id. Nalika sambungan keur ditutup, budak anu otomatis ditutup sakumaha ogé lamun éta kénéh muka.

Perkara teu naha sambungan ditutup implicitly atawa kuduna, Anjeun kedah nyauran antosan mupus up kernel pakait prosés slot. Paréntah nutup teu nelepon antosan saprak aya garansi yén nutup hiji prosés sambungan bakal ngabalukarkeun ka LN.

debug [[-now] 0 | 1]

ngawasaan hiji debugger Tcl ngamungkinkeun Anjeun pikeun lengkah ngaliwatan pernyataan jeung set breakpoints.

Kalawan henteu alesan, a 1 geus balik lamun debugger henteu ngajalankeun, disebutkeun hiji 0 geus balik.

Sareng 1 argumen, debugger kasebut dimimitian. Ku 0 argumen, debugger kasebut dieureunkeun. Mun hiji 1 argumen anu dimimitian ku bendera -now, debugger kasebut dimimitian langsung. Upami teu kitu, debugger kasebut dimimitian ku pernyataan Tcl salajengna.

Paréntah debug teu robah sarap wae. Bandingkeun ieu dimimitian nyangka ku bendera -D.

Paréntah mutuskeun disconnects a forked prosés ti terminal . Ieu terus ngajalankeun di tukang. Prosésna dirumuskeun group prosés na sorangan. Baku I / O ieu dialihkeun ka / dev / hypothesis .

nuturkeun kagunaan sempalan megatkeun neruskeun ngajalankeun skrip di tukang.

lamun {[garpu]! = 0} kaluar mutuskeun. . .

Skrip di handap berbunyi sandi a lajeng ngalir program unggal jam éta tungtutan sandi a tiap waktu eta dijalankeun. naskah suplai sandi supados anjeun ngan kudu ngetik deui sakali.

send_user "sandi \?" expect_user -re "\ n (*.)" kanggo {} 1 {} {lamun {[garpu] = 0} {sare 3600; nuluykeun} mutuskeun spawn priv_prog nyangka Sandi:! ngirim "$ expect_out ( 1, string) \ r ". . . Kaluar }

Hiji kaunggulan ka maké mutuskeun leuwih cangkang fitur prosés Asynchronous (&) éta nyangka tiasa nyimpen parameter terminal saméméh disconnection lajeng engké nerapkeun eta ptys anyar. Kalawan &, nyangka teu boga kasempetan pikeun maca parameter terminal urang saprak terminal anu geus dipegatkeun ku waktu nyangka narima kontrol.

kaluar [-opts] [status]

sabab nyangka ka LN atawa lamun heunteu nyiapkeun pikeun ngalakukeunana.

Bendera -onexit ngabalukarkeun argumen gigireun dipaké salaku hiji Handler kaluar. Tanpa hiji argumen, anu kaluar Handler ayeuna geus balik.

Nu jadi sabab -noexit bendera nyangka nyiapkeun pikeun kaluar tapi eureun pondok tina sabenerna balik kadali kana sistem operasi. The kaluar Handler-diartikeun pamaké ieu ngajalankeun sakumaha ogé nyangka pawang internal urang sorangan. Taya salajengna nyangka Paréntah kudu dibales. Ieu mangpaat lamun anjeun ngajalankeun nyangka jeung ekstensi séjén Tcl. The juru ayeuna (jeung jandela utama lamun di lingkungan Tk) tetep ku kituna ekstensi séjén Tcl bisa ngabersihan up. Mun nyangka urang kaluar disebut deui (sanajan ieu bisa lumangsung), nu pawang teu rerun.

Kana exiting, sadaya koneksi pikeun prosés ngaluncurkeun téh ditutup. Panutupanana bakal kauninga sakumaha hiji EOF ku prosés ngaluncurkeun. kaluar nyokot euweuh tindakan séjén saluareun naon _exit normal (2) prosedur manten. Ku kituna, ngaluncurkeun prosés anu teu pariksa keur EOF bisa neruskeun ngajalankeun. (A-rupa kaayaan anu penting pikeun nangtukeun, contona, naon sinyal hiji prosés ngaluncurkeun bakal dikirim, tapi ieu sistem-gumantung, ilaharna documented handapeun kaluar (3).) Ngaluncurkeun prosés nu neruskeun ngajalankeun bakal diwariskeun ku init.

Status (atawa 0 lamun teu dieusian) geus balik jadi status kaluar tina nyangka. kaluar geus implicitly dieksekusi lamun ahir naskah ieu ngahontal.

exp_continue [-continue_timer]
Paréntah exp_continue ngamungkinkeun nyangka diri neruskeun executing tinimbang balik sakumaha eta ilaharna ngalakukeunana. Ku exp_continue standar resets nu otomatis seep. Bendera -continue_timer nyegah otomatis ti keur restarted. (Tempo nyangka kanggo inpormasi lengkep.)

exp_internal [-f file] nilai
ngabalukarkeun salajengna paréntah pikeun ngirim informasi diagnostik internal pikeun nyangka stderr lamun nilai anu non-nol. Output Ieu ditumpurkeun lamun nilai téh 0. Informasi diagnostik ngawengku unggal karakter ditampi, sarta unggal usaha dilakukeun pikeun cocog kaluaran ayeuna ngalawan pola.

Lamun file pilihan anu disadiakeun, sadaya normal sarta debugging kaluaran anu ditulis keur file anu (paduli nilai nilai). Sagala file kaluaran diagnostik saméméhna geus ditutup.

Bendera -info ngabalukarkeun exp_internal balik pedaran tina alesan non-info panganyarna dibikeun.

exp_open [args] [-i spawn_id]
mulih file identifier Tcl nu pakait jeung spawn id aslina. The file identifier tiasa lajeng dipaké salaku lamun eta anu dibuka ku paréntah kabuka Tcl urang. (The spawn id kedah euweuh dipaké. Hiji nungguan teu matak dieksekusi.

Bendera -leaveopen daun spawn id kabuka pikeun aksés ngaliwatan nyangka Paréntah. A nungguan kudu dibales dina spawn id.

exp_pid [-i spawn_id]
mulih ka id prosés pakait kana proses ayeuna ngaluncurkeun. Mun bendera -i dipaké, anu pid balik pakait jeung nu ti spawn id dibikeun.

exp_send
mangrupa landian pikeun kirim.

exp_send_error
mangrupa landian pikeun send_error.

exp_send_log
mangrupa landian pikeun send_log.

exp_send_tty
mangrupa landian pikeun send_tty.

exp_send_user
mangrupa landian pikeun send_user.

exp_version [[-exit] Vérsi]
nyaeta mangpaat pikeun assuring yén naskah kompatibel jeung versi kiwari nyangka.

Kalawan henteu alesan, versi kiwari nyangka ieu balik. Vérsi ieu bisa lajeng jadi disandikeun dina naskah Anjeun. Lamun sabenerna nyaho yén anjeun teu ngagunakeun fitur sahiji versi panganyarna, Anjeun bisa netepkeun hiji versi samemehna.

Versi diwangun ku tilu nomer dipisahkeun ku titik-titik. Mimitina nyaeta jumlah utama. Aksara ditulis pikeun vérsi nyangka ku angka utama béda bakal ampir pasti moal jalan. exp_version mulih kasalahan lamun nomer utama ulah cocog.

Kadua nya éta nomer minor. Aksara ditulis pikeun Vérsi kalayan jumlah minor gede ti versi ayeuna bisa gumantung kana sababaraha fitur anyar jeung bisa teu ngajalankeun. exp_version mulih kasalahan lamun nomer utama cocog, tapi jumlah minor Aksara anu leuwih gede ti nu ti jalan nyangka.

Katilu nyaéta angka anu muterkeun euweuh bagéan dina ngabandingkeun versi. Sanajan kitu, eta incremented lamun sebaran software nyangka dirobah sagala cara, kayaning ku dokuméntasi tambahan atawa optimasi. Hal ieu ngareset ka 0 kana tiap Vérsi minor anyar.

Kalawan bendera -exit, nyangka prints kasalahan sarta kaluar lamun versi anu mutahir.

nyangka [[-opts] pat1 body1] ... [-opts] patn [bodyn]
waits dugi salah sahiji pola cocog kaluaran mangrupa prosés ngaluncurkeun, periode waktu dieusian kaliwat, atawa hiji tungtung-of-file katempona. Mun awak final kosong, éta bisa jadi disingkahkeun.

Pola ti paréntah expect_before panganyarna téh implicitly dipaké saméméh sagala pola lianna. Pola ti paréntah expect_after panganyarna téh implicitly dipaké sanggeus sagala pola lianna.

Mun dalil pikeun sakabéh nu nyangka pernyataan merlukeun leuwih ti hiji jalur, sakabeh alesan bisa jadi "braced" kana hiji ku kituna ulah terminating unggal garis jeung backslash a. Bisi salah ieu, nu biasa Tcl panggantian baris lumangsung sanajan braces.

Lamun pola hiji teh eof keyword, awak pakait geus dieksekusi kana tungtung-of-file. Lamun pola hiji teh seep keyword, anu pakait awakna dieksekusi kana seep. Mun euweuh keyword seep dipaké, hiji aksi null implisit geus dieksekusi kana seep. Mangsa standar seep aya 10 detik tapi bisa jadi diatur, contona mun 30, ku parentah "Nyetél seep 30". Hiji seep wates bisa jadi ditunjuk ku nilai nu -1. Lamun pola hiji teh standar keyword, awak pakait geus dieksekusi kana boh seep atawa tungtung-of-file.

Lamun pola hiji cocog, mangka pakait awakna dieksekusi. nyangka mulih hasil awak (atawa string kosong lamun euweuh pola loyog). Dina acara anu sababaraha pola cocog, hiji muncul mimitina dipaké pikeun milih awakna a.

Unggal waktos kaluaran anyar datang, mangka dibandingkeun unggal pola dina urutan aranjeunna dibéréndélkeun. Ku kituna, anjeun bisa nguji pikeun henteuna cocok ku nyieun hal pola panungtungan dijamin némbongan, kayaning ajakan a. Dina kaayan taya ajakan, anjeun kudu make seep (kawas Anjeun ngalakukeunana lamun anjeun interacting sacara manual).

Pola anu dieusian di tilu cara. Sacara standar, pola anu dieusian sakumaha kalayan paréntah cocok string Tcl urang. (Pola sapertos oge sarupa C-cangkang ungkapan biasa biasana disebut "glob" pola). Bendera -gl mungkin bisa dipaké pikeun ngajaga pola anu bisa disebutkeun cocog nyangka umbul ti lakukeun kitu. Sagala pola dimimitian ku "-" kudu ditangtayungan ku cara ieu. (Kabéh senar dimimitian ku "-" nu ditangtayungan pikeun pilihan kahareup.)

Contona, dina sempalan di handap Sigana pikeun login suksés. (Catetan yen abort ieu disangka janten prosedur diartikeun nguap dina naskah.)

nyangka {sibuk {nyimpen sibuk \ n; exp_continue} gagal abort "sandi sah" abort seep abort disambungkeun}

Tanda petik nu diperlukeun dina pola kaopat saprak ngandung spasi, nu disebutkeun bakal misahkeun pola ti aksi. Pola jeung aksi anu sarua (saperti 3rd jeung 4) merlukeun Listing tindakan deui. Ieu tiasa ulah ku maké pola regexp-gaya (tempo di handap). Inpo nu langkung lengkep ihwal ngabentuk pola glob-gaya bisa kapanggih dina manual Tcl.

Pola Regexp-gaya turutan rumpaka ditetepkeun ku regexp Tcl urang (pondok pikeun "ekspresi biasa") sorana. pola regexp anu diwanohkeun ku -re bandéra. Conto saméméhna bisa dituliskeun maké regexp salaku:

nyangka {sibuk {nyimpen sibuk \ n; exp_continue} -re "gagal | sandi sah" abort seep abort disambungkeun}

Duanana rupa pola nu "unanchored". Ieu ngandung harti yén pola teu kudu cocog sakabéh string, tapi bisa dimimitian teras ngarengsekeun pertandingan mana di senar nu (salami sagalana sejenna cocog). Paké ^ ka cocog awal string, sarta $ keur cocog tungtungna. Catetan yen lamun teu ngadagoan tungtung string a, réspon Anjeun bisa kalayan gampang mungkas nepi di tengah string sakumaha aranjeunna echoed ti prosés ngaluncurkeun. Bari masih ngahasilkeun hasil nu bener, output bisa ngungkaban wajar. Ku kituna, pamakéan $ geus wanti lamun kahayang bisa nerangkeun karakter dina tungtung string a.

Catetan yen sababaraha rai, anu ^ na $ cocog awal jeung akhir tina garis mungguh. Sanajan kitu, ku sabab nyangka teu garis berorientasi, karakter ieu cocog awal jeung akhir tina data (sabalikna tina garis) ayeuna di panyangga nyangka cocog. (Oge, tingali catetan di handap dina "sistem salah ancur.")

Bendera -ex ngabalukarkeun pola pikeun jadi loyog salaku hiji "pasti" senar. Taya interpretasi tina *, ^, jsb dijieun (sanajan Konvénsi Tcl dawam kedah tetep dititénan). pola pasti sok unanchored.

Bendera -nocase ngabalukarkeun karakter uppercase tina kaluaran ka ngabandingkeun sakumaha lamun éta karakter aksara leutik. pola henteu kapangaruhan.

Bari maca output, leuwih ti 2000 bait tiasa maksakeun bait saméméhna bisa "poho". Ieu bisa jadi robah jeung fungsi match_max. (Catetan yen nilai kacida ageung tiasa ngalambatkeun turun matcher pola.) Mun patlist nyaeta full_buffer, awak saluyu keur dibales lamun match_max bait geus narima sarta euweuh pola sejen geus loyog. Naha atanapi henteu di keyword full_buffer dipaké, anu hurup poho nu ditulis ka expect_out (panyangga).

Mun patlist teh null keyword, sarta nulls anu diwenangkeun (via paréntah remove_nulls), nu pakait awakna dieksekusi lamun a single ASCII 0 anu loyog. Teu mungkin mun cocog 0 bait via glob atanapi regexp pola.

Kana cocog pola hiji (atawa eof atanapi full_buffer), sagala cocog jeung saméméhna kaluaran unmatched ieu disimpen dina expect_out variable (panyangga). Nepi ka 9 regexp patandingan substring anu disimpen dina variabel expect_out (1, string) ngaliwatan expect_out (9 string). Mun bendera -indices dipaké saméméh hiji pola, awal jeung indeks tungtung (dina formulir cocog pikeun lrange) tina 10 string anu disimpen dina variabel expect_out (X, ngawitan) jeung expect_out (X, tungtungna) dimana X nyaéta angka, pakait jeung posisi substring di panyangga kana. 0 nujul kana string anu loyog sakabéh pola na dihasilkeun pikeun pola glob ogé pola regexp. Contona, upami proses nu geus dihasilkeun kaluaran "abcdefgh \ n", hasil tina:

nyangka "cd"

nyaeta saolah-olah dina pernyataan di handap sempet dieksekusi:

Nyetél expect_out (0, string) cd set expect_out (panyangga) ABCD

sarta "efgh \ n" geus ditinggalkeun dina panyangga kaluaran. Mun prosés a dihasilkeun kaluaran "abbbcabkkkka \ n", hasil tina:

nyangka -indices -re "b (b *). * (k +)"

nyaeta saolah-olah dina pernyataan di handap sempet dieksekusi:

Nyetél expect_out (0, mimitian) 1 set expect_out (0, tungtungna) 10 set expect_out (0, string) bbbcabkkkk diatur expect_out (1, mimitian) 2 set expect_out (1, tungtungna) 3 set expect_out (1, string) BB diatur expect_out (2, mimitian) 10 set expect_out (2, tungtungna) 10 set expect_out (2, string) k diatur expect_out (panyangga) abbbcabkkkk

na "a \ n" geus ditinggalkeun dina panyangga kaluaran. Pola "*" (na -re ". *") Bakal siram kaluaran panyangga tanpa maca naon baé kaluaran leuwih ti prosés.

Normal, kaluaran loyog keur dipiceun tina nyangka urang buffers internal. Ieu bisa dicegah ku prefixing hiji pola jeung bandéra -notransfer. bendera Ieu hususna kapaké dina experimenting (jeung bisa disingket jadi "-not" kanggo genah bari experimenting).

The spawn id pakait jeung output cocog (atawa eof atanapi full_buffer) disimpen dina expect_out (spawn_id).

Bendera -timeout ngabalukarkeun arus nyangka sorana nganggo nilai handap sakumaha seep a tinimbang ngagunakeun nilai variabel seep.

Sacara standar, pola anu loyog ngalawan kaluaran ti prosés ayeuna, kumaha bendera -i ngumumkeun kaluaran tina daptar spawn_id ngaranna jadi loyog ngalawan sagala pola handap (up ka -i hareup). Daptar spawn_id kedah boh jadi daptar whitespace dipisahkeun tina spawn_ids atawa variabel ngarujuk kana daptar misalna tina spawn_ids.

Contona, dina conto di handap ieu waits pikeun "disambungkeun" ti prosés ayeuna, atawa "sibuk", "gagal" atawa "sandi sah" ti spawn_id ngaranna ku $ proc2.

nyangka {-i $ proc2 sibuk {nyimpen sibuk \ n; exp_continue} -re "gagal | sandi sah" abort seep abort disambungkeun}

Nilai variabel any_spawn_id global bisa dipaké pikeun cocog pola mun sagala spawn_ids nu ngaranna kalayan sagala umbul -i lianna di nyangka paréntah ayeuna. The spawn_id ti bendera -i kalawan euweuh pola pakait (ie, geuwat dituturkeun ku -i sejen) dijieun sadia pikeun sagala pola sejen dina sarua nyangka paréntah pakait sareng any_spawn_id.

Bendera -i ogé bisa ngaran variabel global nu hal variabel anu maca pikeun daptar Gajah Mungkur spawn. variabel anu reread iraha eta robah. Ieu nyadiakeun cara ngarobah sumber I / O bari sorana aya dina palaksanaan. Gajah Mungkur Spawn disadiakeun jalan ieu disebut "teu langsung" Gajah Mungkur spawn.

Lampah kayaning struktur kontrol putus jeung neruskeun ngabalukarkeun (ie, pikeun, proc) jeung kalakuanana dina cara biasa. Paréntah exp_continue ngamungkinkeun nyangka diri neruskeun executing tinimbang balik sakumaha eta ilaharna ngalakukeunana.

Ieu dipake keur Ngahindarkeun eksplisit puteran atawa pernyataan diulang nyangka. Conto di handap ieu mangrupa bagian ti peupeusan mun ngajadikeun otomatis rlogin. Exp_continue The avoids ngabogaan nulis pernyataan nyangka kadua (kasampak keur ajakan deui) lamun rlogin nu nyarankeun pikeun kecap akses.

nyangka {Sandi: {send_user stty -echo "sandi (pikeun $ pamaké) dina $ host:" expect_user -re "(. *) \ n" send_user "\ n" ngirim "$ expect_out (1, string) \ r" stty exp_continue bahana} lepat {send_user "sah sandi atanapi akun \ n" kaluar} seep {send_user "sambungan ka $ host timed kaluar \ n" kaluar} eof {send_user \ "sambungan ka imah gagal: $ expect_out (panyangga)" kaluar} - ulang $ ajakan}

Contona, dina sempalan di handap bisa mantuan pituduh a pamaké hiji interaksi anu geus sagemblengna otomatis. Dina hal ieu, terminal geus nempatkeun kana modeu atah. Lamun pamaké tekenan sababaraha "+", variabel hiji incremented. Lamun "p" dipencet, sababaraha mulih téh dikirim ka prosés nu, sugan jeung Toké eta sababaraha cara, jeung "abdi" ngidinan pamaké berinteraksi sareng prosesna, éféktif maok jauh kontrol ti naskah. Dina unggal hal, exp_continue nu ngamungkinkeun ayeuna nyangka neruskeun cocog pola sanggeus executing peta kiwari.

stty atah expect_after -echo {-i $ user_spawn_id "p" {ngirim "\ r \ r \ r"; exp_continue} "+" {incr foo; exp_continue} "i" {interaksi; exp_continue} "kaluar" kaluar}

Sacara standar, exp_continue resets nu otomatis seep. Otomatis henteu restarted, upami exp_continue disebut kalayan bendera -continue_timer.

expect_after [expect_args]
jalan identik jeung expect_before nu iwal lamun pola ti duanana nyangka na expect_after bisa cocog, anu pola nyangka ieu dipaké. Tempo paréntah expect_before kanggo inpormasi lengkep.

expect_background [expect_args]
nyokot dalil sarua salaku nyangka, sanajan kitu mulih langsung. Pola anu diuji iraha input anyar datang. The seep pola na standar anu hartina kana expect_background sarta cicingeun dipiceun. Upami teu kitu, paréntah expect_background migunakeun expect_before na expect_after pola kawas ngaharepkeun manten.

Lamun lampah expect_background ayeuna keur dievaluasi, pamrosésan tukang keur spawn id sarua bakal diblokir. processing tukang téh unblocked nalika aksi nu nyampurnakeun. Bari ngolah tukang bakal diblokir, kasebut nyaéta dimungkinkeun pikeun ngalakukeun hiji (foreground) nyangka dina spawn id sarua.

Teu mungkin sangkan ngaéksekusi hiji nyangka bari hiji expect_background nyaeta unblocked. expect_background pikeun spawn id tinangtu geus dihapus ku cara nyatakeun expect_background anyar jeung spawn id sarua. Nyatakeun expect_background kalawan euweuh pola ngaluarkeun id spawn nu dibikeun ti kamampuhan pikeun cocog pola di tukang.

expect_before [expect_args]
nyokot dalil sarua salaku nyangka, sanajan kitu mulih langsung. Pasang pola-aksi ti expect_before panganyarna jeung spawn id sarua keur implicitly ditambahkeun kana sagala paréntah di handap nyangka. Lamun pola hiji cocog, mangka diperlakukeun salaku lamun eta geus dieusian di nyangka paréntah sorangan, sarta awakna dikaitkeun geus dieksekusi dina konteks ti nyangka paréntah. Lamun pola ti duanana expect_before sarta nyangka bisa cocog, anu pola expect_before dipaké.

Mun euweuh pola anu dieusian, anu id spawn teu dipariksa pikeun sagala pola.

Iwal ditindes ku bendera -i, pola expect_before cocog ngalawan id spawn diartikeun wanoh yén paréntah expect_before ieu dibales (moal lamun pola na geus loyog).

Nu jadi sabab bendera -info expect_before balik spésifikasi kiwari pola naon éta bakal cocog. Sacara standar, éta ngalaporkeun dina spawn id ayeuna. Hiji spawn id spésifikasi pilihan bisa dibikeun pikeun informasi dina éta spawn id. Salaku conto

expect_before -info -i $ proc

Di paling salah spawn spésifikasi id bisa dibikeun. Bendera -indirect suppresses Gajah Mungkur spawn langsung nu datangna ukur tina spésifikasi langsung.

Gantina hiji spésifikasi spawn id, bendera "-all" bakal ngabalukarkeun "-info" lapor on sadayana Gajah Mungkur spawn.

Kaluaran bendera -info bisa bahannana tiasa dipaké deui salaku argumen pikeun expect_before.

expect_tty [expect_args]
nyaeta kawas nyangka tapi maos aksara ti / dev / TTY (ie keystrokes ti pamaké nu). Sacara standar, bacaan anu dipigawé dina modeu asak. Ku kituna, garis kedah ditungtungan ku mulang supados nyangka ningali aranjeunna. Ieu bisa jadi robah via stty (tingali paréntah stty handap).

expect_user [expect_args]
nyaeta kawas nyangka tapi maos aksara ti stdin (ie keystrokes ti pamaké nu). Sacara standar, bacaan anu dipigawé dina modeu asak. Ku kituna, garis kedah ditungtungan ku mulang supados nyangka ningali aranjeunna. Ieu bisa jadi robah via stty (tingali paréntah stty handap).

garpuh
nyiptakeun anyar prosés . The anyar prosés mangrupa salinan pasti tina nyangka ayeuna proses . Dina kasuksésan, garpu mulih 0 kana anyar (anak) prosés na mulih ti prosés ID sahiji anak prosés ka indungna prosés . Dina gagalna (invariably alatan kurangna sumberdaya, misalna, spasi swap, memori), mulih garpu -1 ka indungna prosés , jeung euweuh anak prosés ieu dijieun.

Forked prosés kaluar liwat paréntah kaluar, kawas nu aslina prosés . Prosés Forked anu diwenangkeun nulis ka file kumplit. Mun anjeun teu mareuman debugging atanapi logging di kalolobaan prosés, hasilna bisa ngalieurkeun.

Sababaraha implementations pty bisa pahili ku sababaraha pamiarsa jeung panulis, sanajan momentarily. Ku kituna, éta safest kana garpuh saméméh prosés spawning.

interaksi [string1 body1] ... [stringn [bodyn]]
méré kadali arus prosés pikeun pamaké, supaya keystrokes dikirim ka ayeuna proses , jeung stdout na stderr sahiji ayeuna proses nu malik deui.

pasang senar-awakna bisa jadi dieusian salaku alesan, nu hal awak geus dieksekusi nalika string pakait geus diasupkeun. (Ku standar, string henteu dikirim ka ayeuna proses .) The paréntah juru dianggap, upami awak akhir geus leungit.

Mun dalil pikeun sakabéh pernyataan interaksi merlukeun leuwih ti hiji jalur, sakabeh alesan bisa jadi "braced" kana hiji ku kituna ulah terminating unggal garis jeung backslash a. Bisi salah ieu, nu biasa Tcl panggantian baris lumangsung sanajan braces.

Contona, paréntah di handap ngalir interaksi jeung pasang senar-awak handap didefinisikeun: Lamun ^ Z dipencet, nyangka ieu digantung. (The bendera -reset restores nu modus terminal.) Lamun ^ A dipencet, pamaké nilik "Anjeun diketik a kontrol-A" jeung prosés anu dikirim hiji ^ A. Nalika $ dipencet, pamaké nilik tanggal. Nalika ^ C dipencet, nyangka kaluar. Lamun "foo" geus diasupkeun, pamaké nilik "bar". Nalika ~~ dipencet, anu nyangka juru ngalir interactively.

Nyetél CTRLZ \ 032 interaksi {-reset $ CTRLZ {exec sono -STOP [pid]} \ 001 {send_user "Anjeun diketik a kontrol-A \ n"; kirimkeun "\ 001"} $ {send_user "titimangsa ieu [jam format [jam detik]]".} \ 003 kaluar foo {send_user "bar"} ~~}

Dina pasang senar-awak, string anu loyog di urutan aranjeunna kadaptar salaku alesan. String anu sawaréh cocog teu dikirim ka ayeuna proses di antisipasi sésana datang. Mun karakter nu lajeng diasupkeun sapertos anu aya bisa henteu panjang jigana jadi cocok a, mung bagian tina string bakal dikirim ka prosés nu teu bisa jigana ngawitan cocok sejen. Ku kituna, string anu substrings tina patandingan parsial bisa cocog engké, lamun senar aslina anu ngusahakeun janten cocok pamustunganana gagal.

Sacara standar, cocog string anu pasti kalawan euweuh kartu liar . (Dina jelas, nu nyangka paréntah migunakeun pola glob-gaya sacara standar.) The bendera -ex bisa dipaké pikeun ngajaga pola nu disebutkeun bisa cocog interaksi umbul ti lakukeun kitu. Sagala pola dimimitian ku "-" kudu ditangtayungan ku cara ieu. (Kabéh senar dimimitian ku "-" nu ditangtayungan pikeun pilihan kahareup.)

Bendera -re Angkatan nu string bisa diinterpretasi salaku pola regexp-gaya. Dina hal ieu, substrings cocog disimpen di variabel interact_out kitu ka jalan nyangka toko output -na dina expect_out variabel. Bendera -indices ieu kitu didukung.

The eof pola nawarkeun hiji aksi anu dieksekusi kana tungtung-of-file. Hiji pola eof misah oge bisa nuturkeun bendera -output nu hal eta geus loyog lamun hiji eof nu dideteksi bari nulis kaluaran. Peta standar eof nyaeta "balik", kitu nu berinteraksi saukur mulih kana EOF nanaon.

The seep pola nawarkeun hiji seep (dina detik) jeung aksi anu keur dibales sanggeus euweuh karakter geus maca pikeun waktu tinangtu. Pola seep manglaku ka nu panganyarna dieusian prosés . Aya seep standar. The husus variabel "seep" (dipaké ku nyangka paréntah) euweuh geus mangaruhan kana seep ieu.

Contona, dina pernyataan di handap bisa dipaké pikeun autologout pamaké nu teu diketik nanaon pikeun sajam tapi anu masih meunang pesen Sistim sering:

interaksi -input $ user_spawn_id seep 3600 balik -output \ $ spawn_id

Lamun pola nya éta null keyword, sarta nulls anu diwenangkeun (via paréntah remove_nulls), nu pakait awakna dieksekusi lamun a ASCII tunggal 0 anu loyog. Teu mungkin mun cocog 0 bait via glob atanapi regexp pola.

Prefacing hiji pola kalawan bandéra nu -iwrite ngabalukarkeun variabel interact_out (spawn_id) bisa diatur kana spawn_id nu loyog pola (atawa eof).

Lampah kayaning putus jeung neruskeun struktur kontrol ngabalukarkeun (ie, pikeun, proc) jeung kalakuanana dina cara biasa. Sanajan kitu balik sabab interaksi pikeun balik deui ka panelepon anak, bari sabab inter_return interaksi ngabalukarkeun mulang dina panelepon na. Contona, upami "proc foo" disebut berinteraksi nu lajeng dieksekusi dina inter_return Peta, proc foo bakal balik. (Ieu ngandung harti yén lamun nelepon interaksi Basa interactively ngetikkeun balik bakal ngakibatkeun interaksi pikeun nuluykeun, bari inter_return baris ngabalukarkeun interaksi pikeun balik deui ka panelepon na.)

Salila berinteraksi, modeu atah keur dipaké supaya sakabeh karakter bisa jadi kaliwat ka ayeuna proses . Mun ayeuna proses henteu nyekel sinyal kontrol pakasaban, éta bakal eureun mun dikirim sinyal eureun (sacara standar ^ Z). Pikeun ngabalikan deui, ngirim sinyal nuluykeun (kayaning ku "maéhan -CONT"). Lamun anjeun rék ngirim SIGSTOP ka hiji misalna prosés (ku ^ Z), nganggap spawning csh mimiti lajeng ngajalankeun program Anjeun. Di sisi séjén, lamun rék ngirim SIGSTOP ka nyangka sorangan, juru panggero kahiji (sugan ku ngagunakeun karakter ngewa), lajeng mencet ^ Z.

pasang senar-awakna bisa dipaké salaku shorthand pikeun Ngahindarkeun ngabogaan asupkeun juru jeung ngaéksekusi Paréntah interactively. Mode terminal saméméhna geus dipaké bari awak pasangan string-awak keur dibales.

Pikeun speed, lampah ngaéksekusi dina modeu atah sacara standar. Bendera -reset resets terminal ka modeu nya kungsi saméméh interaksi ieu dibales (invariably, modeu asak). Catet yén karakter diasupkeun nalika mode keur switched bisa leungit (hiji fitur musibah ti supir terminal on sababaraha sistem). Hijina alesan ngagunakeun -reset nyaeta lamun Peta Anjeun gumantung kana ngajalankeun dina modeu asak.

Bendera -echo ngirimkeun karakter nu cocog pola handap deui ka prosés nu dihasilkeun éta stasiun unggal karakter ieu baca. Ieu bisa jadi mangpaat lamun pamaké perlu ningali eupan balik ti pola sawaréh diketik.

Lamun pola hiji keur echoed tapi pamustunganana gagal pikeun cocog, anu hurup dikirim ka ngaluncurkeun prosés . Lamun ngaluncurkeun prosés lajeng echoes aranjeunna, pamaké bakal ningali karakter dua kali. -echo meureun ukur luyu dina kaayan pamaké téh saperti teu mirip moal ngalengkepan pola. Contona, dina excerpt handap nyaéta tina rftp, naskah recursive-ftp, dimana pamaké ieu dianjurkeun pikeun nuliskeun ~ g, ~ p, atawa ~ l, nepi ka meunang, nempatkeun, atawa daptar diréktori ayeuna recursively. Ieu kitu jauh tina paréntah ftp normal, éta pamaké masih aya kacangcayaan pikeun ngetik ~ dituturkeun ku nanaon sejenna, iwal salah, nu hal, maranéhna gé meureun ngan malire hasilna atoh.

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

The -nobuffer bendera ngirimkeun karakter nu cocog pola handap asup pikeun kaluaran prosés jadi karakter nu maca.

Ieu mangpaat lamun anjeun keukeuh hayu program a bahana deui pola. Contona, di handap bisa dipaké pikeun nangkep dimana hiji jalma geus maneuh (modem Hayes-gaya). Unggal waktos "atd" katempona naskah log sesa jalur.

proc lognumber {} {interaksi -nobuffer -re "\ r (*.)" balik nyimpen $ log "[format jam [detik jam]]: disambungkeun $ interact_out (1, string)"} interaksi -nobuffer "atd" lognumber

Salila berinteraksi, pamakéan saméméhna tina log_user geus teu dipalire. Dina sababaraha hal, interaksi bakal maksakeun output -na pikeun asup (dikirim ka kaluaran baku) saprak éta geus disangka pamaké henteu keukeuh interaksi ambing.

Bendera -o ngabalukarkeun sagala pasangan konci-awak handap bisa dilarapkeun ka kaluaran ayeuna proses . Ieu tiasa mangpaat, contona, lamun kaayaan sarwa nu ngirim hurup dihoyongkeun dina mangsa sési telnet.

Sacara standar, interaksi ekspektasi pamaké pikeun jadi nulis stdin sarta maca stdout tina nyangka prosés téa. Bendera -u (pikeun "pamaké") ngajadikeun interaksi katingal keur pamaké salaku prosés ngaranna ku argumen na (anu kedah janten id ngaluncurkeun).

Hal ieu ngamungkinkeun dua prosés hubungan jadi ngagabung babarengan tanpa ngagunakeun hiji loop eksplisit. Pikeun rojong dina debugging, nyangka diagnostics salawasna buka stderr (atawa stdout pikeun logging tangtu jeung informasi debugging). Pikeun ékol anu sarua, paréntah juru bakal baca interactively ti stdin.

Contona, dina sempalan di handap nyiptakeun login prosés . Mangka dials pamaké (teu ditingalikeun), sarta tungtungna ngahubungkeun dua babarengan. Tangtu, sagala proses bisa jadi Cirian pikeun login. Hiji cangkang, contona, bakal ngidinan pamaké pikeun dianggo tanpa supplying hiji akun tur sandi.

spawn login set login $ spawn_id spawn tip modem # dial deui kaluar pikeun pamaké # sambungkeun pamaké pikeun login interaksi -u $ login

Pikeun ngirim output keur sababaraha prosés, daptar unggal daptar spawn id prefaced ku bendera -output. Input pikeun grup tina kaluaran Gajah Mungkur spawn bisa jadi ditangtukeun ku daptar spawn id prefaced ku bendera -input. (Boh -input na -output butuh béréndélan di formulir sarua salaku bendera -i di nyangka paréntah, iwal any_spawn_id henteu bermakna dina berinteraksi.) Sadaya umbul jeung handap string (atawa pola) dilarapkeun ka input ieu dugi sejen - input bendera nembongan. Mun euweuh -input nembongan, -output ngakibatkeun "-input $ user_spawn_id -output". (Nya kitu kalawan pola anu teu boga -input.) Mun hiji -input geus dieusian, éta overrides $ user_spawn_id. Mun hiji -input kadua dieusian, éta overrides $ spawn_id. Umbul -input tambahan bisa jadi dieusian.

Dua input tersirat prosés standar pikeun ngabogaan outputs maranéhna dieusian sakumaha $ spawn_id na $ user_spawn_id (dina sabalikna). Mun hiji bandéra -input muncul kalawan henteu bendera -output, karakter ti éta prosés téh dipiceun.

Bendera -i nawarkeun gaganti pikeun spawn_id ayeuna lamun euweuh -input atanapi -output séjén umbul anu dipaké. A bendera -i ngakibatkeun hiji bandéra -o.

Kasebut nyaéta dimungkinkeun pikeun ngarobah prosés nu keur berinteraksi kalawan ku ngagunakeun Gajah Mungkur spawn langsung. (Gajah Mungkur spawn langsung digambarkeun dina bagian dina nyangka paréntah.) Gajah Mungkur spawn langsung bisa jadi dieusian ku -i kana, -u, -input, atanapi umbul -output.

[args] juru
ngabalukarkeun pamaké pikeun jadi interactively ditanya keur nyangka na paréntah Tcl. Hasil unggal paréntah geus dicitak.

Lampah kayaning struktur kontrol putus jeung neruskeun ngabalukarkeun (ie, pikeun, proc) jeung kalakuanana dina cara biasa. Sanajan kitu balik sabab juru balik ka panelepon anak, bari inter_return ngabalukarkeun juru ngabalukarkeun mulang dina panelepon na. Contona, upami "proc foo" disebut juru nu lajeng dieksekusi dina inter_return Peta, proc foo bakal balik. Naon sabab paréntah séjén juru neruskeun nyababkeun pikeun Paréntah anyar.

Sacara standar, ajakan ngandung dua wilangan buleud. The integer munggaran ngajelaskeun jero tina tumpukan evaluasi (ie, sabaraha kali Tcl_Eval geus disebut). The integer kadua nya éta sajarah identifier Tcl. ajakan nu bisa diatur ku watesan prosedur disebut "prompt1" anu nilai balik janten ajakan salajengna. Mun hiji pernyataan boga tanda petik kabuka, parens, braces, atawa kurung, hiji ajakan sekundér (sacara standar "+>") anu dikaluarkeun kana newline. The ajakan sekundér bisa jadi diatur ku watesan prosedur disebut "prompt2".

Salila juru, modeu asak geus dipaké, sanajan panelepon na ieu ngagunakeun mode atah.

Mun stdin ditutup, juru bakal balik iwal bendera -eof dipaké, nu hal argumen saterusna ieu invoked.

log_file [args] [[-a] file]
Mun hiji Ngaran koropak ieu disadiakeun, log_file baris ngarekam transcript sahiji sesi (dimimitian dina titik nu) dina file. log_file bakal eureun ngarekam lamun euweuh argumen dirumuskeun. Sagala file log saméméhna geus ditutup.

Gantina Ngaran koropak a, a file identifier Tcl bisa jadi disadiakeun ku ngagunakeun umbul -open atanapi -leaveopen. Ieu sarupa paréntah spawn. (Tempo spawn pikeun info leuwih lengkep.)

The -a kaluaran pasukan bendera bisa asup nu ieu diteken ku paréntah log_user.

Sacara standar, paréntah log_file appends mun file heubeul tinimbang truncating aranjeunna, keur genah keur bisa ngahurungkeun logging dipareuman jeung dina sababaraha kali dina hiji sési. Pikeun truncate payil, make bendera -noappend.

Nu jadi sabab bendera -info log_file balik pedaran tina alesan non-info panganyarna dibikeun.

log_user -info | 0 | 1
Sacara standar, anu kirim / nyangka dialog geus asup kana stdout (sarta logfile lamun kabuka). The logging jeung stdout geus ditumpurkeun ku paréntah "log_user 0" na reenabled ku "log_user 1". Logging jeung logfile nyaeta unchanged.

Nu jadi sabab bendera -info log_user balik pedaran tina alesan non-info panganyarna dibikeun.

match_max [-d] [-i spawn_id] [ukuranana]
ngahartikeun ukuran tina panyangga (dina bait) dipaké internal ku nyangka. Kalawan henteu ukuranana argumen, ukuran ayeuna geus balik.

Kalawan bendera -d, ukuran standar tos disetel. (The standar awal nyaeta 2000.) Jeung bendera -i, ukuran tos disetel kanggo id spawn ngaranna, disebutkeun eta disetel kanggo ayeuna proses .

overlay [- # spawn_id] [- # spawn_id] [...] program [args]
executes "program args" dina tempat program ayeuna nyangka, nu terminates. A hyphen argumen bulistir Angkatan a hyphen di hareup ngaran paréntah sakumaha lamun ieu cangkang login. Kabéh spawn_ids anu ditutup iwal jelema ngaranna jadi alesan. Ieu anu dipetakeun onto nu identifiers file ngaranna.

Spawn_ids anu dipetakeun kana berkas identifiers keur program anyar pikeun inherit. Contona, garis handap ngalir catur jeung ngamungkinkeun ka jadi dikawasa ku ayeuna prosés - ngomong, master catur.

overlay -0 $ spawn_id -1 $ spawn_id -2 $ spawn_id catur

Ieu leuwih efisien ti "interaksi -u" kitu, nya kurban kamampuhan pikeun ngalakukeun interaksi diprogram ti nyangka prosés geus teu aya dina kontrol.

Catetan yen teu terminal ngadalikeun geus disadiakeun. Ku kituna, lamun nyoplokkeun atanapi remap input baku, program anu ngalakukeun kontrol pakasaban (cangkang, login, jsb) moal bener fungsina.

parity [-d] [-i spawn_id] [nilai]
ngahartikeun naha parity kudu dipikagaduh atanapi dilucuti ti kaluaran prosés ngaluncurkeun. Lamun nilai nyaeta nol, parity ieu dilucuti, disebutkeun eta teu dilucuti. Kalawan henteu nilai argumen, nilai ayeuna geus balik.

Kalawan bendera -d, nilai parity standar tos disetel. (The standar awal nyaeta 1, nyaéta parity teu dilucuti.) Sareng bendera -i, nilai parity diatur pikeun spawn id ngaranna, disebutkeun eta disetel kanggo ayeuna proses .

remove_nulls [-d] [-i spawn_id] [nilai]
ngahartikeun naha nulls nu dipikagaduh atawa dikaluarkeun tina kaluaran prosés ngaluncurkeun saméméh pola cocog atawa nyimpen dina expect_out variabel atawa interact_out. Lamun nilai anu 1, nulls nu dipiceun. Lamun nilai téh 0, nulls teu dipiceun. Kalawan henteu nilai argumen, nilai ayeuna geus balik.

Kalawan bendera -d, nilai standar tos disetel. (The standar awal nyaeta 1, nyaéta nulls dipiceun.) Sareng bendera -i, nilai tos disetel pikeun spawn id ngaranna, disebutkeun eta disetel kanggo ayeuna proses .

Naha atanapi henteu nulls dipiceun, nyangka bakal ngarekam bait null kana log sarta stdout.

kirimkeun [-flags] string
Ngirimkeun string ka ayeuna proses . Contona, sorana

kirimkeun "pantun dunya \ r"

ngirimkeun Hurup, helloworld ka ayeuna proses . (Tcl ngawengku hiji printf paréntah -like (disebut format) anu tiasa ngawangun string wenang kompléks.)

Karakter dikirim langsung najan program kalawan asupan garis-buffered moal baca karakter dugi karakter balik geus dikirim. Hiji karakter balik dilambangkeun "\ r".

The - bandéra Angkatan argumen salajengna bisa diinterpretasi salaku senar tinimbang bandéra hiji. Sagala string bisa dimimitian ku "-" naha atanapi henteu eta sabenerna Sigana mah bendera hiji. Ieu nyadiakeun mékanisme dipercaya pikeun nangtukeun string variabel tanpa keur tripped up ku maranéhanana anu ngahaja kasampak kawas umbul. (Kabéh senar dimimitian ku "-" nu ditangtayungan pikeun pilihan kahareup.)

Bendera -i ngumumkeun yén senar éta dikirim ka spawn_id ngaranna. Mun spawn_id nyaeta user_spawn_id, sarta terminal aya dina modeu atah, newlines di senar nu ditarjamahkeun kana balik-newline urutan ambéh maranéhanana némbongan saolah-olah terminal éta dina modeu asak. Bendera -raw disables tarjamah ieu.

Bendera -null ngirimkeun karakter null (0 bait). Sacara standar, salah hypothesis dikirim. Hiji integer bisa turutan -null keur nandaan sabaraha nulls ngirim.

Bendera -break dibangkitkeun hiji kaayaan putus. Ieu ukur ngajadikeun rasa lamun nu spawn id nujul kana hiji alat TTY dibuka via "spawn -open". Lamun geus ngaluncurkeun hiji prosés kayaning tip, Anjeun kedah nganggo konvénsi tip pikeun generating putus.

The -s kaluaran pasukan bandéra keur dikirim "lalaunan", sahingga ulah aya kaayaan umum dimana komputer outtypes hiji panyangga input nu ieu dirancang pikeun manusa anu pernah bakal outtype sami panyangga . output ieu dikawasa ku nilai variabel "send_slow" nu nyokot daptar dua unsur. Unsur kahiji mangrupa integer nu ngajelaskeun jumlah bait ngirim atomically. Unsur kadua ngarupakeun angka riil nu ngajelaskeun angka detik ku nu atom ngirimkeun kudu dipisahkeun. Contona, "Nyetél send_slow {10 .001}" bakal maksakeun "ngirim -s" ngirim string kalawan 1 millisecond di antara tiap 10 karakter dikirim.

The -h kaluaran pasukan bandéra keur dikirim (rada) kawas manusa sabenerna ngetikkeun. Nepi manusa-kawas némbongan antara karakter. (Algoritma ieu dumasar kana hiji sebaran Weibull, kalayan modifikasi pikeun nyocogkeun aplikasi husus dina ieu.) Output ieu dikawasa ku nilai variabel "send_human" nu nyokot daptar lima unsur. Dua elemen mimitina mangrupakeun rata waktos interarrival tina karakter dina detik. Kahiji ieu dipaké sacara standar. kadua dipaké dina tuntung Kecap, mun simulate nu reureuh halus nu aya kalana lumangsung dina transisi misalna. Parameter katilu nyaéta ukuran variabiliti mana .1 cukup variable, 1 nyaeta alesan variabel, sarta 10 anu cukup invariable. The extremes nu 0 ka tak terhingga. Dua parameter panungtungan nu masing-masing hiji waktos interarrival minimum jeung maksimum. Minimum jeung maksimum nu dipaké panungtungan sarta "klip" waktu ahir. The pamungkas rata tiasa rada béda ti rata dibikeun lamun minimum jeung maksimum klip cukup nilai.

Salaku conto, paréntah di handap emulates hiji juru atik saum sareng konsisten:

set send_human {.1 .3 1 .05 2} ngirim -h "Aku lapar. Hayu urang ngalakukeun dahar beurang".

bari handap bisa jadi leuwih cocog sanggeus hangover a:

set send_human {.4 .4 .2 .5 100} ngirim -h "pihak Goodd lash wengi!"

Catet yén kasalahan teu simulated, najan anjeun tiasa nyetél kaayaan koreksi kasalahan diri ku embedding kasalahan jeung koréksi dina kirim argumen.

The umbul pikeun ngirim hurup null, pikeun ngirim ngarecah, pikeun forcing kaluaran slow jeung output manusa-gaya anu saling ekslusif. Ngan hiji dieusian panungtungan bakal dipaké. Saterusna, moal argumen string bisa dieusian ku umbul pikeun ngirim hurup null atanapi ngarecah.

Ieu mangrupakeun ide nu sae pikeun miheulaan nu kirim heula ka prosés ku hiji nyangka. nyangka bakal ngadagoan prosés pikeun ngamimitian, sedengkeun kirim teu tiasa. Dina sababaraha hal, upama kirim heula nyampurnakeun méméh prosés dimimitian ngajalankeun, anjeun ngajalankeun résiko ngabogaan data anjeun teu dipalire. Dina kaayan program interaktif nawiskeun teu ajakan awal, anjeun tiasa miheulaan ngirim ku reureuh a saperti dina:

# Pikeun ngahindarkeun méré hacker petunjuk tentang kumaha carana pikeun megatkeun di, # Sistim ieu teu ajakan pikeun hiji sandi éksternal. # Tungguan 5 detik kanggo exec ka ngalengkepan telnet spawn very.secure.gov sare 5 kirim sandi \ r

exp_send mangrupa landian pikeun kirim. Upami Anjeun keur make Expectk atanapi sabagian variasi séjén nyangka di lingkungan Mun noong, kirimkeun diartikeun ku noong pikeun Tujuan sagemblengna béda. exp_send geus disadiakeun pikeun kasaluyuan antara lingkungan. aliases sarupa anu disadiakeun pikeun séjén nyangka urang Paréntah kirim lianna.

send_error [-flags] string
nyaeta kawas kirim, iwal kaluaran kasebut dikirim ka stderr tinimbang ayeuna proses .

send_log [-] string
nyaeta kawas kirim, iwal string anu ukur dikirim ka file log (tingali log_file.) The alesan nu dipaliré lamun euweuh file log nyaeta muka.

send_tty [-flags] string
nyaeta kawas kirim, iwal kaluaran kasebut dikirim ka / dev / TTY tinimbang ayeuna proses .

send_user [-flags] string
nyaeta kawas kirim, iwal kaluaran kasebut dikirim ka stdout tinimbang ayeuna proses .

detik sare
ngabalukarkeun naskah keur bobo keur angka tinangtu tina detik. Detik bisa jadi jumlah decimal. Interrupts (jeung acara Tk lamun anjeun maké Expectk) anu diproses bari nyangka saré.

spawn [args] program [args]
nyiptakeun anyar prosés ngajalankeun "program args". Stdin anak, stdout na stderr disambungkeun ka nyangka, ambéh maranéhanana bisa dibaca jeung ditulis ku Paréntah nyangka lianna. Sambungan teh geus pegat ku nutup atanapi lamun proses sorangan nutup salah sahiji identifiers file.

Lamun proses ieu dimimitian ku spawn, anu spawn_id variabel diatur ka descriptor ngarujuk kana éta prosés . The prosés digambarkeun ku spawn_id dianggap "ayeuna proses ". spawn_id bisa dibaca atawa ditulis, dina pangaruh nyadiakeun kadali pakasaban.

user_spawn_id ngarupakeun variabel global ngandung hiji descriptor nu nujul kana pamaké. Contona, nalika spawn_id disetel ka nilai ieu, nyangka behaves kawas expect_user.

Error_spawn_id .I ngarupakeun variabel global ngandung hiji descriptor nu nujul kana kasalahan baku. Contona, nalika spawn_id disetel ka nilai ieu, ngirim behaves kawas send_error.

tty_spawn_id ngarupakeun variabel global ngandung hiji descriptor nu nujul kana / dev / TTY. Lamun / dev / TTY teu aya (kayaning dina Cron, di, atawa skrip tumpak), lajeng tty_spawn_id teu tangtu. Ieu bisa diuji saperti:

lamun {[info vars tty_spawn_id]} {# / dev / TTY aya} sejenna {# / dev / TTY teu aya # sigana mah di Cron, tumpak, atawa dina Aksara}

spawn mulih ka UNIX prosés id. Mun euweuh proses ieu ngaluncurkeun, 0 geus balik. Variabel spawn_out (budak, ngaran) disetel ka ngaran alat pty budak.

Sacara standar, spawn echoes nami paréntah tur alesan. The titik bendera -noecho spawn ti lakukeun ieu.

The -console sabab bendera konsol kaluaran bisa dialihkeun ka ngaluncurkeun prosés . Ieu teu dirojong di sakabeh sistem.

Internal, spawn migunakeun pty a, initialized cara sarua salaku TTY pamaké. Ieu salajengna initialized supados sadaya setelan nu "waras" (numutkeun stty (1)). Lamun stty_init variabel dihartikeun, mangka diinterpretasi dina gaya alesan stty sakumaha konfigurasi salajengna. Contona, "set stty_init atah" bakal ngakibatkeun salajengna ngaluncurkeun terminal prosés urang mimitian dina modeu atah. -nottycopy skips nu initialization dumasar TTY pamaké. -nottyinit skips nu "waras" initialization.

Normal, spawn nyokot saeutik waktu sangkan ngaéksekusi. Lamun aya bewara nyokot jumlah signifikan waktos spawn, mangka meureun encountering ptys nu wedged. Sajumlah tés anu ngajalankeun kana ptys ulah entanglements kalayan prosés errant. (Ieu nyandak 10 detik per pty wedged.) Aplikasi nyangka kalawan pilihan -d bakal némbongkeun lamun nyangka ieu encountering loba ptys di nagara ganjil. Lamun teu bisa maéhan prosés nu ptys ieu meungkeut, ngan recourse Anjeun bisa jadi keur reboot.

Lamun program teu bisa ngaluncurkeun hasil lantaran exec (2) gagal (misalna nalika program teu aya), hiji pesen kasalahan bakal balik ku interaksi hareup atawa nyangka paréntah sakumaha lamun program kungsi ngajalankeun sarta dihasilkeun pesen kasalahan salaku kaluaran. Kabiasaan ieu téh konsekuensi alami palaksanaan spawn. Internal, spawn forks, nu satutasna anu ngaluncurkeun prosés boga cara komunikasi jeung nyangka aslina prosés iwal ku komunikasi via spawn_id nu.

Bendera -open ngabalukarkeun argumen salajengna bisa diinterpretasi salaku file identifier Tcl (ie, dipulang ku muka.) Nu spawn id tiasa lajeng dipaké salaku lamun éta hiji ngaluncurkeun prosés . (The file identifier kedah euweuh dipaké.) Ieu ngidinan Anjeun ngubaran Alat atah, file, jeung pipelines salaku prosés ngaluncurkeun tanpa ngagunakeun pty a. 0 geus balik ka nunjukkeun teu aya pakait prosés . Nalika éta sambungan kana ngaluncurkeun prosés geus ditutup, jadi teh file identifier Tcl. Bendera -leaveopen téh sarupa jeung -open iwal -leaveopen ngabalukarkeun file identifier bisa ditinggalkeun buka komo sanggeus jaman spawn id geus ditutup.

Bendera -pty ngabalukarkeun pty bisa dibuka tapi euweuh proses ngaluncurkeun. 0 geus balik ka nunjukkeun teu aya pakait prosés . Spawn_id diatur saperti biasa.

Variabel spawn_out (budak, fd) diatur ka identifier file pakait jeung budak pty. Ieu bisa ditutup maké "-slave nutup".

Ngaran bendera -ignore sinyal bisa dipaliré dina ngaluncurkeun prosés . Upami teu kitu, sinyal meunang paripolah standar. Sinyal nu ngaranna sakumaha dina paréntah bubu, iwal unggal sinyal merlukeun bendera misah.

tingkat strace
ngabalukarkeun pernyataan di handap bisa dicitak saméméh keur dibales. (Komando renik Tcl urang ngambah variabel.) Tingkat nunjukkeun sabaraha jauh ka handap dina tumpukan panggero pikeun ngabasmi. Contona, paréntah di handap ngalir nyangka bari tracing kahiji 4 tingkatan nelepon, tapi taya handap éta.

nyangka -c "strace 4" script.exp

Nu jadi sabab bendera -info strace balik pedaran tina alesan non-info panganyarna dibikeun.

args stty
robah modus terminal sarupa jeung paréntah stty éksternal.

Sacara standar, terminal ngadalikeun ieu diakses. terminal séjén bisa diaksés ku appending "requests keur status balik deui salaku hasil tina sorana. Mun euweuh status ieu dipénta sarta terminal ngadalikeun ieu diakses, status saméméhna tina atribut atah jeung bahana anu balik dina formulir nu engké tiasa dipaké ku sorana.

Contona, dalil atah atawa -cooked nempatkeun terminal kana modeu atah. Dalil -raw atawa dimasak nempatkeun terminal kana modeu asak. Dalil bahana na -echo nempatkeun terminal kana mode echo na noecho mungguh.

Conto di handap illustrates kumaha samentara mareuman echoing. Ieu bisa dipaké dina Aksara disebutkeun-otomatis pikeun nyegah embedding kecap akses eta. (Tempo langkung sawala dina kaayaan kieu nyangka petunjuk handap.)

stty -echo send_user "Sandi:" "(. *) \ n" expect_user -re diatur sandi $ expect_out (1, string) bahana stty

args sistim
méré args ka sh (1) salaku input, ngan lamun geus diketik sakumaha paréntah ti terminal a. Nyangka waits dugi cangkang terminates. Status balik ti sh ieu diatur ku cara nu sami nu exec handles status na mulang.

Kontras jeung exec nu alihan stdin na stdout kana naskah, sistem ngalaksanakeun euweuh redirection (lian ti nu dituduhkeun ku string sorangan). Ku kituna, kasebut nyaéta dimungkinkeun pikeun ngagunakeun program anu kudu ngobrol langsung ka / dev / TTY. Pikeun ékol anu sarua, hasil Sistim teu kacatet dina log.

[args] timestamp
mulih timestamp a. Kalawan henteu alesan, jumlah detik saprak epoch dina ieu balik.

The -format bendera nawarkeun hiji string anu geus balik tapi kalawan panggantian dijieun luyu jeung aturan POSIX pikeun strftime. Contona% a diganti ku hiji ngaran weekday disingkat (ie, Sap). Batur anu:

% Ngaran weekday disingkat% A pinuh ngaran weekday% b disingkat ngaran bulan% B pinuh ngaran bulan% c tanggal-waktu jadi di: Wed Oct 6 11:45:56 1993% d dinten tina bulan (01-31% H jam (00-23)% I jam (01-12) dinten% j (001-366)% m bulan (01-12)% m menit (00-59)% p am atawa pm% S kadua (00-61) % u dinten (1-7, Senén nyaéta dinten mimiti minggu)% U minggu (00-53, minggu hareup nya dinten mimiti minggu salah)% V minggu (01-53, ISO 8601 gaya)% w dinten (0- 6)% W minggu (00-53, Senén kahiji nyaeta dinten mimiti minggu salah)% x tanggal-waktu jadi di: Wed Oct 6 1993% waktos X salaku di: 23:59:59% y taun (00-99) % Y taun sakumaha di: 1993% Z timezone (atawa nanaon lamun teu determinable) %% tanda bulistir persen

spésifikasi% lianna anu undefined. karakter sejenna bakal dialirkeun kacekel. Mung C Lokalisasi ieu dirojong.

Bendera -seconds nawarkeun sababaraha detik saprak epoch ka dipaké salaku sumber ti mana mun format. Disebutkeun, waktos ayeuna ieu dipaké.

The -gmt kaluaran pasukan bendera timestamp nganggo GMT timezone. Kalawan henteu bandéra, anu timezone lokal anu dipaké.

bubu [[paréntah] sinyal]
ngabalukarkeun paréntah anu dibikeun bisa dieksekusi kana resi kahareup salah sahiji sinyal ditangtukeun. sorana geus dieksekusi dina wengkuan global. Lamun sorana bolos, peta sinyal geus balik. Lamun sorana teh SIG_IGN string, sinyal anu teu dipalire. Lamun sorana teh SIG_DFL string, sinyal téh hasil mun sistem standar. Sinyal nyaéta boh sinyal tunggal atawa daptar sinyal. Sinyal bisa jadi dieusian numerik atanapi symbolically sakumaha per sinyal (3). The "SIG" awalan bisa jadi disingkahkeun.

Kalawan henteu alesan (atawa -number argumen), bubu mulih jumlah signal ti paréntah bubu ayeuna keur dibales.

The -code bendera ngagunakeun kode balikna paréntah dina tempat kode naon Tcl éta rék balik lamun sorana asalna dimimitian ngajalankeun.

Bendera -interp ngabalukarkeun sorana bisa dievaluasi ngagunakeun juru aktif di waktos paréntah ngamimitian ngajalankeun tinimbang nalika bubu ieu nyatakeun.

Bendera -name ngabalukarkeun paréntah bubu pikeun balik nami sinyal paréntah bubu ayeuna keur dibales.

Bendera -max ngabalukarkeun paréntah bubu pikeun balik jumlah signal panggedena nu bisa disetel.

Contona, paréntah "bubu {send_user" euuh! "} SIGINT" baris nyitak "euuh!" unggal waktos pamaké tekenan sababaraha ^ C.

Sacara standar, SIGINT (anu tiasa biasana jadi dihasilkeun ku mencét ^ C) jeung SIGTERM ngabalukarkeun nyangka ka LN. Ieu alatan dina bubu di handap, dijieun sacara standar lamun nyangka dimimitian.

bubu kaluar {SIGINT SIGTERM}

Lamun make bendera -D ngamimitian debugger nu, SIGINT ieu ngartikeun ulang pikeun ngamimitian debugger interaktif. Ieu alatan dina bubu handap:

bubu {exp_debug 1} SIGINT

The debugger bubu bisa dirobah ku netepkeun lingkungan variabel EXPECT_DEBUG_INIT kana paréntah bubu anyar.

Anjeun tiasa, tangtosna, override duanana ieu ngan ku nambahkeun Paréntah bubu naskah Anjeun. Dina sababaraha hal, lamun boga sorangan "bubu kaluar SIGINT" Anjeun, ieu bakal override nu bubu debugger. Ieu mangpaat upami anjeun hoyong pikeun nyegah pamaké ti meunang debugger di sakabeh.

Mun rék nangtukeun bubu sorangan dina SIGINT tapi masih bubu ka debugger keur ngajalankeun, pamakéan:

lamun {! [exp_debug]} {bubu mystuff SIGINT}

Alternatipna, Anjeun bisa bubu pikeun debugger nu ngagunakeun sabagian sinyal lianna.

bubu moal ngantep anjeun override peta pikeun SIGALRM sakumaha ieu dipaké internal pikeun nyangka. Paréntah mutuskeun susunan SIGALRM mun SIG_IGN (malire). Anjeun tiasa reenable ieu salami anjeun mareuman eta mangsa Paréntah spawn saterusna.

Tempo sinyal (3) pikeun info leuwih lengkep.

antosan [args]
Nepi dugi a ngaluncurkeun prosés (atawa arus prosés lamun taya anu ngaranna) terminates.

antosan ilaharna mulih daptar opat wilangan buleud. The integer munggaran teh pid sahiji prosés anu ieu waited kana. The integer kadua nya éta spawn id alkana. The integer katilu nyaeta -1 lamun lumangsung kasalahan sistem operasi, atanapi 0 disebutkeun. Lamun integer katilu éta 0, anu integer kaopat nyaeta status balik ku ngaluncurkeun prosés . Lamun integer katilu éta -1, anu integer kaopat nyaeta nilai errno diatur ku sistem operasi. Variabel errorCode global ieu ogé disetel.

Elemen tambahan mungkin muncul dina ahir nilai balik ti nungguan. Unsur kalima pilihan nangtukeun hiji kelas inpormasi. Ayeuna, hijina mungkin nilai pikeun unsur ieu CHILDKILLED nu hal éta dua nilai hareup nu C-gaya ngaran sinyal jeung pedaran tékstual pondok.

Bendera -i ngumumkeun éta prosés ngadagoan pakait kana spawn_id ngaranna (NOT kana prosés id). Jero hiji Handler SIGCHLD, kasebut nyaéta dimungkinkeun pikeun ngadagoan wae ngaluncurkeun prosés ku ngagunakeun -1 spawn id.

Bendera -nowait ngabalukarkeun nungguan balik langsung jeung indikasi nungguan suksés. Nalika prosés kaluar (engké), eta sacara otomatis bakal ngaleungit tanpa butuh hiji nungguan eksplisit.

Paréntah nungguan bisa ogé dipaké nungguan pikeun forked prosés migunakeun dalil "-i -1". Teu kawas pamakéan na kalawan prosés ngaluncurkeun, paréntah ieu bisa dieksekusi iraha wae. Aya kontrol leuwih nu prosés ieu reaped. Sanajan kitu, éta nilai balik bisa dipariksa pikeun prosés id.

perpustakaan

Nyangka otomatis weruh ngeunaan dua diwangun-di perpustakaan pikeun nyangka Aksara. Ieu anu ditetepkeun ku directories ngaranna dina variabel exp_library na exp_exec_library. Duanana aya dimaksudkan pikeun ngamuat koropak utiliti anu bisa dipaké ku Aksara lianna.

exp_library ngandung payel arsitektur-bebas. exp_exec_library ngandung payel arsitektur-gumantung. Gumantung kana sistem anjeun, duanana directories bisa jadi sagemblengna kosong. Ayana éta file $ exp_exec_library / ucing-buffers ngajelaskeun naha buffers / bin / ucing Anjeun sacara standar.

Geulis-percetakan

Hiji harti vgrind geus sadia pikeun geulis-percetakan nyangka Aksara. Anggap definisi vgrind disadiakeun jeung nyangka distribution ieu neuleu dipasang, anjeun tiasa nganggo salaku:

vgrind file -lexpect

conto

Éta loba jadi semu cara nempatkeun sagalana babarengan yén lalaki kaca ngajelaskeun. Kuring ajak anjeun maca na coba kaluar conto dina conto diréktori tina nyangka sebaran. Sababaraha di antarana mangrupakeun program nyata. Batur anu saukur illustrative téhnik nu tangtu, sarta tangtu, sababaraha hiji anu hacks ngan rusuh. The masang file boga gambaran gancang program ieu.

The nyangka tulak (tingali Tempo ogé) oge mangpaat. Bari sababaraha tulak make rumpaka pakait jeung versi samemehna ngeunaan nyangka, éta rationales dibéré bareng kénéh valid tur muka kana beuki pisan jéntré ti kaca lalaki ieu.

CAVEATS

Ekstensi bisa ngahiji sacara lengkep jeung nyangka ngaran paréntah urang. Contona, ngirim diartikeun ku noong pikeun Tujuan sagemblengna béda. Ku sabab kitu, lolobana nyangka Paréntah oge sadia sakumaha "exp_XXXX". Paréntah sarta variabel nu dimimitian ku "exp", "antar", "spawn", sarta "seep" teu boga aliases. Nganggo ngaran paréntah nambahan lamun perlu kasaluyuan ieu antara lingkungan.

Nyangka nyokot view rada liberal of scoping. Dina sababaraha hal, variabel baca ku paréntah husus kana program nyangka bakal ditéang mimitina ti lingkup lokal, sarta lamun henteu kapanggih, dina ruang lingkup global. Contona, ieu obviates kudu nempatkeun "seep global" dina unggal prosedur nu nulis anu ngagunakeun nyangka. Di sisi séjén, variabel ditulis téh salawasna dina wengkuan lokal (iwal hiji "global" paréntah geus dikaluarkeun). Masalah paling umum ieu ngabalukarkeun nyaéta nalika spawn geus dieksekusi dina prosedur. Luar prosedur, spawn_id euweuh aya, sahingga ngaluncurkeun prosés geus euweuh diaksés saukur kusabab scoping. Nambahkeun hiji "spawn_id global" prosedur kitu.

Lamun teu bisa ngaktipkeun kamampuhan multispawning (ie, sistem Anjeun ngarojong ngayakeun pilih (BSD *. *), Polling (SVR> 2), atawa hiji hal sarua), nyangka ngan bakal tiasa ngadalikeun hiji single prosés dina hiji waktu. Dina hal ieu, ulah nyobian diatur spawn_id, atawa kudu ngaéksekusi prosés via exec bari ngaluncurkeun prosés ieu ngajalankeun. Saterusna, anjeun moal bisa nyangka ti sababaraha prosés (kaasup pamaké salaku salah) dina waktu nu sarua.

Terminal parameter bisa boga pangaruh badag dina Aksara. Contona, upami naskah ieu ditulis néangan echoing, éta bakal misbehave lamun echoing dipareuman. Ku sabab kitu, nyangka pasukan terminal parameter waras sacara standar. Hanjakal, ieu bisa nyieun hal pikaresepeun pikeun program lianna. Salaku conto, nu emacs cangkang hayang ngarobah "dawam" mappings: newlines perlu dipetakeun kana newlines tinimbang newlines kenop-balik, sarta echoing nyaeta ditumpurkeun. Hal ieu ngamungkinkeun hiji ngagunakeun emacs edit garis input. Hanjakal, nyangka teu bisa jigana nebak ieu.

Anjeun tiasa menta nu nyangka teu override setting standar na parameter terminal, tapi anjeun lajeng kudu ati pisan nalika nulis Aksara pikeun lingkungan sapertos. Dina kasus emacs, ulah gumantung kana hal kawas echoing na tungtung-of-garis mappings.

The Paréntah éta ditarima alesan braced kana daptar tunggal (nu nyangka varian sarta interaksi) nganggo heuristik pikeun mutuskeun lamun daftar sabenerna hiji argumen atawa loba. heuristik bisa gagal wungkul bisi pas daftar sabenerna teu ngagambarkeun argumen tunggal nu boga sababaraha study \ n Éta kalawan karakter non-whitespace antara aranjeunna. Ieu sigana sahingga pimanaeun, kumaha argumen "-nobrace" bisa dipaké maksa argumen tunggal bisa diatur jadi argumen tunggal. Ieu bisa conceivably dipaké kalawan mesin-generate nyangka kode. Nya kitu -brace Angkatan argumen tunggal bisa nanganan sakumaha sababaraha pola / lampah.

bug

Ieu bener pikabitaeun pikeun ngaranan program "kelamin" (pikeun boh "Smart EXec" atawa "Kirim-nyangka"), tapi rasa alus (atawa sugan ngan Puritanism) prevailed.

Dina sababaraha sistem, nalika cangkang ieu ngaluncurkeun, éta complains ngeunaan moal keur sanggup ngakses TTY tapi ngalir atoh. Ieu ngandung harti sistem Anjeun boga mékanisme pikeun gaining nu TTY ngadalikeun nu nyangka teu nyaho ngeunaan. Mangga manggihan naon éta, sarta ngirim inpo ieu deui kuring.

Ultrix 4.1 (sahenteuna nu versi panganyarna sakitar dieu) ngemutan timeouts tina luhureun 1000000 janten sarua jeung 0.

Digital UNIX 4.0A (jeung versi meureun lianna) refuses allocate ptys lamun nangtukeun hiji Handler SIGCHLD. Tempo kaca grantpt pikeun info leuwih lengkep.

IRIX 6,0 teu nanganan idin pty neuleu ambéh lamun nyangka usaha pikeun allocate a pty saméméhna dipaké ku batur, éta gagal. Ningkatkeun ka IRIX 6.1.

Telnet (diverifikasi ukur sahandapeun SunOS 4.1.2) hangs lamun istilah henteu disetel. Ieu masalah dina Cron, di na di Aksara CGI, nu teu ngartikeun istilah. Ku kituna, biasana Anjeun kudu nyetél éta eksplisit - mun tipe naon anu biasana nyimpang. Ieu ngan boga bisa disetel ka hal! handap meureun suffices pikeun kalolobaan kasus.

set env (istilah) vt100

Tip (diverifikasi ukur sahandapeun BSDI BSD / OS 3.1 i386) hangs lamun cangkang jeung HOME teu disetel. Ieu masalah dina Cron , di na di CGI Aksara nu teu nangtukeun variabel lingkungan ieu. Ku kituna, anjeun kudu nyetel poto eta kuduna - mun tipe naon anu biasana nyimpang. Ieu ngan boga bisa disetel ka hal! handap meureun suffices pikeun kalolobaan kasus.

Nyetél env (cangkang) / bin / sh set env (HOME) / usr / lokal / bin

Sababaraha implementations of ptys nu dirancang supados kernel anu throws jauh sagala kaluaran can dibaca sanggeus 10 ka 15 detik (jumlah sabenerna mangrupa palaksanaan-gumantung) sanggeus prosés geus ditutup teh descriptor file. Kituna nyangka program sapertos

titimangsa spawn sare 20 nyangka

baris gagal. Ulah ieu, nu dipake program non-interaktif jeung exec tinimbang spawn. Bari kaayaan sapertos anu conceivable, dina prakna Kuring geus pernah encountered kaayaan nu kaluaran ahir program sabenerna interaktif bakal leungit alatan kabiasaan ieu.

Di sisi séjén, Cray UNICOS ptys buang jauh sagala kaluaran can dibaca langsung saatos éta prosés geus ditutup teh descriptor file. Kuring geus dilaporkeun ieu Cray jeung nu dipake dina fix a.

Kadangkala reureuh a anu diperlukeun antara hiji ajakan sarta respons, kayaning lamun panganteur TTY geus ngarobah setélan UART atawa cocog baud ongkos ku pilari mimiti / ngeureunkeun bit. Biasana, sadayana ieu merlukeun nyaeta mun bobo pikeun atawa dua detik. A téhnik langkung mantap nya mun Coba deui dugi hardware nyaéta siap nampi input. Conto di handap ieu ngagunakeun duanana strategi:

kirimkeun "speed 9600 \ r"; sare 1 nyangka {seep {ngirim "\ r"; exp_continue} $ ajakan}

bubu -code iyeu moal jalan mun kalayan sagala paréntah nu sits di Tcl urang acara loop, kayaning sare. Masalahna nyaeta di loop acara, Tcl discards nu Konci balik ti pawang acara async. A workaround nyaéta pikeun ngeset bendera di kodeu bubu. Lajeng pariksa bendera geura sanggeus paréntah (ie, saré).

Paréntah expect_background ignores -timeout alesan sarta teu mibanda konsép timeouts sacara umum.

& # 34; nyangka petunjuk & # 34;

Aya sababaraha hal ngeunaan nyangka yén bisa jadi non-intuitif. bagian ieu nyoba nepikeun sababaraha hal ieu kalayan sababaraha saran.

A umum nyangka masalah nyaeta kumaha carana ngakuan prompts cangkang. Kusabab ieu ngaropéa béda ku béda jalma na cangkang béda, portably automating rlogin bisa hésé tanpa nyaho ajakan éta. A konvénsi lumrah nyaeta mun boga pamaké nyimpen ekspresi biasa ngajéntrékeun ajakan maranéhanana (hususna, Nepi ka tungtun taun eta) dina lingkungan variabel EXPECT_PROMPT. Kode kawas handap bisa dipaké. Mun EXPECT_PROMPT teu aya, kode nu masih boga kasempetan hade fungsi neuleu.

Nyetél ajakan "(% | # | \\ $) $"; # standar nyekel ajakan {nangtukeun ajakan $ env (EXPECT_PROMPT)} nyangka -re $ ajakan

Kuring ajak anjeun nulis ngaharepkeun pola nu ngawengku tungtung naon nyangka ningali. Ieu avoids kamungkinan ngawalon pertanyaan sateuacan ningali sakabéh hal. Sajaba ti éta, bari anjeun bisa ogé bisa ngajawab patarosan saméméh ningali éta sagemblengna, lamun ngajawab mimiti, jawaban Anjeun bisa kaciri echoed deui di tengah patarosan. Dina basa sejen, dialog hasilna bakal bener tapi kasampak scrambled.

Paling prompts kaasup karakter spasi dina tungtungna. Contona, dina ajakan ti ftp nyaeta 'f', 't', 'p', '>' na. Pikeun cocog ajakan ieu, anjeun kudu akun keur unggal karakter ieu. Éta kasalahan umum teu kaasup kosong teh. Nunda kosong di eksplisit.

Lamun ngagunakeun pola sahiji formulir X *, anu * bakal cocog sagala kaluaran nampi ti tungtung X kana hal panungtungan narima. Ieu hurung intuitif tapi tiasa rada sabab ngalieurkeun ku frase "Hal panungtungan ditampi" bisa rupa-rupa gumantung kana laju komputer jeung ngolah I / O duanana ku kernel jeung supir alat.

Dina sababaraha hal, manusa condong ningali kaluaran program anjog di sakumpulan badag (atomically) nalika kanyataanana paling program ngahasilkeun output hiji garis dina hiji waktu. Anggap ieu hal, dina * dina pola ngeunaan ayat saméméhna ngan bisa cocog tungtung garis ayeuna sanajan aya sigana deui, sabab dina waktu pertandingan anu sagala output nu kungsi narima.

nyangka boga no way of nyaho yen kaluaran salajengna datang iwal pola Anjeun husus akun pikeun eta.

Malah gumantung garis-berorientasi buffering nyaeta unwise. Henteu ngan ulah program jarang nyieun janji ngeunaan tipeu buffering maranehna ngalakukeun, tapi sistem salah ancur bisa megatkeun garis kaluaran up kitu nu garis megatkeun di tempat hirup kalawan acak. Ku kituna, lamun bisa nganyatakeun sababaraha karakter panungtungan tina ajakan a nalika nulis pola, geus wijaksana pikeun ngalakukeunana.

Mun anjeun ngantosan pola di kaluaran ahir program sarta program emits hal sejenna gantina, anjeun moal bisa ngadeteksi anu ku keyword seep. Alesan teh nya eta nyangka moal seep - gantina éta bakal meunang indikasi eof. Paké eta. Malah leuwih hadé, nganggo duanana. Cara anu lamun garis anu kantos dipindahkeun sabudeureun, anjeun moal kudu ngédit garis sorangan.

Newlines biasana dirobah jadi kenop mulang, urutan linefeed nalika kaluaran ku supir terminal. Ku kituna, upami anjeun hoyong pola nu kuduna loyog jeung dua garis, ti, sebutkeun, printf ( "foo \ nbar"), Anjeun kedah nganggo pola "foo \ r \ nbar".

A panarjamahan Vérsi sarupa lumangsung nalika maca ti pamaké, via expect_user. Dina hal ieu, lamun Anjeun mencet mulang, eta bakal ditarjamahkeun kana newline a. Mun nyangka lajeng pas nu ka program nu susunan terminal -na pikeun mode atah (kawas telnet), aya anu bade janten masalah, saperti program ekspektasi mulang leres. (Sababaraha program anu sabenerna forgiving di yén maranéhna otomatis bakal narjamahkeun newlines mun mulih, tapi paling henteu.) Hanjakal, teu aya deui jalan pikeun manggihan yén program a nempatkeun terminal na kana modeu atah.

Tinimbang sacara manual ngaganti newlines kalawan mulih, leyuran nyaeta ngagunakeun sorana "stty atah", nu bakal eureun tarjamah. Catetan kitu, eta kieu ngandung harti yén anjeun moal deui meunang fitur garis-na rohangan ngédit éta asak.

interaksi implicitly susunan terminal anjeun ka modeu atah jadi masalah ieu moal timbul lajeng.

Ieu sering mangpaat pikeun nyimpen kecap akses (atawa informasi swasta lianna) dina nyangka Aksara. Ieu teu dianjurkeun saprak naon bae anu disimpen dina komputer anu mangrupa susceptible mun keur diakses ku saha. Ku kituna, interactively nyababkeun pikeun kecap akses ti naskah nyaéta gagasan smarter ti embedding aranjeunna sacara harfiah. Mangkaning, sakapeung embedding sapertos anu hijina kamungkinan.

Hanjakal, sistem file UNIX boga cara langsung ti nyieun Aksara nu laksana tapi unreadable. Systems nu ngarojong Aksara cangkang setgid langsung bisa simulate kieu kieu:

Jieun nyangka Aksara (nu ngandung data rusiah) saperti biasa. Jieun idin na jadi 750 (-rwxr-x ---) jeung dipiboga ku grup dipercanten, nyaéta grup mana nu diwenangkeun maca eta. Upami diperlukeun, jieun grup anyar keur kaperluan ieu. Salajengna, nyieun hiji / bin / sh Aksara kalawan idin 2751 (-rwxr-s - x) milik grup sarua salaku sateuacan.

hasilna mangrupakeun Aksara nu bisa jadi dieksekusi (jeung maca) ku saha. Nalika invoked, éta ngalir ka nyangka naskah.

& # 34; Baca ogé & # 34;

Tcl (3), libexpect (3)
"Eksplor nyangka: A Toolkit Tcl-Dumasar pikeun Automating Program Interactive" ku Don Libes, pp 602, ISBN 1-56592-090-2, O'Reilly na associates, 1995..
"nyangka: curing Jalma fits teu bisa kakadalian of Interactivity" ku Don Libes, cara ngagawe of Summer nu 1990 USENIX Konférénsi, Anaheim, California Juni 11-15, 1990.
.I "Nganggo nyangka ngajadikeun otomatis System Administrasi Tugas" ku Don Libes, cara ngagawe tina Systems Konférénsi Administrasi 1990 USENIX Instalasi ageung, Colorado Springs, Colorado, Oktober 17-19, 1990.
.I "Tcl: Hiji Basa Embeddable Komando" ku John Ousterhout, cara ngagawe tina Winter 1990 USENIX Konférénsi, Washington, DC, January 22-26, 1990..I "nyangka: Aksara pikeun Ngadalikeun Program Interactive" ku Don Libes, komputasi Systems , Vol. 4, No 2, University of California Pencét jurnal, November 1991..I "Tés Regression na Conformance Program Interactive Tés", ku Don Libes, cara ngagawe tina Summer 1992 USENIX Konférénsi, pp. 135-144, San Antonio, TX, June 12-15, 1992..I "Kibitz - Nyambungkeun Program Interactive langkung Duaan", ku Don Libes, Pakakas - Praktek & Garapan, John Wiley & Sakulawarga, West Sussex, Inggris, Vol.

23 No. 5, Méi, 1993..I "A Debugger pikeun Tcl Aplikasi", ku Don Libes, cara ngagawe of Tcl / Wagub Mun noong ka 1993, Berkeley, CA Juni 10-11, 1993.

nu ngarang

Don Libes, National Institute of Standards and Technology

ACKNOWLEDGMENTS

Hatur nuhun ka Yohanes Ousterhout pikeun Tcl, sarta témbal Paisley keur inspirasi. Hatur nuhun ka Rob Savoye pikeun nyangka kode autoconfiguration urang.

The file SEJARAH dokumén jauh tina évolusi nyangka. Ayeuna damel bacaan metot sarta bisa masihan anjeun wawasan salajengna jadi software ieu. Hatur nuhun ka jalma disebutkeun dina eta anu dikirim kuring nangtukeun bug na masihan bantuan lianna.

Jurnalisme sarta palaksanaan nyangka ieu mayar kanggo sabagian ku pamaréntah AS sahingga aya dina domain publik. Sanajan kitu panulis sarta NIST hoyong kiridit lamun program ieu sareng dokuméntasi atawa porsi sahijina anu dipaké.