Kòmandman nan Linux / UNIX

Atann se yon pwogram ki pale ak lòt pwogram entèaktif dapre yon script. Apre script la, Espere konnen ki sa yo ka espere nan yon pwogram epi ki sa repons ki kòrèk la ta dwe. Yon lang entèprete bay estrikti kontwòl ak wo nivo pou dirije dyalòg la. Anplis de sa, itilizatè a ka pran kontwòl ak kominike dirèkteman lè ou vle, apre sa retounen kontwòl script la.

Expectk se yon melanj de Espwa ak Tk. Li konpòte jis tankou espwa ak Tk a vle. Atann tou kapab itilize dirèkteman nan C oswa C ++ san Tcl.

Non "espere" la soti nan lide a nan voye / atann sekans vulgarize pa uucp, kermit ak lòt pwogram kontwòl modèm. Sepandan kontrèman ak uucp, espere se jeneralize pou ke li ka kouri kòm yon lòd itilizatè-nivo ak nenpòt pwogram ak travay nan tèt ou. Atann ka pale ak plizyè pwogram nan menm tan an.

Ki sa ki espere ka fè

Pou egzanp, isit la yo se kèk bagay yo mande a ka fè:

Gen yon varyete de rezon ki fè koki an pa ka fè travay sa yo. Tout sa posib ak espwa.

An jeneral, Espwa se itil pou kouri nenpòt pwogram ki mande pou entèraksyon ant pwogram lan ak itilizatè a. Tout sa ki nesesè se ke entèraksyon an ka karakterize pwogramatik. Espwa kapab bay tou kontwòl sou itilizatè a san yo pa sispann pwogram nan ke yo te kontwole. Menm jan an tou, itilizatè a ka retounen kontwòl script la nan nenpòt ki lè.

Itilizasyon

Atann li cmdfile pou yon lis kòmandman pou egzekite. Atann yo ka envoke implicitly sou sistèm ki sipòte # la! Notasyon pa make script la kòm ègzèkutabl ak fè liy lan premye nan script la:

#! / usr / lokal / bin / atann -f

Natirèlman, chemen an dwe byen dekri ki kote Atann lavi. / usr / lokal / bin se jis yon egzanp.

Kouch -c la prefaces yon lòd pou yo egzekite devan nenpòt ki nan script la. Yo ta dwe fè kòmann pou yo anpeche yo kase koki an. Opsyon sa a ka itilize plizyè fwa. Kòmandman miltip yo ka egzekite ak yon sèl -c pa separe yo ak semicolons. Kòmandman yo egzekite nan lòd yo parèt. Lè w ap itilize Expectk, opsyon sa a espesifye kòm -command.

Dra D-a pèmèt kèk pwodiksyon dyagnostik, ki premyèman rapòte aktivite entèn nan kòmandman tankou espere ak kominike. Drapo sa a gen efè a menm jan ak "exp_internal 1" nan kòmansman yon script Expect, plis vèsyon an nan Espwa se enprime.

Drapo a -D pèmèt yon debugje entèaktif. Yon valè nonb antye relatif dwe swiv. Debugger a pral pran kontwòl anvan pwopozisyon an Tcl pwochen si valè a se ki pa zewo oswa si yon ^ C se bourade oswa yon pwen frape, oswa lòt kòmandman debugger ki apwopriye parèt nan script la. Lè w ap itilize Expectk, opsyon sa a espesifye kòm - Debug.

-f drapo a prefas yon dosye ki soti nan ki li kòmandman. Drapo nan tèt li se opsyonèl kòm li se sèlman itil lè w ap itilize # la! notasyon, pou ke lòt agiman yo ka apwovizyone sou liy lan lòd. Lè w ap itilize Expectk, opsyon sa a espesifye kòm -dile.

Pa default, dosye a lòd li nan memwa ak egzekite nan antye li yo. Li se detanzantan dezirab li dosye yon sèl liy nan yon moman. Yo nan lòd yo fòse dosye abitrè yo dwe okipe fason sa a, sèvi ak drapo a -b. Lè w ap itilize Expectk, opsyon sa a espesifye kòm -puffer.

Si fisèl la "-" se apwovizyone kòm yon fichier, opinyon estanda li li olye. Sèvi ak "./-" li soti nan yon dosye aktyèlman yo te rele "-".

-Yon drapo a lakòz Espere pou interactively èd memwa pou kòmandman olye pou li lekti yo nan yon dosye. Pwoteje ap sispann nan lòd Òf la oswa sou EOF. Se -i drapo a sipoze si ni yon dosye lòd ni -c yo itilize. Lè w ap itilize Expectk, opsyon sa a espesifye kòm -interactive.

- yo ka itilize yo limite nan fen opsyon yo. Sa a se itil si ou vle pase yon agiman opsyon ki tankou script ou san li te entèprete pa espere. Sa a ka itilize yo mete nan # la! liy pou anpeche okenn entèpretasyon flaglike pa atann. Pou egzanp, sa ki annapre yo ap kite agiman orijinal yo ki gen ladan non an script nan argv a varyab.

#! / usr / lokal / bin / atann -

Remake byen ke yo dwe obsève abityèl getopt (3) ak egzekite (2) konvansyon lè yo ajoute agiman nan #! liy.

Dosye a $ exp_library / expect.rc souse otomatikman si prezan, sòf si se -N drapo a itilize. (Lè w ap itilize Expectk, opsyon sa a espesifye kòm -NORC.) Touswit apre sa, dosye a ~ / .expect.rc souse otomatikman, sòf si yo itilize yon drapo n. Si varyab DOTDIR varyab la defini, li trete kòm yon anyè epi li .expect.rc li soti nan la. Lè w ap itilize Expectk, opsyon sa a espesifye kòm -norc. Sa a Smart apwovizyone fèt sèlman apre yo fin egzekite nenpòt -k drapo.

-v lakòz Espere pou enprime nimewo vèsyon li yo ak sòti. Drapo ki koresponn lan nan Expectk, ki itilize non drapo long, se -version.

Si ou opsyonèl yo konstwi nan yon lis ak ki estoke nan varyab yo te rele argv ak. argc se inisyalize nan longè a nan argv.

Argv0 se defini yo dwe non an nan script la oswa binè si pa gen okenn script itilize. Pou egzanp, sa ki annapre yo prints soti non an nan script la ak twa premye agiman yo:

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

Kòmand

Espere sèvi ak lang lòd langaj. Tcl bay kontwòl koule (si, pou, kraze), evalyasyon ekspresyon ak plizyè karakteristik lòt tankou definisyon pwosedi rekursionand. Kòmandman yo itilize isit la, men se pa defini (mete, si, ekzekitif) se kòmandman Tcl. Espere sipòte kòmandman anplis. Sòf si yo espesifye, kòmandman yo retounen fisèl la vid.

Kòmandman yo yo ki nan lis alfabè yo pou yo ka byen vit chita. Sepandan, divinò nouvo ka jwenn li pi fasil yo kòmanse lè ou li deskripsyon yo anjandre, voye, atann, ak kominike, nan lòd sa a.

fèmen [-slave] [-onexec 0 | 1] [-i spawn_id]

fèmen koneksyon an nan pwosesis aktyèl la . Pifò pwogram entèaktif pral detekte EOF sou stdin yo ak sòti; konsa fèmen anjeneral ase pou touye pwosesis la kòm byen. Drapo a -i deklare pwosesis pou fèmen korespondan spawn_id yo te rele a.

Tou de atann ak kominike ap detekte lè pwosesis aktyèl la sòti ak enplisitman fè yon fèmen, men si ou touye pwosesis la pa, di, "egzekite touye $ PID", ou bezwen klèman rele fèmen .

Drapo nan -onexec detèmine si idantite a se fèmen nan nenpòt ki nouvo pwosesis anjandre oswa si se pwosesis la kouvri. Pou kite yon ID ouvri louvri, sèvi ak valè a 0. Yon non-zewo nonb antye ki gen valè fòs anjandre a fèmen nan nenpòt pwosesis nouvo.

Drapo a -slave fèmen esklav la ki asosye ak ID la anjandre. Lè koneksyon an fèmen, esklav la otomatikman fèmen menm si li toujou louvri.

Pa gen pwoblèm si wi ou non koneksyon an fèmen implicitly oswa klèman, ou ta dwe rele rete tann yo klè plas la korespondan Kernel. Kòmandman an fèmen pa rele rete tann depi pa gen okenn garanti ke fèmen yon pwosesis koneksyon ap lakòz li sòti.

Debug [[-Non] 0 | 1]

kontwole yon debugger Tcl ki pèmèt ou etap nan deklarasyon yo ak mete repo.

Ki pa gen okenn agiman, yon 1 retounen si debugjeur a pa kouri, otreman yon 0 te retounen.

Avèk yon agiman 1, debugger la te kòmanse. Avèk yon agiman 0, se debri la sispann. Si se yon agiman 1 anvan pa-nèf drapo a, debugger la te kòmanse imedyatman. Sinon, debugger la te kòmanse ak pwochen deklarasyon an Tcl.

Kòmandman debug la pa chanje nenpòt pyèj. Konpare sa a kòmanse espere ak drapo a -D.

Dekonekte lòd la dekonekte yon pwosesis fekèt nan tèminal la . Li kontinye kouri nan background nan. Pwosesis la bay gwoup pwòp pwosesis li yo. Creole I / O se reyorante resous nan / dev / null .

Fragman sa a sèvi ak dekonekte kontinye kouri script la nan background nan.

si {[fouchèt]! = 0} sòti dekonekte. . .

Script sa a li yon modpas ak Lè sa a, kouri yon pwogram chak èdtan ki mande yon modpas chak fwa li kouri. Script la pwovizyon modpas la pou ke ou gen sèlman tape li yon fwa.

voye_user "modpas?" {{{}} {si {{fouchèt}! = 0} {dòmi 3600; kontinye} dekonekte pwive priv_prog atann Modpas: voye "$ expect_out ( 1, fisèl) \ r ". . . Sòti}

Yon avantaj lè l sèvi avèk dekonekte sou koki asynchrone karakteristik nan pwosesis (&) se ke Espwa ka sove paramèt yo tèminal anvan dekoneksyon ak Lè sa a, pita aplike yo nan nouvo ptys. Avèk &, Atann pa gen yon chans li paramèt tèminal la depi tèminal la deja dekonekte pa tan an Espere resevwa kontwòl.

sòti [-a] [estati]

lakòz espere sòti oswa otreman prepare yo fè sa.

Drapo a -onexit lakòz pwochen agiman an pou itilize kòm yon moun kap kite sòti. San yo pa yon agiman, se aktè a sòti aktyèl retounen.

Avètisman an -noexit ki lakòz Espere pou prepare pou sòti men sispann kout nan aktyèlman retounen kontwòl nan sistèm nan fonksyone. Itilizatè-defini handler la sòti se kouri kòm byen ke Expect pwòp pòtè entèn yo. Yo pa ta dwe egzekite kòmandman siplemantè yo. Sa a se itil si w ap kouri Espwa ak lòt Tcl ekstansyon. Entèprèt ki la kounye a (ak fenèt prensipal si nan anviwònman an TK) rete pou lòt ekstansyon Tcl ka netwaye. Si se sòti espwa yo rele ankò (sepandan sa a ta ka rive), pòtè yo pa regrè.

Apre yo fin sòti, tout koneksyon nan pwosesis anjandre yo fèmen. Fèmti yo pral detekte kòm yon EOF pa pwosesis anjandre. Sòti pa pran okenn lòt aksyon pi lwen pase ki nòmal la _exit (2) pwosedi fè. Se konsa, pwosesis anjandre ki pa tcheke pou EOF ka kontinye kouri. (Yon varyete de kondisyon yo enpòtan pou detèmine, pou egzanp, ki sa ki siyal yon pwosesis anjandre yo pral voye, men sa yo se sistèm depandan, tipikman dokimante anba sòti (3).) Pwosè spawned ki kontinye kouri pral eritye pa init.

estati (oswa 0 si li pa espesifye) yo retounen kòm estati a sòti nan espere . Sòti se implicitly egzekite si se fen script la rive.

exp_continue [-kontinye_timer]
Kòmandè a exp_continue pèmèt atann tèt li kontinye egzekite olye ke retounen jan li nòmalman ta. Pa default exp_continue retabli revèy la Timeout. Kreyasyon an -kontinye_timer anpeche revèy pou rekomanse. (Gade pou plis enfòmasyon.)

exp_internal [-f dosye] valè
lakòz kòmandman pi lwen yo voye enfòmasyon dyagnostik entèn yo Espere stderr si valè a ki pa zewo. Pwodiksyon sa a enfim si valè a se 0. Enfòmasyon sou dyagnostik la gen ladan chak karaktè ou te resevwa, ak tout tantativ ki fèt pou matche ak pwodiksyon aktyèl la kont modèl yo.

Si dosye a si ou vle apwovizyone, tout pwodiksyon nòmal ak debogaj ekri nan dosye sa a (kèlkeswa valè valè ). Nenpòt dosye anvan dyagnostik ranpli fèmen.

Flach la-Info lakòz exp_internal retounen yon deskripsyon ki pi resan ki pa jwenn agiman yo bay yo.

Exp_open [args] [-i spawn_id]
retounen yon identifier dosye Tcl ki koresponn ak idantite a orijinal la. Ka idantifyan an dosye Lè sa a, dwe itilize kòm si li te louvri nan lòd TCL louvri . (Idantite idantite a pa ta dwe itilize ankò. Yon rete tann pa ta dwe egzekite.

Drapo a -leaveopen kite idantite id louvri pou aksè nan kòmandman ekspere . Yon rete tann yo dwe egzekite sou idantite id la.

exp_pid [-i spawn_id]
retounen pwosesis id korespondan nan pwosesis la kounye a anjandre. Si se -i drapo a itilize, PID la retounen koresponn ak sa ki nan idantite a bay.

Exp_send
se yon alyas pou voye .

Exp_send_error
se yon alyas pou send_error .

Exp_send_log
se yon alyas pou send_log .

Exp_send_tty
se yon alyas pou voye_tty .

Exp_send_user
se yon alyas pou send_user .

exp_version [[-exit] vèsyon]
se itil pou asire ke script la se konpatib ak vèsyon aktyèl la nan Espwa.

Ki pa gen okenn agiman, se vèsyon aktyèl la nan espwa ki te retounen. Ka vèsyon sa a Lè sa a, dwe kode nan script ou. Si ou aktyèlman konnen ke ou pa ap itilize karakteristik nan vèsyon ki sot pase, ou ka presize yon vèsyon pi bonè.

Vèsyon konpoze de twa nimewo ki separe pa pwen. Premye se nimewo a pi gwo. Scripts ekri pou vèsyon an Espwa ak yon nimewo diferan pi gwo ap prèske sètènman pa travay. Exp_version retounen yon erè si nimewo prensipal yo pa matche.

Dezyèm se nimewo a minè. Scripts ekri pou yon vèsyon ki gen yon nimewo pi gwo minè pase vèsyon aktyèl la ka depann sou kèk karakteristik nouvo ak pa ta ka kouri. exp_version retounen yon erè si nimewo yo pi gwo matche ak, men script nimewo ki pi piti a pi gran pase sa yo ki nan Ekspozisyon an kouri.

Twazyèm se yon nimewo ki jwe pa gen okenn pati nan konparezon vèsyon an. Sepandan, li se enkreman lè se distribisyon lojisyèl an chanje nan nenpòt fason, tankou pa plis dokiman oswa optimize. Li se reset a 0 sou chak nouvo vèsyon minè.

Avèk drapo a -exit , espere ekri yon erè ak sòti si vèsyon an se soti nan dat.

espere [[-opts] pat1 body1] ... [-opts] patn [bodyn]
tann jiskaske youn nan modèl yo alimante pwodiksyon an nan yon pwosesis anjandre, yon peryòd tan espesifye te pase, oswa yon fen-of-dosye yo wè. Si kò final la vid, li ka omisyon.

Modèl ki soti nan ki pi resan expect_before lòd yo implicitly itilize anvan nenpòt modèl lòt. Modèl ki soti nan ki pi resan expected_after lòd yo implicitly itilize apre nenpòt modèl lòt.

Si agiman yo nan deklarasyon an tout antye atann bezwen plis pase yon sèl liy, tout agiman yo ka "braced" nan yon sèl konsa tankou pou fè pou evite tèminal chak liy ak yon backslash. Nan ka sa a, nòmal ranplasman Tcl la ap fèt malgre aparèy òtopedik yo.

Si yon modèl se mo kle a, kò korespondan an egzekite sou fen-of-dosye. Si yon modèl se termine a mo kle, se kò ki koresponn lan egzekite sou timeout. Si pa gen okenn keyword timeout itilize, se yon aksyon null enplisit egzekite sou timeout. De peryòd tanporè default la se 10 segonn, men yo ka mete, pou egzanp a 30, pa lòd "mete 30 tan an". Yon peryòd enfini ka deziyen pa valè a -1. Si yon modèl se default mo kle a, kò korespondan an egzekite sou swa poz oswa fen-of-dosye.

Si yon modèl alimèt, lè sa a se kò ki koresponn lan egzekite. atann retounen rezilta nan kò a (oswa fisèl la vid si pa gen okenn modèl matche). Nan evènman an ki modèl miltip matche ak, se youn nan parèt premye itilize yo chwazi yon kò.

Chak fwa pwodiksyon nouvo rive, li konpare ak chak modèl nan lòd yo yo ki nan lis la. Se konsa, ou ka fè tès pou absans yon match pa fè dènye modèl la yon bagay garanti parèt, tankou yon èd memwa. Nan sitiyasyon kote pa gen okenn èd memwa, ou dwe itilize tan (jis tankou ou ta si ou te interagir manyèlman).

Modèl yo espesifye nan twa fason. Pa default, modèl yo espesifye kòm ak lòd chèn match Tcl a. (Modèl sa yo sanble tou avèk ekspresyon C-koki regilyèman refere yo kòm modèl "glòb"). Ou ka sèvi ak drapo a -gl pou pwoteje modèl ki ta ka otreman matche ak espwa soti nan fè sa. Nenpòt modèl kòmanse ak yon "-" ta dwe pwoteje fason sa a. (Tout strings kòmanse avèk "-" yo rezève pou opsyon nan lavni.)

Pou egzanp, fragman sa a sanble pou yon login siksè. (Remake byen ke abò se prezime yo dwe yon pwosedi defini nan yon lòt kote nan script la.)

atann {okipe {mete okipe \ n; exp_continue} echwe abòde "modpas envalid" abort tanout abort konekte}

Quotes yo nesesè sou katriyèm modèl la depi li gen yon espas, ki ta otreman separe modèl la nan aksyon an. Modèl ak menm aksyon an (tankou 3yèm ak 4yèm) mande pou yo lis aksyon sa yo ankò. Sa ka evite lè l sèvi avèk modèl regexp-style (gade anba a). Plis enfòmasyon sou fòm modèl glob-style ka jwenn nan manyèl la Tcl.

Modèl Regexp-style swiv sentaks ki defini nan Regexp Tcl a (kout pou "ekspresyon regilye"). regexp modèl yo prezante ak drapo -re la . Ka egzanp nan anvan dwe reekri lè l sèvi avèk yon Regexp kòm:

atann {okipe {mete okipe \ n; exp_continue} -re "echwe | modpas invalid" abort tanout abòde konekte}

Tou de kalite modèl yo "unanchored". Sa vle di ke modèl pa gen matche ak kòd la tout antye, men yo ka kòmanse epi fini match la nenpòt kote nan fisèl la (osi lontan ke tout lòt bagay matche ak). Sèvi ak ^ matche ak nan konmansman an nan yon fisèl, ak $ matche ak fen an. Remake byen ke si ou pa rete tann pou fen yon fisèl, repons ou yo ka byen fasil fini nan mitan an nan fisèl la jan yo révointé de pwosesis la anjandre. Pandan ke toujou pwodwi rezilta kòrèk, pwodiksyon an ka gade anòmal. Se konsa, yo sèvi ak $ ankouraje si ou ka egzakteman dekri karaktè yo nan fen yon fisèl.

Remake byen ke nan anpil editè, ^ ak $ matche ak nan konmansman ak nan fen liy respektivman. Sepandan, paske espere se pa liy oryante, karaktè sa yo matche ak nan konmansman an ak nan fen done yo (kòm opoze a liy) kounye a nan espere a tanpon matche. (Epitou, gade nòt ki anba a sou "endijesyon sistèm".)

Flèch la -ex lakòz modèl la dwe matche kòm yon "egzak" fisèl. Pa gen entèpretasyon nan *, ^, elatriye te fè (byenke konvansyon abityèl Tcl yo dwe toujou obsève). Modèl egzak yo toujou unanchored.

Klavye-nocase a lakòz karaktè majuskul nan pwodiksyon an yo konpare tankou si yo te karaktè miniskil. Modèl la pa afekte.

Pandan ke lekti pwodiksyon, plis pase 2000 bytes ka fòse pi bonè bytes yo dwe "bliye". Sa ka chanje ak match_max nan fonksyon. (Remake byen ke valè gwo anpil ka ralanti matcher modèl la.) Si patlist se full_buffer , kò korespondan an egzekite si match_max bytes yo te resevwa e pa gen lòt modèl ki matche. Si ou pa mo a full_buffer itilize, karaktè yo bliye yo ekri nan expect_out (tanpon).

Si patlist se mo kle a nil , ak nil yo pèmèt (via command_nulls la ), se kò ki koresponn lan egzekite si se yon sèl ASCII 0 matche. Li pa posib matche ak 0 bytes atravè modèl oswa regexp modèl.

Lè wap matche yon modèl (oswa eof oswa full_buffer), nenpòt pwodiksyon matche ak deja depase sove nan expect_tabl a varyab (tanpon) . Jiska 9 alimèt regexp substring yo sove nan varyab expect_out yo (1, fisèl) nan expect_out (9, fisèl) . Si se drapo endikasyon yo itilize anvan yon modèl, endis yo kòmanse ak fini (nan yon fòm apwopriye pou lange ) nan 10 strings yo estoke nan varyab expect_out (X, kòmanse) ak expect_out (X, fen) kote X se yon chif, koresponn ak pozisyon an substring nan zòn de defans la. 0 refere a strings ki matche modèl la tout antye epi li se pwodwi pou modèl glob kòm byen ke modèl regexp. Pou egzanp, si gen yon pwosesis ki pwodui pwodiksyon nan "abcdefgh \ n", rezilta a:

atann "CD"

se tankou si deklarasyon sa yo te egzekite:

mete expect_out (0, fisèl) cd mete expect_out (tanpon) abcd

ak "efgh \ n" ki rete nan tanpon pwodiksyon an. Si yon pwosesis pwodwi pwodiksyon "abbbcabkkkka \ n", rezilta a:

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

se tankou si deklarasyon sa yo te egzekite:

mete expect_out (0, kòmanse) 1 set expect_out (0, fen) 10 set expect_out (0, kòd) bbbcabkkkk set expect_out (1, kòmanse) 2 set expect_out (1, fen) 3 set expect_out (1, kòd) bb mete expect_out (2, kòmanse) 10 mete expect_out (2, fen) 10 mete expect_out (2, fisèl) k mete expect_out (tanpon) abbbcabkkkk

ak "yon \ n" ki rete nan tanpon pwodiksyon an. Modèl "*" (ak -re ". *") Pral kole peche pwodiksyon an san lekti okenn pwodiksyon plis nan pwosesis la.

Nòmalman, se pwodiksyon matche a abandone soti nan menas entèn Expect a. Sa a ka anpeche pa prefixing yon modèl ak drapo a -notransfer . Drapo sa a espesyalman itil nan fè eksperyans (epi yo ka abreje nan "-not" pou konvenyans pandan y ap fè eksperyans).

Se idantite a ki koresponn ak pwodiksyon an matche (oswa EOF oswa full_buffer) ki estoke nan expect_out (spawn_id) .

Drapo a -timeout lakòz kounye a atann lòd yo sèvi ak valè sa a kòm yon Timeout olye pou yo sèvi ak valè a nan varyab la timeout.

Pa default, modèl yo matche kont pwodiksyon soti nan pwosesis aktyèl la, sepandan -i drapo a deklare pwodiksyon an nan yo te rele spawn_id lis la matche kont nenpòt modèl sa yo (jiska pwochen an -i ). Lis la spawn_id ta dwe swa yon lis espas separe nan spawn_ids oswa yon varyab refere li a tankou yon lis spawn_ids.

Pou egzanp, egzanp sa a tann pou "konekte" nan pwosesis aktyèl la, oswa "okipe", "echwe" oswa "modpas invalid" nan spawn_id la ki te rele pa $ proc2.

espere {-i $ proc2 okipe {mete okipe \ n; exp_continue} -re "echwe | modpas invalid" abort tanout abòde konekte}

Valè varyab any_spawn_id a ka sèvi pou matche modèl yo nan nenpòt spawn_ids ke yo te rele ak tout lòt -i drapo nan aktyèl la ap atann lòd. Spawn_id la soti nan yon -i drapo ki pa gen okenn modèl ki asosye (sa vle di, swiv imedyatman pa yon lòt -i ) se te fè ki disponib nan nenpòt modèl lòt nan menm atann kòmandan an ki asosye ak any_spawn_id.

Drapo a -i ka nonmen tou yon varyab mondyal nan ka sa a varyab la li pou yon lis èdf anjandre. Varyab la se reli chak fwa li chanje. Sa a bay yon fason pou chanje sous la I / O pandan y ap lòd la se nan ekzekisyon. Èd Spawn bay fason sa a yo rele "endirèk" spawn idantifikasyon.

Aksyon tankou repo ak kontinye estrikti kontwòl kòz (sètadi, pou , proc ) konpòte yo nan fason nòmal la. Kòmandè a exp_continue pèmèt atann tèt li kontinye egzekite olye ke retounen jan li nòmalman ta.

Sa a se itil pou evite pasan eksplisit oswa repete atann deklarasyon. Egzanp sa a se yon pati nan yon fragman otomatize rlogin. Exp_continue a evite gen pou ekri yon dezyèm deklarasyon atann (yo gade pou èd memwa a ankò) si rlogin a envit pou yon modpas.

atann {{modpas: {stty-echo send_user} "modpas (pou $ itilizatè) sou $ lame:" expect_user -re "(. *) \ n" send_user "\ n" voye "$ expect_out (1, fisèl) \ r" stty eko exp_continue} {kèlkonk {voye_user "modpas enfal oswa kont \ n" exit} tanout {send_user "koneksyon ak $ lame kwonometre soti \ n" exit} eof {send_user \ "koneksyon nan lame echwe: $ expect_out (tanpon)" òti} re $ prompt}

Pou egzanp, fragman sa a ta ka ede yon gid itilizatè yon entèraksyon ki deja totalman otomatik ki fonksyone. Nan ka sa a, se tèminal la mete nan mòd anvan tout koreksyon. Si itilizatè a près "+", yon varyab se incremented. Si "p" ap bourade, plizyè retounen yo voye nan pwosesis la, petèt pike li nan yon fason, ak "mwen" pèmèt itilizatè a kominike avèk pwosesis la, efektivman vòlè lwen kontwòl nan script la. Nan chak ka, exp_continue a pèmèt aktyèl la espere kontinye matche modèl apre yo fin egzekite aksyon aktyèl la.

stty kri-echo expect_after {-i $ user_spawn_id "p" {voye "r \ r \ r"; exp_continue} "+" {en fo; exp_continue} "mwen" {interact; Exp_continue} "kite" sòti}

Pa default, exp_continue retabli revèy la Timeout. Revèy la pa rekòmanse, si exp_continue yo rele ak -kontinye_timer drapo a.

expect_after [atann_args]
travay idantikman ak expected_before a eksepte ke si modèl soti nan tou de atann ak expect_after ka matche ak, ap atann modèl la itilize. Gade kòmandan expected_before pou plis enfòmasyon.

expected_background [atann_args]
pran agiman yo menm jan yo atann , sepandan li retounen imedyatman. Modèl yo teste chak fwa nouvo opinyon rive. Peryòd la modèl ak default yo san sans yo atann_background epi yo an silans abandone. Sinon, kòmandan an expect_background sèvi ak expected_forefore and expected_after modèl jis tankou atann fè.

Lè aksyon expect_background yo te evalye, yo te bloke pwosesis background pou menm idantite a . Istorik pwosesis la debloke lè aksyon an fini. Pandan ke se pwosesis background bloke, li posib fè yon (premye plan) atann sou idantite a menm id.

Li pa posib egzekite yon atann pandan y ap yon expect_background se debloke. expect_background pou yon ID spawn an patikilye efase pa deklare yon new expect_background ak idantite a menm id. Deklare expect_background ki pa gen okenn modèl retire idantite a bay soti nan kapasite nan matche ak modèl nan background nan.

expect_forefore [expect_args]
pran agiman yo menm jan yo atann , sepandan li retounen imedyatman. Pè modèl-aksyon ki soti nan expected_forefore ki pi resan an ak idantite a menm id yo ajoute nan nenpòt ki sa yo atann kòmandman. Si yon modèl alimèt, li trete kòm si li te espesifye nan kòmandan an ap atann tèt li, epi yo kò a ki asosye egzekite nan yon kontèks nan ap atann la lòd. Si modèl ki soti nan tou de expect_forefore ak espere ka matche ak, yo atann a prevwa modèl.

Si pa gen okenn modèl espesifye, id la idantite pa tcheke pou nenpòt ki modèl.

Sòf si twonpe pa yon -i drapo, expect_before modèl koresponn ak idantite a idantifye defini nan moman an ki te atann_before lòd la egzekite (pa lè modèl li yo matche).

Flach-enfòmasyon ki lakòz expect_forefore to retounen espesifikasyon aktyèl yo nan sa ki modèl li pral matche ak. Pa default, li rapò sou idantite aktyèl la. Ou ka bay yon spesifikasyon idantifikasyon ou si ou vle pou enfòmasyon sou idantite sa a. Pa egzanp

expected_before-info -i $ proc

Nan pifò yon spawn id spesifikasyon ka bay. Drapo -indirektif la supprime dirèk spawn yo ki vini sèlman nan espesifikasyon endirèk yo.

Olye pou yon spawn id spesifikasyon, drapo a "tout" ap lakòz "-info" fè rapò sou tout òneman anjandre.

Ka pwodiksyon an nan drapo a-Info dwe reyitilize kòm agiman an expected_forefore.

expect_tty [atann_args]
se tankou atann men li li karaktè nan / dev / tty (sa vle di frap nan itilizatè a). Pa default, lekti ki fèt nan mòd kwit. Se konsa, liy dwe fini ak yon retou nan lòd pou atann yo wè yo. Sa a ka chanje via stty (al gade lòd la stty anba a).

expect_user [expect_args]
se tankou atann men li li karaktè soti nan stdin (sa vle di frap soti nan itilizatè a). Pa default, lekti ki fèt nan mòd kwit. Se konsa, liy dwe fini ak yon retou nan lòd pou atann yo wè yo. Sa a ka chanje via stty (al gade lòd la stty anba a).

fouchèt
kreye yon nouvo pwosesis . Pwosesis la nouvo se yon kopi egzak nan pwosesis la Ekspekte aktyèl. Sou siksè, fouchèt retounen 0 a nouvo pwosesis (pitit) epi li retounen ID pwosesis pwosesis timoun nan nan pwosesis paran an . Sou echèk (toujours akòz mank de resous, egzanp, espas swap, memwa), retounen fouchèt -1 nan pwosesis paran an , epi pa gen okenn pwosesis pitit kreye.

Forked pwosesis sòti atravè lòd la sòti , jis tankou pwosesis orijinal la . Pwosè fekri yo gen dwa pou yo ekri dosye log yo. Si ou pa enfim debogaj oswa antre nan pi fò nan pwosesis yo, rezilta a ka konfizyon.

Gen kèk enpozisyon pty ka konfonn pa lektè miltip ak ekriven, menm moman. Se konsa, li se pi bon fouchèt anvan pwosesis chòk.

kominike [string1 body1] ... [stringn [bodyn]]
bay kontwòl sou pwosesis aktyèl la itilizatè a, se konsa ke frap yo voye nan pwosesis aktyèl la , ak stdout la ak stderr nan pwosesis aktyèl la yo te retounen.

Pè kòd-kò yo ka espesifye kòm agiman, nan ka sa a se kò a egzekite lè se kòd la ki koresponn antre. (Pa default, fisèl la pa voye nan pwosesis aktyèl la .) Kòmandman entèprèt la sipoze, si kò final la manke.

Si agiman yo nan deklarasyon an entèaktif tout mande pou plis pase yon sèl liy, tout agiman yo ka "braced" nan yon sèl konsa tankou pou fè pou evite tèminal chak liy ak yon backslash. Nan ka sa a, nòmal ranplasman Tcl la ap fèt malgre aparèy òtopedik yo.

Pou egzanp, lòd sa a kouri kominike avèk pèfòmans sa yo-kòd yo defini: Lè ^ Z ap bourade, se espwa sispann. ( Retabli drapo a retabli mòd yo tèminal.) Lè ^ A ap bourade, itilizatè a wè "ou tape yon kontwòl-A" epi yo voye pwosesis la yon ^ A. Lè $ ap bourade, itilizatè a wè dat la. Lè ^ C ap bourade, espere sòti. Si "foo" se antre, itilizatè a wè "bar". Lè ~~ ap bourade, entèprèt la Ekspòte kouri interactively.

mete CTRLZ \ 032 interact {- retabli $ CTRLZ {egzekite touye -STOP [pid]} \ 001 {send_user "ou tape yon kontwòl-A \ n"; voye "\ 001"} $ {send_user "dat la se [fòma revèy [segonn revèy]]."} \ 003 exit foo {send_user "bar"} ~~}

Nan kòd string-kò, strings yo matche nan lòd yo yo ki nan lis kòm agiman. Chèn ki pasyèlman matche ak yo pa voye nan pwosesis aktyèl la nan yon antisipasyon rès la vini. Si karaktè yo Lè sa a, antre nan sa yo ki ka pa gen okenn ankò petèt gen yon matche ak, se sèlman ap pati nan fisèl la dwe voye nan pwosesis la ki pa ka pètèt kòmanse yon lòt matche ak. Se konsa, strings ki substrings nan alimèt pasyèl ka matche ak pita, si strings orijinal la ki te eseye yo dwe matche ak finalman echwe.

Pa default, matyè fisèl se egzak ki pa gen okenn kat sovaj . (Kontrèman, kòmandan an atann sèvi ak modèl glòb-style pa default.) Ka -Ekò drapo a dwe itilize pwoteje modèl ki ta ka otreman matche ak kominike drapo soti nan fè sa. Nenpòt modèl kòmanse ak yon "-" ta dwe pwoteje fason sa a. (Tout strings kòmanse avèk "-" yo rezève pou opsyon nan lavni.)

Drapo a -re fòs fisèl la yo dwe entèprete kòm yon modèl regexp-style. Nan ka sa a, matche substrings yo estoke nan interact_out la varyab menm jan ak fason a atann magazen pwodiksyon li yo nan expect_out nan varyab. Endikatè-endis la se menm jan sipòte.

Modèl eof a entwodui yon aksyon ki egzekite sou fen-of-dosye. Yon modèl eof ki apa a ka swiv tou drapo a-nan ki ka li matche si yon eof detekte pandan y ap ekri pwodiksyon an. Aksyon eof default la se "retounen", se konsa ke kominike tou senpleman retounen sou nenpòt EOF.

Peryòd la modèl entwodui yon poz (an segonn) ak aksyon ki egzekite apre pa gen okenn karaktè yo te li pou yon tan bay yo. Modèl la lèktur aplike nan pwosesis la ki pi resamman espesifye. Pa gen okenn pozisyon default. Espesifik varyab "Timeout" (itilize pa ekspozisyon an ap atann ) pa gen okenn afekte sou timeout sa a.

Pou egzanp, yo ta kapab deklarasyon sa a dwe itilize autologout itilizatè ki pa tape anyen pou yon èdtan, men ki toujou jwenn mesaj sistèm souvan:

interagir -input $ user_spawn_id tanout 3600 retounen -output \ $ spawn_id

Si modèl la se nil kle a, ak nil yo pèmèt (via command_dull a), se kò ki koresponn lan egzekite si se yon sèl ASCII 0 matche. Li pa posib matche ak 0 bytes atravè modèl oswa regexp modèl.

Prefas yon modèl avèk drapo -writ la lakòz interact_out varyab (spawn_id) yo dwe mete nan spawn_id a ki matche modèl la (oswa eof).

Aksyon tankou repo ak kontinye estrikti kontwòl kòz (sètadi, pou , proc ) konpòte yo nan fason nòmal la. Sepandan retounen ki lakòz kominike pou retounen nan moun kap rele li yo, pandan ke inter_return lakòz kominike pou lakòz yon retou nan moun kap rele li yo. Pou egzanp, si "proc foo" rele kominike ki Lè sa a, egzekite aksyon an inter_return , proc foo ta retounen. (Sa vle di ke si entèaktif apèl entèprèt entèaktif tape retou a ap lakòz kominike a kontinye, pandan y ap inter_return ap lakòz kominike a retounen nan moun ki rele li.)

Pandan entèaktif , se mòd kri itilize pou tout karaktè yo ka pase nan pwosesis aktyèl la . Si pwosesis aktyèl la pa trape siyal kontwòl travay, li pral sispann si voye yon siyal arè (pa default ^ Z). Pou rekòmanse li, voye yon siyal kontinye (tankou pa "touye -KONT"). Si ou reyèlman vle voye yon SIGSTOP nan yon pwosesis konsa (pa ^ Z), konsidere chòk lachas premye ak Lè sa a, kouri pwogram ou an. Nan lòt men an, si ou vle voye yon SIGSTOP atire tèt li, premye rele entèprèt (petèt lè l sèvi avèk yon karaktè chape), ak Lè sa a, peze ^ Z.

Pè kòd-kò yo ka itilize kòm yon steno pou evite gen antre nan entèprèt la ak egzekite kòmandman interactively. Mòd nan tèminal anvan yo itilize pandan y ap kò a nan yon pè-kòd se pè ke yo te egzekite.

Pou vitès, aksyon egzekite nan mòd anvan tout koreksyon pa default. Fèy la-retabli retabli tèminal la nan mòd nan li te gen anvan kominike te egzekite (toujours, kwit mòd). Remake byen ke karaktè yo te rantre lè mòd la te chanje ka pèdi (yon karakteristik malere nan chofè a tèminal sou kèk sistèm). Rezon ki fè la sèlman yo sèvi ak- rezoud se si aksyon ou depann sou kouri nan mòd kwit.

Drapo a- echo voye karaktè ki koresponn ak modèl sa a tounen nan pwosesis la ki te pwodwi yo kòm chak karaktè li. Sa a ka itil lè itilizatè a bezwen wè Feedback soti nan modèl pasyèlman tape.

Si se yon modèl yo te répéta, men evantyèlman echwe matche ak, karaktè yo yo voye nan pwosesis la anjandre. Si pwosesis la anjandre Lè sa a , eko yo, itilizatè a pral wè karaktè yo de fwa. -cho se pwobableman sèlman ki apwopriye nan sitiyasyon kote itilizatè a se fasil pa ranpli modèl la. Pou egzanp, ekstrè sa a se soti nan rftp, script la repetitif-ftp, kote itilizatè a pouse antre nan ~ g, ~ p, oswa ~ l, yo ka resevwa, mete, oswa lis anyè aktyèl la recursively. Sa yo se byen lwen lwen kòmandman yo nòmal ftp, ki itilizatè a se fasil tape ~ ki te swiv pa nenpòt lòt bagay, eksepte erè, nan ka sa a, yo pral pwobableman jis inyore rezilta a de tout fason.

interagir {-echo ~ g {getcurdirectory 1} -echo ~ l {getcurdirectory 0} -echo ~ p {metecurdirectory}}

Drapo a -nobuffer voye karaktè ki koresponn ak modèl ki anba la a sou nan pwosesis pwodiksyon an kòm karaktè yo li.

Sa a se itil lè ou vle kite yon pwogram eko tounen modèl la. Pou egzanp, sa ki annapre yo ka itilize kontwole kote yon moun ap konpoze (yon modèm Hayes-style). Chak fwa "ATD" wè script la mòso rès liy lan.

Pwosesis lognumber {} {interact -nobuffer -re "(. *) \ r" retou mete $ log "[fòma revèy [revèy segonn]]: konpoze $ interact_out (1, string)"} interact -nobuffer "

Pandan entèaktif , itilizasyon anvan nan log_user se inyore. An patikilye, kominike ap fòse pwodiksyon li yo dwe louvri sesyon (voye bay pwodiksyon an estanda) depi li sipoze itilizatè a pa vle kominike je fèmen.

Drapo a -o lakòz nenpòt ki kle kle-kò yo dwe aplike nan pwodiksyon an nan pwosesis aktyèl la . Sa a ka itil, pou egzanp, lè fè fas ak gen tout pouvwa a ki voye karaktè vle pandan yon sesyon telnet.

Pa default, interagir espere itilizatè a yo dwe ekri stdin ak lekti stdout nan pwosesis la Ekspekte tèt li. Drapo a -u (pou "itilizatè") fè kominike gade pou itilizatè a kòm pwosesis la te rele nan agiman li yo (ki dwe yon ID anjandre).

Sa a pèmèt de pwosesis ki asosye yo dwe ansanm ansanm san yo pa itilize yon bouk eksplisit. Pou ede nan debogaj, espere dyagnostik toujou ale nan stderr (oswa stdout pou sèten antre ak debogaj enfòmasyon). Pou menm rezon an, lòd entèprèt la ap li interactively de stdin.

Pou egzanp, fragman sa a kreye yon pwosesis login. Lè sa a, li konpoze itilizatè a (pa montre), epi finalman konekte de la ansanm. Natirèlman, nenpòt pwosesis ka ranplase pou login. Yon koki, pou egzanp, ta pèmèt itilizatè a nan travay san yo pa founi yon kont ak modpas.

spawn login login login $ spawn_id spawn tip modem # rele tounen soti nan itilizatè # konekte itilizatè yo konekte interagir -u $ login

Pou voye pwodiksyon nan pwosesis miltip yo, lis chak idantite lis id prefere pa yon drapo -output . Antre pou yon gwoup pwovens spawn yo ka detèmine pa yon lis idantite idantifikasyon prefere pa yon- enput drapo. (Tou de- enput ak -output ka pran lis nan fòm la menm jan ak -i drapo a nan lòd a atann , eksepte ke any_spawn_id se pa sans nan kominike .) Tout sa yo drapo ak strings (oswa modèl) aplike nan sa a opinyon jiskaske yon lòt - dra D 'parèt. Si pa gen okenn- enput parèt, -output implique "-input $ user_spawn_id -output". (Menm jan an tou, ak modèl ki pa gen- ekri .) Si yon sèl- endike ki espesifye, li overrides $ user_spawn_id. Si yon espesifik dezyèm espesifye, li depase $ spawn_id. Ou kapab espesifye drapo adisyonèl - yo.

Pwosesis de opinyon yo enplisit default yo gen pwodiksyon yo espesifye kòm $ spawn_id ak $ user_spawn_id (nan ranvèse). Si yon drapo -input parèt avèk yon drapo san drapo, karaktè ki soti nan pwosesis sa a yo abandone.

-i drapo a entwodui yon ranplasman pou spawn_id aktyèl la lè pa gen okenn lòt- enput oswa -output drapo yo te itilize. Yon drapo -i implique yon drapo -o.

Li posib pou chanje pwosesis yo ke yo te interagir ak lè l sèvi avèk endepandans spawn endepandan. (Endikatè spawn idantifikasyon yo dekri nan seksyon an sou lòd la atann.) Idantite spawn endirèk ka espesifye ak -i, -u, -input, oswa drapo -output.

entèprèt [ar]
lakòz itilizatè a yo dwe interactively pouse pou Kòmande ak Tcl kòmandman. Se rezilta chak lòd yo enprime.

Aksyon tankou repo ak kontinye estrikti kontwòl kòz (sètadi, pou , proc ) konpòte yo nan fason nòmal la. Sepandan retounen lakòz entèprèt pou retounen nan moun kap rele li yo, pandan y ap entèprèt entèprèt lakòz yon retou nan moun kap rele li yo. Pou egzanp, si "proc foo" yo te rele entèprèt ki Lè sa a, egzekite aksyon an inter_return , proc foo ta retounen. Nenpòt lòt lòd ki lakòz entèprèt kontinye ankouraje pou nouvo kòmandman yo.

Pa default, èd memwa a gen de nonm antye. Integer an premye dekri pwofondè nan pile a evalyasyon (sètadi, konbyen fwa Tcl_Eval te rele). Integer an dezyèm se idantifyan istwa a Tcl. Yo ka mete èd memwa a nan defini yon pwosedi ki rele "prompt1" ki gen valè retounen vin èd rapid la. Si yon deklarasyon ki gen quotes louvri, parens, aparèy òtopedik, oswa parantèz, yon èd memwa segondè (pa default "+>") yo pibliye sou nouvo liy. Yo kapab mete èd memwa segondè a lè yo defini yon pwosedi ki rele "prompt2".

Pandan entèprèt , yo itilize mòd kwit, menm si moun ki rele li yo te itilize mòd kri.

Si stdin ap fèmen, entèprèt la ap retounen sòf si itilize -eof drapo a itilize, nan ka sa a agiman ki vin apre a ap envoke.

log_file [args] [[-a] dosye]
Si yo bay yon fichye, log_file pral anrejistre yon transkripsyon sesyon an (kòmanse nan pwen sa a) nan dosye a. log_file ap sispann anrejistreman si yo pa bay okenn diskisyon. Nenpòt dosye boutèy anvan yo fèmen.

Olye pou yo yon fichier, yo ka bay yon idantifyan dosye Tcl lè l sèvi avèk -open oswa -leaveopen drapo yo. Sa a se menm jan ak lòd la anjandre . (Al gade nan anjandre pou plis enfòmasyon.)

Fèy-yon drapo fòs yo dwe louvri sesyon ki te siprime pa lòd la log_user .

Pa defo, kòmandman an log_file apante nan dosye fin vye granmoun olye ke truncating yo, pou konvenyans nan ke yo te kapab vire logging koupe ak sou plizyè fwa nan yon sèl sesyon. Tronke dosye, sèvi ak drapo a -noappend .

Flach nan- enfòmasyon lakòz log_file pou retounen yon deskripsyon agiman ki pa resan ki pa jwenn yo.

log_user-Info | 0 | 1
Pa default, dyalòg la voye / atann yo louvri sesyon an stdout (ak yon lime si ouvè). Anrejistreman nan stdout se enfim pa lòd "log_user 0" ak reenabled pa "log_user 1". Logging nan dosye a se chanje.

Flach-enfomasyon an lakòz log_user pou retounen yon deskripsyon agiman ki pa resan ki pa jwenn yo.

match_max [-d] [-i spawn_id] [gwosè]
defini gwosè a nan zòn de defans la (nan bytes) te itilize intern pa atann . Ki pa gen okenn agiman gwosè , se gwosè aktyèl la retounen.

Avèk dra a -d , se gwosè a default mete. (Default nan premye se 2000.) Avèk drapo a -i , se gwosè a mete pou idantifye a idantifye id, otreman li se mete pou pwosesis aktyèl la .

overlay [- # spawn_id] [- # spawn_id] [...] pwogram [args]
ègzekutra " args pwogram " nan plas nan pwogram nan Aplikasyon aktyèl, ki mete fen. Yon agiman twonpèt fèy fòs yon twou devan non an kòm si se te yon kokon login. Tout spawn_ids yo fèmen eksepte pou moun yo rele kòm agiman. Sa yo se trase sou idantifyan yo dosye yo te rele.

Spawn_ids yo trase pou yo idantifye dosye pou nouvo pwogram lan pou eritye. Pou egzanp, liy sa a kouri damye ak pèmèt li yo dwe kontwole pa pwosesis aktyèl la - di, yon mèt damye.

overlay -0 $ spawn_id -1 $ spawn_id -2 $ spawn_id echèk

Sa a se pi efikas pase "interagir -u", sepandan, li touye bèt yo kapasite fè entèraksyon pwograme depi pwosesis la Atann se pa nan kontwòl.

Remake byen ke pa gen okenn tèminal kontwole bay. Se konsa, si ou dekonekte oswa remake opinyon estanda, pwogram ki fè kontwòl travay (kokiy, login, elatriye) pa pral fonksyone byen.

parity [-d] [-i spawn_id] [valè]
defini si yo ta dwe evite parite oswa dechire soti nan pwodiksyon an nan pwosesis anjandre. Si valè a se zewo, parite se dezabiye, otreman li pa dezabiye. Ki pa gen okenn agiman valè , se valè aktyèl la te retounen.

Avèk dra a -d , se valè a parite default mete. (Default nan premye se 1, sa vle di, parite se pa dezabiye.) Avèk la -i drapo, se valè a égalité mete pou idantifye a idantifye id, otreman li se mete pou pwosesis aktyèl la .

retire_nulls [-d] [-i spawn_id] [valè]
defini si nulls yo kenbe oswa retire nan pwodiksyon an nan pwosesis anjandre anvan matche modèl oswa estoke nan expect_out a varyab oswa interact_out . Si valè a se 1, nulls yo retire. Si valè a se 0, nulls yo pa retire. Ki pa gen okenn agiman valè , se valè aktyèl la te retounen.

Avèk dra a -d , se valè a default mete. (Defo premye a se 1, sa vle di, nulls yo retire.) Avèk drapo a -i , se valè a mete pou idantifye a idantifye id, otreman li se mete pou pwosesis aktyèl la .

Si ou pa retire nulls, Espere ap anrejistre bytes bytes pou boutèy la ak stdout.

Voye [-flags] fisèl
Voye fisèl nan pwosesis aktyèl la . Pa egzanp, kòmandman an

voye "hello mond \ r"

voye karaktè yo, helloworld nan pwosesis aktyèl la . (Tcl gen ladan yon lòd printf -like (yo rele fòma ) ki ka bati strings konplèks konplèks.)

Karaktè yo voye imedyatman byenke pwogram ki gen liy-puffered opinyon pa pral li karaktè yo jiskaske yon karaktè retounen voye. Yon karaktè retounen te anonse "\ r".

Drapo a fòs agiman nan pwochen yo dwe entèprete kòm yon kòd olye ke yon drapo. Nenpòt kòd ka anvan pa "-" si wi ou non li aktyèlman sanble yon drapo. Sa a bay yon mekanis serye yo presize strings varyab san yo pa trase moute pa moun ki aksidantèlman gade tankou drapo. (Tout strings kòmanse avèk "-" yo rezève pou opsyon nan lavni.)

Drapo a -i deklare ke se fisèl la voye bay spawn_id la yo te rele. Si spawn_id la se user_spawn_id , ak tèminal la se nan mòd anvan tout koreksyon, Newlines nan fisèl la yo tradui retou-ranpli sekans sa yo ke yo parèt tankou si tèminal la te nan mòd kwit. Peye -wotè a degaje tradiksyon sa a.

Drapo nòmal la voye karaktè nil (0 bytes). Pa default, se yon sèl nil. Yon nonb antye relatif kapab swiv- nul pou endike konbyen nulls pou voye.

Drapo a -break jenere yon kondisyon repo. Sa a sèlman fè sans si ID la anjandre refere a yon aparèy tty louvri atravè "anjandre -open". Si ou te anjandre yon pwosesis tankou pwent, ou ta dwe itilize konvansyon pwent la pou génération yon repo.

Fòs drapo yo - fòs yo pral voye "tou dousman", kidonk evite sitiyasyon an komen kote yon outtypes òdinatè yon zòn de defans ki te fèt pou yon moun ki pa janm ta outtype tanpon a menm. Sa a se pwodiksyon kontwole pa valè a nan "send_slow" varyab la ki te pran yon lis eleman de. Premye eleman se yon nonb antye ki dekri kantite bytes pou voye atomik. Eleman nan dezyèm se yon nimewo reyèl ki dekri kantite segonn pa ki voye voye atomik yo dwe separe. Pa egzanp, "mete send_slow {10 .001}" ta fòse "voye -s" pou voye strings avèk 1 milisgond an ant chak 10 karaktè voye.

Fò -h drapo fòs yo dwe voye (yon ti jan) tankou yon imen aktyèlman tape. Imèn tankou reta parèt ant karaktè yo. (Algorithm a baze sou yon distribisyon Weibull, ak chanjman nan kostim aplikasyon sa a an patikilye.) Sa a pwodiksyon se kontwole pa valè a nan "send_human" varyab ki pran yon lis senk eleman. De premye eleman yo se mwayèn entèrarrival tan nan karaktè nan segonn. Premye a se itilize pa default. Dezyèm lan yo itilize nan tèminezon mo, simulation pasyan yo sibtil ki detanzantan rive nan tranzisyon sa yo. Paramètè twazyèm lan se yon mezi variabilité kote .1 se byen varyab, 1 se rezonab varyab, ak 10 se byen invariab. Ekstrèm yo se 0 a Infinity. De dènye paramèt yo, respektivman, yon tan minimòm ak maksimòm interarrival. Yo minimòm ak maksimòm dènye ak "clip" tan final la. Mwayèn nan ultim kapab byen diferan de mwayèn yo bay la si minimòm ak maksimòm clip ase valè yo.

Kòm yon egzanp, lòd sa a emulates yon tipist vit ak ki konsistan:

mete send_human {.1 .3 1 .05 2} voye -h "Mwen grangou. Ann al manje midi."

pandan y ap sa ki annapre yo ka gen plis apwopriye apre yon angove:

mete send_human {.4 .4 .2 .5 100} voye -h "Goodd pati lannwit kout fwèt!"

Remake ke erè yo pa fo, byenke ou ka mete kanpe sitiyasyon koreksyon erè tèt ou pa embedding erè ak koreksyon nan yon agiman voye.

Drapo yo pou voye karaktè nil, pou voye repo, pou fòse pwodiksyon ralanti ak pou pwodiksyon moun-style yo mityèlman eksklizif. Se sèlman youn nan espesifye dènye yo pral itilize. Anplis de sa, pa gen okenn agiman fisèl ka espesifye ak drapo yo pou voye karaktè nil oswa repo.

Li se yon bon lide yo anvan premye voye nan yon pwosesis pa yon atann . atann yo ap tann pou pwosesis la yo kòmanse, pandan y ap voye pa kapab. An patikilye, si voye nan premye konplete anvan pwosesis la kòmanse kouri, ou kouri risk pou yo gen done ou inyore. Nan sitiyasyon kote pwogram entèaktif ofri pa gen okenn èd memwa inisyal la, ou ka vini anvan pa yon reta tankou nan:

# Pou evite bay entru sijesyon sou ki jan yo kraze nan, # sistèm sa a pa fè sa ankouraje pou yon modpas ekstèn. # Rete tann pou 5 segonn pou ekzekisyon pou ranpli telnet spam trè.secure.gov dòmi 5 voye modpas \ r

Exp_send se yon alyas pou voye. Si w ap itilize Expectk oswa kèk lòt Variant nan espwa nan anviwònman an Tk, voye defini Tk pou yon objektif antyèman diferan. Exp_send yo bay pou konpatibilite ant anviwonman. Anpren ki sanble yo bay pou lòt kòmandman voye lòt espwa a.

voye_error [-flags] fisèl
se tankou voye , eksepte ke se pwodiksyon an voye bay stderr olye ke pwosesis aktyèl la .

voye_log [-] fisèl
se tankou voye , eksepte ke se fisèl la sèlman voye nan dosye a boutèy demi lit (al gade log_file .) Agiman yo yo inyore si pa gen okenn dosye boutèy la louvri.

voye flèch [-flags] voye_tty
se tankou voye , eksepte ke se pwodiksyon an voye bay / dev / tty olye ke pwosesis aktyèl la .

voye flach [flags] voye_user
se tankou voye , eksepte ke se pwodiksyon an voye bay stdout olye ke pwosesis aktyèl la .

dòmi segonn
lakòz script la nan dòmi pou nimewo a bay nan segonn. Segonn yo ka yon nimewo desimal. Entèripsyon (ak Tk evènman si w ap itilize Expectk) yo trete pandan y ap Atann dòmi.

pwograme [args] pwogram [args]
kreye yon nouvo pwosesis kouri "pwogram args". Stdin li yo, stdout ak stderr yo konekte nan Espwa, pou yo ka li ak ekri pa lòt kòmandman ekspere. Koneksyon an kase pa fèmen oswa si pwosesis la tèt li fèmen nenpòt nan idantifyan yo dosye.

Lè yon pwosesis te kòmanse pa anjandre , se spawn_id varyab la mete nan yon descriptor refere li a pwosesis sa a . Pwosesis ki dekri pa spawn_id konsidere kòm " pwosesis aktyèl la ". spawn_id ka li oswa ekri, an efè ki bay kontwòl travay.

user_spawn_id se yon varyab mondyal ki gen yon descriptor ki refere a itilizatè a. Pou egzanp, lè spawn_id se mete sa a valè, atann konpòte li tankou expect_user .

Mwen erè_spawn_id se yon varyab mondyal ki gen yon deskriptè ki refere a erè estanda a. Pou egzanp, lè spawn_id se mete nan valè sa a, voye konpòte li tankou send_error .

tty_spawn_id se yon varyab mondyal ki gen yon descriptor ki refere a / dev / tty. Si / dev / tty pa egziste (tankou nan yon cron, nan, oswa script script), Lè sa a, tty_spawn_id pa defini. Sa ka fè tès kòm:

si {{info vars tty_spawn_id]} {# / dev / tty egziste} lòt bagay {# / dev / tty pa egziste # pwobableman nan cron, pakèt, oswa nan script}

echèk retounen idantifikasyon pwosesis UNIX la . Si pa gen okenn pwosesis ki anjandre, 0 se retounen. Se spawn_out varyab la (esklav, non) mete non an nan aparèy la esklav pty.

Pa default, spawn eko non an bay lòd ak agiman. Drapo nan -noecho sispann sòti nan fè sa.

Klavye- console a lakòz pwodiksyon konsole yo dwe reyorante resous nan pwosesis la anjandre. Sa a pa sipòte sou tout sistèm yo.

Entèn, anjandre itilize yon pty, inisyalize menm jan ak tty itilizatè a. Sa a se plis inisyalize pou tout anviwònman yo "lisid" (dapre stty (1)). Si stty_init la varyab defini, li entèprete nan style la nan agiman stty kòm konfigirasyon plis. Pou egzanp, "mete stty_init anvan tout koreksyon" ap lakòz plis tèren endepandan pwosesis yo nan kòmanse nan mòd kri. -Nottycopy sote inisyalizasyon ki baze sou tty itilizatè a. -Nottyinit sote "lisid" inisyalizasyon an.

Nòmalman, anjandre pran ti tan egzekite. Si ou remake anjandre pran yon kantite siyifikatif tan, li se pwobableman rankontre ptys ki kale. Yon nimewo de tès yo kouri sou ptys pou fè pou evite anbakman ak pwosesis devone. (Sa yo pran 10 segonn pou chak katedral pty.) Kouri Atann ak opsyon nan -d pral montre si Ekspozisyon ap rankontre anpil ptys nan eta enpè. Si ou pa ka touye pwosesis yo ki sa yo ptys yo tache, sèl REKOU ou ka rdemare.

Si pwogram lan pa ka anjandre avèk siksè paske ègzekutabl (2) echwe (egzanp lè pwogram pa egziste), yon mesaj erè ap retounen nan pwochen entèaktif oswa atann lòd kòm si pwogram te kouri ak pwodwi mesaj la erè kòm pwodiksyon. Konpòtman sa a se yon konsekans natirèl nan aplikasyon an nan anjandre . Anndan, fouchèt anjandre, apre yo fin ki pwosesis la anjandre pa gen okenn fason yo kominike avèk pwosesis orijinal la Ekspire eksepte pa kominikasyon atravè spawn_id la.

Drapo a -open lakòz agiman nan pwochen yo dwe entèprete kòm yon idantifyan dosye Tcl (sètadi, yo te retounen pa louvri .) Id idantite a ka Lè sa a, dwe itilize kòm si li te yon pwosesis anjandre. (Idantifyan dosye a pa ta dwe itilize ankò.) Sa a pèmèt ou trete aparèy, dosye, ak tuyaux tankou pwosesis anjandre san yo pa itilize yon pty. 0 retounen pou endike pa gen okenn pwosesis asosye. Lè koneksyon an nan pwosesis la anjandre fèmen, se konsa se identifier a dosye Tcl. Drapo a -leaveopen se menm jan ak -open eksepte ke -leaveopen lakòz idantifyan an dosye yo dwe kite ouvè menm apre idantifikasyon an id fèmen.

Drapo a ki vid lakòz yon pèt pou ouvri men pa gen okenn pwosesis anjandre. 0 retounen pou endike pa gen okenn pwosesis asosye. Spawn_id se mete kòm dabitid.

Se varyab spawn_out a (esklav, fd) mete nan yon idantifyan dosye ki koresponn ak esklav la pty. Li ka fèmen lè l sèvi avèk "fèmen-kraze".

Drapo a -ignore non yon siyal yo dwe inyore nan pwosesis la anjandre. Sinon, siyal yo jwenn konpòtman an default. Siyal yo rele kòm nan lòd la pèlen , eksepte si chak siyal mande pou yon drapo separe.

trase nivo
lakòz swiv deklarasyon yo dwe enprime anvan yo te egzekite. (Trak tras lòd tras varyab yo.) Nivo endike ki jan lwen desann nan pile nan rele trase. Pou egzanp, lòd sa a kouri Atann pandan y ap trase premye 4 nivo yo nan apèl, men pa pi ba pase sa.

atann -c "strace 4" script.exp

Flach nan- enfòmasyon ki lakòz strace retounen yon deskripsyon ki pi resan ki pa jwenn agiman yo bay yo.

sty args
chanjman mòd tèminal menm jan ak lòd la stty ekstèn.

Pa default, yo kontwole tèminal la kontwole. Lòt tèminal yo ka jwenn aksè nan ajoute "Demann pou estati retounen li kòm rezilta nan lòd la. Si yo mande pou okenn estati epi yo kontwole tèminal la kontwole, estati anvan an nan atribi yo anvan tout koreksyon ak eko yo tounen nan yon fòm ki ka pita itilize pa lòd la.

Pou egzanp, agiman yo anvan tout koreksyon oswa kuit mete tèminal la nan mòd kri. Agiman yo -wou oswa kwit mete tèminal la nan mòd kwit. Agiman yo eko ak- echo mete tèminal la nan eko ak mòd noecho respektivman.

Egzanp sa a montre ki jan pou yon ti tan enfim eko. Sa a ka itilize nan Scripts otreman-otomatik pou fè pou evite modpas embedding nan yo. (Gade plis diskisyon sou sa anba Ekspè HINTS anba a.)

stty-echo send_user "Modpas:" expect_user -re "(. *) \ n" mete modpas $ expect_out (1, fisèl)

sistèm arch
bay args (1) kòm opinyon, menm jan si li te tape kòm yon lòd ki soti nan yon tèminal. Espwa tann jiskaske koki a fini. Se estati retounen nan ch la okipe menm jan an ki egzekite kenbe estati retounen li yo.

Kontrèman ak ekzekisyon ki redireksyon stdin ak stdout nan script la, sistèm fè pa gen okenn Reoryantasyon (lòt pase sa ki endike nan fisèl la tèt li). Se konsa, li posib pou itilize pwogram ki dwe pale dirèkteman nan / dev / tty. Pou rezon nan menm, rezilta yo nan sistèm yo pa anrejistre nan boutèy la.

timestamp [args]
retounen yon timestamp. Ki pa gen okenn agiman, ki kantite segonn depi epòk la se retounen.

Drafè-fòma a entwodui yon kòd ki retounen men avèk sibstitisyon ki fèt dapre règleman POSIX yo pou strftime. Pou egzanp% a se ranplase pa yon non semenn abreje (sa vle di, Sat). Gen lòt ki:

yon non chak jou abreje Yon non semenn konplè b bèk non mwa B Non mwa non c c dat dat lè: Wed Oct 6 11:45:56 1993% d jou nan mwa a (01-31% H èdtan (00-23)% m mwen (01-12)% M jou (001-366)% m mwa (01-12) M minit (00-59)% p am oswa pm S dezyèm (00-61) u jou (1-7, Lendi se premye jou nan semèn) U semèn (00-53, premye Dimanch se premye jou nan semèn yon sèl) V semèn (01-53, ISO 8601 style)% W jou (0- 6)% W semèn (00-53, premye lendi se premye jou nan semèn yon sèl) x dat x tan nan: Wed Oct 6 1993 X tan tankou nan: 23:59:59% y ane (00-99) Y ane tankou nan: 1993 Z tanzone (oswa pa gen anyen si se pa detèmineabl) %% yon fè siy pousan

Lòt espesifikasyon yo endefini. Lòt karaktè yo pral pase nan intact. Se sèlman lokalite C a sipòte.

Sèk la-sekans entwodui yon kantite segonn depi epòk la yo dwe itilize kòm yon sous ki soti nan ki nan fòma. Sinon, yo itilize tan aktyèl la.

Drapo yo -gmt fòs pwodiksyon timestamp yo sèvi ak tan an GMT . Ki pa gen okenn drapo, se tanzone lokal la itilize.

pèl [siyal]
lakòz lòd yo bay yo dwe egzekite sou resi nan lavni nan nenpòt nan siyal yo bay yo. Se lòd la egzekite nan dimansyon mondyal la. Si kòmandman an absan, se aksyon siyal la retounen. Si lòd se SIG_IGN a fisèl, siyal yo yo inyore. Si lòd se SIG_DFL la fisèl, siyal yo yo rezilta nan default la sistèm. siyal se swa yon siyal sèl oswa yon lis siyal. Siyal yo ka espesifye nimerik oswa senbolik kòm chak siyal (3). Prefiks "SIG" la ka disparèt.

Ki pa gen okenn agiman (oswa agiman-nimewo a), pèlen retounen nimewo a siyal nan lòd la pèlen kounye a yo te egzekite.

Drapo a -Kode sèvi ak kòd la retounen nan lòd la nan plas nan tou sa Kòd Tcl te sou yo retounen lè kòmandman an te kòmanse orijinal kouri.

Fèy -interp la lakòz lòd pou yo evalye lè l sèvi avèk entèprèt la aktif nan moman an kòmand lan te kòmanse kouri olye ke lè yo te deklare pyèj la.

Drapo a -name lakòz lòd la pèlen yo retounen non an siyal nan lòd la pèlen kounye a yo te egzekite.

Flag nan -max ki lakòz lòd la pèlen yo retounen nimewo a siyal pi gwo ke yo ka mete.

Pa egzanp, lòd "pèlen {send_user" Ouch! "} SIGINT" ap enprime "Ouch!" chak fwa itilizatè a près ^ C.

Pa default, SIGINT (ki ka anjeneral dwe pwodwi pa peze ^ C) ak SIGTERM lakòz Espere pou sòti. Sa a se akòz pèlen sa a, ki te kreye pa default lè Espwa kòmanse.

pèlen sòti {SIGINT SIGTERM}

Si ou itilize -D drapo a kòmanse debugjeur a, SIGINT se rdefini yo kòmanse debugje a entèaktif. Sa a se akòz pèlen sa a:

pèlen {exp_debug 1} SIGINT

Pèlen debugger la ka chanje pa mete anviwònman EXPECT_DEBUG_INIT varyab anviwònman an nan yon nouvo pèlen lòd.

Ou ka, nan kou, pase sou de tou de nan sa yo jis pa ajoute kòmandman pyèj nan script ou. An patikilye, si ou gen pwòp ou "sòti pèlen sigint", sa a ap pase sou desizyon pèlen an debugjeur. Sa a se itil si ou vle anpeche itilizatè yo soti nan ap resevwa nan debugger la nan tout.

Si ou vle defini pyèj pwòp ou a sou SIGINT men yo toujou pèlen debugger la lè li ap kouri, sèvi ak:

si {! [exp_debug]} {pèlen mystuff SIGINT}

Altènativman, ou ka pèlen debugger la lè l sèvi avèk kèk lòt siyal.

pèlen an pa pral kite ou pase sou desizyon aksyon an pou SIGALRM jan sa a se itilize intern nan espere . Dekonekte a bay lòd SIGALRM SIG_IGN (inyore). Ou ka reenabl sa a osi lontan ke ou enfim li pandan kòmandman spawn ki vin apre yo.

Gade siyal (3) pou plis enfòmasyon.

rete tann [args]
reta jiskaske yon pwosesis anjandre (oswa pwosesis aktyèl la si okenn non yo rele) mete fen.

rete tann nòmalman retounen yon lis kat antye antye. Integer nan premye se PID nan pwosesis la ki te tann sou. Integer an dezyèm se idantite korespondan id la. Integer a twazyèm se -1 si yon erè sistèm opere te rive, oswa 0 otreman. Si nonb antye twazyèm lan te 0, nonb antye katriyèm lan se estati a ki te retounen nan pwosesis la anjandre. Si nonb antye ki rele twazyèm lan se -1, nonb antye katriyèm lan se valè a nan errno mete nan sistèm nan fonksyone. Echèk varyab mondyal la se tou mete.

Lòt eleman yo ka parèt nan fen valè retounen nan rete tann . Yon eleman senkyèm si ou vle idantifye yon klas enfòmasyon. Kounye a, se sèlman valè posib pou eleman sa a se CHILDKILLED nan ka sa a pwochen de valè yo se non an siyal C-style ak yon deskripsyon kout tèks.

-Yon drapo a - yo deklare pwosesis la pou yo rete tann ki koresponn ak spawn_id yo te rele (PA id id). Anndan yon Handler SIGCHLD, li posib pou rete tann pou nenpòt ki pwosesis anjandre lè l sèvi avèk id la id -1.

Drapo -nowait la lakòz reta a retounen imedyatman avèk endikasyon yon siksè tann. Lè pwosesis la sòti (pita), li pral otomatikman disparèt san yo pa bezwen pou yon rete tann eksplisit.

Kòmann sou dat la rete tann tou pou itilize tann pou yon pwosesis fouye lè l sèvi avèk agiman "-i -1". Kontrèman ak itilizasyon li yo ak pwosesis anjandre, ka kòmandman sa a dwe egzekite nan nenpòt ki lè. Pa gen okenn kontwòl sou ki pwosesis ki te rasin. Sepandan, valè retou a ka tcheke pou pwosesis id la.

Libreri

Atann otomatikman konnen sou de bati-an bibliyotèk pou Swen Scripts. Yo defini repèrtwar sa yo nan varyab exp_library ak exp_exec_library. Tou de yo vle di ke yo gen dosye sèvis piblik ki ka itilize pa lòt Scripts.

exp_library gen dosye achitekti-endepandan. Exp_exec_library gen dosye achitekti-depandan. Tou depan de sistèm ou an, tou de repèrtwar ka totalman vid. Egzistans la nan dosye $ exp_exec_library / chat-tanpon yo dekri si ou / bin / chat tanpon pa default.

PREMYE-PRINTING

Yon definisyon vgrind ki disponib pou bèl-enprime Scripts Sans. Si ou sipoze definisyon an vgrind apwovizyone ak distribisyon an Ekspektif kòrèkteman enstale, ou ka itilize li kòm:

vgrind -lexpect dosye

EGZANP

Li anpil pa aparan ki jan yo mete tout bagay ansanm ke paj la nonm dekri. Mwen ankouraje w pou w li epi eseye egzanp yo nan egzanp anyèl distribisyon an. Kèk nan yo se pwogram reyèl. Lòt moun yo se tou senpleman ilistrasyon nan sèten teknik, ak nan kou, yon koup yo se jis rapid antay. Fichye INSTALL la gen yon BECA rapid nan pwogram sa yo.

Papye yo espere (al gade tou) yo itil tou. Pandan ke gen kèk papye itilize sentaks ki koresponn ak vèsyon pi bonè nan espere, rasyonèl ki mache avèk yo toujou valab epi ale nan yon anpil plis detay pase paj sa a nonm.

Kavite

Ekstansyon ka fè kolizyon avèk non kòmand espwa an. Pou egzanp, voye defini pa Tk pou yon objektif antyèman diferan. Pou rezon sa a, pi fò nan kòmandman yo espere yo disponib tou kòm "exp_XXXX". Kòmand ak varyab kòmanse avèk "exp", "inter", "spawn", ak "timeout" pa gen aliases. Sèvi ak non yo kòmande pwolonje si ou bezwen sa a konpatibilite ant anviwonman.

Atann pran yon gade olye liberal nan skoping. An patikilye, varyab li yo pa lòd espesifik nan pwogram nan Aplikasyon yo pral chache premye soti nan sijè ki abòde lokal la, epi si yo pa jwenn, nan sijè ki abòde lan mondyal. Pou egzanp, sa a oblije bezwen an mete "timeout mondyal" nan chak pwosedi ou ekri ki sèvi ak atann . Nan lòt men an, varyab ekri yo toujou nan dimansyon lokal la (sòf si yo te bay yon lòd "mondyal"). Pwoblèm ki pi komen sa a lakòz se lè anjandre se egzekite nan yon pwosedi. Deyò pwosedi a, spawn_id pa egziste ankò, se konsa pwosesis la anjandre pa aksesib tou senpleman paske nan skoping. Ajoute yon "spawn_id mondyal" a tankou yon pwosedi.

Si ou pa ka pèmèt kapasite multispawning (sa vle di, sistèm ou a sipòte ni chwazi (BSD *. *), Biwo vòt (SVR> 2), ni yon bagay ekivalan), Espwa ap sèlman kapab kontwole yon pwosesis sèl nan yon moman. Nan ka sa a, pa eseye mete spawn_id , ni ou ta dwe egzekite pwosesis atravè ègzekutabl pandan yon pwosesis anjandre ap kouri. Anplis de sa, ou pa yo pral kapab atann soti nan pwosesis miltip (ki gen ladan itilizatè a kòm youn) nan menm tan an.

Tèminal paramèt ka gen yon gwo efè sou Scripts. Pa egzanp, si yon script ekri pou gade pou eko, li pral mal konpòte li si repete se etenn. Pou rezon sa a, Sèvi ak fòs fòs yo sekrè tèminal par default. Malerezman, sa ka fè bagay sa yo dezagreyab pou lòt pwogram yo. Kòm yon egzanp, koki a emacs vle chanje "abityèl" mappings yo: Newlines jwenn trase nan Newlines olye pou yo retounen kous-retou, ak eko se enfim. Sa a pèmèt yon sèl itilize emacs pou edite liy D '. Malerezman, Atann pa ka petèt devine sa.

Ou ka mande pou espere ke pa pase sou defo anviwònman default li yo nan paramèt tèminal, men ou dwe Lè sa a, dwe pran anpil prekosyon lè w ap ekri Scripts pou anviwonman sa yo. Nan ka a nan emacs, evite depann sou bagay sa yo tankou eko ak fen-of-liy mappings.

Kòmandman yo ki aksepte agiman braced nan yon lis sèl (varyant yo atann ak kominike ) sèvi ak yon heurist deside si lis la se aktyèlman yon sèl agiman oswa anpil. Heurist la ka echwe sèlman nan ka a lè lis la aktyèlman reprezante yon sèl agiman ki te gen plizyè entegre \ n nan ak karaktè ki pa-whitespace ant yo. Sa a sanble ase pwobab, sepandan ka agiman an "nòb" ka itilize yo fòse yon agiman sèl yo dwe okipe kòm yon agiman sèl. Sa a te kapab limajinab dwe itilize ak machin-pwodwi Kòd ekspire. Menm jan an tou, -brak fòs yon agiman sèl yo dwe okipe kòm modèl miltip / aksyon.

BUGS

Li te reyèlman tante nan non pwogram "sèks" (pou swa "Smart Exec" oswa "Send-Ekspekte"), men bon sans (oswa petèt jis puritanism) te pi fò.

Sou kèk sistèm, lè yon kokle anjandre, li plenyen sou pa ke yo te kapab jwenn aksè nan tty a, men kouri de tout fason. Sa vle di sistèm ou a gen yon mekanis pou pran tty kontwole ki espere pa konnen sou. Tanpri chèche konnen ki sa li ye, epi voye enfòmasyon sa a tounen vin jwenn mwen.

Ultrix 4.1 (omwen dènye vèsyon yo alantou isit la) konsidere tanouts ki anwo a 1000000 yo dwe ekivalan a 0.

Digital UNIX 4.0A (ak pwobableman lòt vèsyon) refize asiyen ptys si ou defini yon Handler SIGCHLD. Wè paj dakèy pou plis enfòmasyon.

IRIX 6.0 pa okipe autorisations pty kòrèkteman pou ke si Espere eseye asiyen yon pty deja itilize pa yon lòt moun, li echwe. Mete ajou nan IRIX 6.1.

Telnet (verifye sèlman anba SunOS 4.1.2) pann si TERM pa mete. Sa a se yon pwoblèm anba cron, nan ak nan Cgi Scripts, ki pa defini TERM. Se konsa, ou dwe mete l 'klèman - nan ki kalite ki anjeneral petinan. Li jis gen yo dwe mete nan yon bagay! Sa ki anba la a pwobableman sifizan pou pifò ka yo.

mete env (TERM) vt100

Ide (verifye sèlman anba BSDI BSD / OS 3.1 i386) pandye si SHELL ak HOME yo pa mete. Sa a se yon pwoblèm anba cron , nan ak nan Scripts Cgi , ki pa defini varyab anviwònman sa yo. Se konsa, ou dwe mete yo klèman - nan ki kalite ki anjeneral ki petinan. Li jis gen yo dwe mete nan yon bagay! Sa ki anba la a pwobableman sifizan pou pifò ka yo.

mete env (SHELL) / bin / SH mete env (HOME) / usr / lokal / bin

Gen kèk enplemantasyon nan ptys yo fèt pou ke Kernel a lanse lwen nenpòt pwodiksyon san l 'apre 10 a 15 segonn (nimewo reyèl se aplikasyon-depann) apre yo fin pwosesis la fèmen dosye descriptor la. Se konsa, espere pwogram tankou

spawn dat dòmi 20 atann

ap fail. Pou evite sa a, envoke pwogram ki pa entèaktif ak ekzekite olye ke anjandre . Pandan ke sitiyasyon sa yo se limajinè, nan pratik mwen pa janm rankontre yon sitiyasyon kote pwodiksyon final la nan yon pwogram vrèman entèaktif ta pèdi akòz konpòtman sa a.

Nan lòt men an, Cray UNICOS ptys jete nenpòt pwodiksyon san touswit apre yo fin pwosesis la fèmen dosye descriptor la. Mwen te rapòte sa a Cray ak yo ap travay sou yon ranje.

Pafwa se yon reta ki nesesè ant yon èd memwa ak yon repons, tankou lè yon koòdone tty ap chanje anviwònman UART oswa pousantaj baud matche pa kap chèche kòmanse / sispann Bits. Anjeneral, tout bagay sa yo mande pou se dòmi pou yon dezyèm oswa de. Yon teknik ki pi gaya se retabli jiskaske pyès ki nan konpitè a pare yo resevwa opinyon. Egzanp sa a sèvi ak tou de estrateji:

voye "vitès 9600 \"; dòmi 1 atann {timeout {voye "r"; Exp_continue} $ rapid =

pèl kòd-pa pral travay avèk nenpòt lòd ki chita nan riban evènman Tcl a, tankou dòmi. Pwoblèm lan se ke nan riban an evènman, Tcl discards kòd yo retounen soti nan async evènman pòtè. Yon solisyon se yo mete yon drapo nan kòd la pèlen. Lè sa a, tcheke drapo a imedyatman apre yo fin bay lòd la (sètadi, dòmi).

Kòmandan expecttbackbackground a inyore agout tan an e li pa gen okenn konsèp nan Timeouts an jeneral.

& # 34; EXPECT HINTS & # 34;

Gen yon koup de bagay sa yo sou Espere ke yo ka ki pa entwisyon. Seksyon sa a eseye adrese kèk nan bagay sa yo ak yon koup nan sijesyon.

Yon pwoblèm ekspè komen se ki jan yo rekonèt koupon pou envit. Depi sa yo yo Customized yon fason diferan pa diferan moun ak kokiy diferan, pòtab otomatize rlogin ka difisil san yo pa konnen èd memwa a. Yon konvansyon rezonab se pou itilizatè yo magazen yon ekspresyon regilye ki dekri èd memwa yo (an patikilye, nan fen li) nan anviwònman EXPECT_PROMPT varyab la. Ka Kòd tankou sa ki annapre yo ka itilize. Si EXPECT_PROMPT pa egziste, kòd la toujou gen yon bon chans pou fonksyone kòrèkteman.

mete èd memwa "(% | | \\ $) $"; # default prompt catch {mete rapid $ env (EXPECT_PROMPT)} atann -re $ èd memwa

Mwen ankouraje w ekri ekspozisyon modèl ki gen ladan tou sa ou espere wè. Sa a evite posibilite pou reponn yon kesyon anvan yo wè tout bagay la. Anplis de sa, pandan ou ka byen kapab reponn kesyon anvan ou wè yo nèt, si ou reponn byen bonè, repons ou ka parèt eko tounen nan mitan an nan kesyon an. Nan lòt mo, dyalòg la ki kapab lakòz yo pral kòrèk men gade grenpe moute.

Pifò envit enkli yon karaktè espas nan fen an. Pou egzanp, èd memwa nan ftp se 'f', 't', 'p', '>' ak. Pou koresponn ak èd sa a, ou dwe kont pou chak nan karaktè sa yo. Li se yon erè komen pou pa mete vid la. Mete vid la nan eksplisitman.

Si ou itilize yon modèl fòm X * la, * la ap matche ak tout pwodiksyon yo te resevwa nan fen X rive nan dènye bagay yo te resevwa. Sa a son entwisyon, men yo ka yon ti jan konfizyon paske fraz "dènye bagay yo resevwa" ka varye depann sou vitès la nan òdinatè a ak pwosesis la nan I / O tou de pa Kernel la ak chofè a aparèy.

An patikilye, moun yo gen tandans wè pwodiksyon pwogram rive nan fragman gwo (atomik) lè an reyalite pi pwogram pwodwi pwodiksyon yon liy nan yon moman. Ann sipoze sa a se ka a, * nan modèl la nan paragraf anvan an ka sèlman matche ak nan fen liy aktyèl la menm si gen sanble gen plis, paske nan moman an nan match la ki te tout pwodiksyon an ki te resevwa yo.

atann pa gen okenn fason pou konnen ke plis pwodiksyon ap vini sof si modèl ou an espesyalman kont pou li.

Menm depann sou tan-oryante tampon se saj. Se pa sèlman fè pwogram raman fè pwomès sou kalite tampon yo fè, men endijesyon sistèm ka kraze liy pwodiksyon leve pou liy kraze nan kote w pèdi o aza. Se konsa, si ou ka eksprime dènye karaktè yo kèk nan yon èd memwa lè modèl ekri, li gen bon konprann yo fè sa.

Si w ap tann yon modèl nan pwodiksyon dènye yon pwogram ak pwogram lan emèt yon lòt bagay olye, ou pa yo pral kapab detekte sa ak mo kle a timeout . Rezon ki fè la se ke atann pa pral poz - olye li pral jwenn yon endikasyon eof . Sèvi ak sa olye. Menm pi byen, sèvi ak tou de. Nan fason sa a si liy sa a tout tan deplase alantou, ou pa pral gen edite liy lan tèt li.

Newlines yo anjeneral konvèti nan retounen cha, sekans linefeed lè pwodiksyon pa chofè a tèminal. Se konsa, si ou vle yon modèl ki klèman alimèt de liy yo, ki soti nan, di, printf ("foo \ nbar"), ou ta dwe itilize modèl la "foo".

Yon tradiksyon ki sanble rive lè lekti nan itilizatè a, via expect_user . Nan ka sa a, lè ou peze retounen, li pral tradui nan yon nouvo liy. Si Espere Lè sa a, pase ki nan yon pwogram ki kouche tèminal li yo nan mòd kri (tankou telnet), pral gen yon pwoblèm, menm jan pwogram nan espere yon retou vre. (Gen kèk pwogram yo aktyèlman padonnen nan yo ke yo pral otomatikman tradui Newlines retounen, men pifò pa fè sa.) Malerezman, pa gen okenn fason yo chèche konnen ke yon pwogram mete tèminal li yo nan mòd kri.

Olye ke manyèlman ranplase Newlines ak retounen, solisyon an se yo sèvi ak lòd la "stty anvan tout koreksyon", ki pral sispann tradiksyon an. Remake byen, sepandan, ke sa vle di ke ou pa pral jwenn karakteristik yo ki kwit liy-koreksyon.

interactuezman implicitly kouche tèminal ou a mòd anvan tout koreksyon pou pwoblèm sa a pa pral leve lè sa a.

Li se souvan itil nan magazen modpas (oswa lòt enfòmasyon prive) nan espwa Scripts. Sa a pa rekòmande depi anyen ki estoke sou yon òdinatè se siseptib ke yo te jwenn aksè pa nenpòt ki moun. Se konsa, interactively pouse pou modpas ki sòti nan yon script se yon lide pi entelijan pase embedding yo literalman. Sepandan, pafwa tankou embedding se posiblite a sèlman.

Malerezman, UNIX dosye sistèm lan pa gen okenn fason dirèk nan kreye Scripts ki fè ègzèkutabl men ilizibl. Sistèm ki sipòte Scripts koki setgid ka endirèkteman simulation sa a jan sa a:

Kreye script la espwa (ki gen done yo sekrè) kòm dabitid. Fè otorizasyon li yo dwe 750 (-rwxr-x ---) ak posede pa yon gwoup ou fè konfyans, sa vle di, yon gwoup ki gen dwa li li. Si sa nesesè, kreye yon nouvo gwoup pou objektif sa a. Apre sa, kreye yon script / bin / sh ki gen pèmisyon 2751 (-rwxr -s - x) posede pa gwoup la menm jan anvan.

Rezilta a se yon script ki ka egzekite (ak li) pa nenpòt moun. Lè envoke, li kouri script la espwa.

& # 34; SEE ALSO & # 34;

Tcl (3), libexpect (3)
"Eksplorasyon Espere: Yon Tk ki baze sou kalkil pou Pwogram Otomatik entèaktif" pa Don Libes, pp. 602, ISBN 1-56592-090-2, O'Reilly ak Associates, 1995.
"espere: geri moun ki san kontwòl kontwole nan entèaktivite" pa Don Libes, pwosedi nan konferans lan USENIX 1990, Anaheim, Kalifòni, 11-15 jen 1990.
.Mwen "Sèvi ak espere pou Automate Administrasyon Administrasyon Sistèm" pa Don Libes, Pwosè nan 1990 USENIX Gwo Enstalasyon Sistèm Administrasyon Konferans, Colorado Springs, Colorado, Oktòb 17-19, 1990.
.Mwen "espere: Scripts pou kontwole entèaktif pwogram yo" pa Don Libes, Sistèm Computing yo .Mwen "espere: Scripts pou kontwole entèaktif pwogram" pa Don Libes, Sistèm Computing , Vol. 4, No 2, Inivèsite Kalifòni Press Jounal, Novanm 1991 .. "Tès Regression ak Konfòmans Tès Pwogram Entèaktif", pa Don Libes, Pwosè Ete 1992 USENIX Konferans, pp. 135-144, San Antonio, TX, Jen 12-15, 1992 .. Mwen "Kibitz - Koneksyon Pwogram Entèaktif Miltip Ansanm", pa Don Libes, Software - Pratike & Eksperyans, John Wiley & Sons, West Sussex, Angletè, Vol.

23, No 5, Me, 1993 .. Mwen "Yon Debugger pou aplikasyon pou Tcl", pa Don Libes, Pwosè nan 1993 Tcl / Tk Atelye a, Berkeley, CA, 10-11 jen 1993.

Otè

Don Libes, Enstiti Nasyonal pou Estanda ak Teknoloji

AKKÒLMANMAN

Mèsi a John Ousterhout pou Tcl, ak Scott Paisley pou enspirasyon. Mèsi a Rob Savoye pou Kòd autoconfiguration espwa a.

HISTORY dosye dokiman yo anpil nan evolisyon nan ap atann . Li fè lekti enteresan epi li ka ba ou plis insight lojisyèl sa a. Mèsi a moun yo mansyone nan li ki voye m 'fikse ensèk ak te bay lòt asistans.

Design ak aplikasyon nan Apeprè te peye pou an pati pa gouvènman ameriken an e se poutèt sa nan domèn piblik la. Sepandan otè a ak NIST ta renmen kredi si pwogram sa a ak dokiman oswa pòsyon nan yo yo te itilize.