Amri ya Linux / Unix Inatarajia

Anatarajia ni mpango unaozungumzia programu nyingine za maingiliano kulingana na script. Kufuatilia script, Jaribu kutazamia nini kinachoweza kutarajiwa kutoka kwenye programu na nini majibu sahihi yanapaswa kuwa. Lugha inayotafsiriwa hutoa miundo ya uundaji na kiwango cha juu ili kuongoza mazungumzo. Kwa kuongeza, mtumiaji anaweza kuchukua udhibiti na kuingiliana moja kwa moja inapotakiwa, baada ya kurudi kudhibiti kwenye script.

Kutarajia ni mchanganyiko wa Kutarajia na Tk. Inafanana kama unatarajia na tk ya unataka. Kutarajia pia inaweza kutumika moja kwa moja katika C au C ++ bila Tcl.

Jina "Kutarajia" linatoka kwa wazo la kutuma / kutarajia mlolongo unaoenea na mipango ya uucp, kermit na programu nyingine za udhibiti wa modem. Hata hivyo tofauti na uucp, Kutarajia ni ya jumla ili iweze kuendesha kama amri ngazi ya mtumiaji na mpango wowote na kazi katika akili. Kutarajia inaweza kuzungumza na programu kadhaa kwa wakati mmoja.

Nini unatarajia kufanya

Kwa mfano, hapa ni baadhi ya mambo ambayo amri ya kutarajia inaweza kufanya:

Kuna aina mbalimbali za sababu shell haiwezi kufanya kazi hizi. Yote inawezekana kwa Kutarajia.

Kwa ujumla, Kutarajia ni muhimu kwa kuendesha programu yoyote ambayo inahitaji mwingiliano kati ya programu na mtumiaji. Yote ambayo ni muhimu ni kwamba mwingiliano unaweza kuwa na sifa ya programu. Anatarajia pia inaweza kurejesha udhibiti kwa mtumiaji bila kuzuia programu inayodhibitiwa. Vile vile, mtumiaji anaweza kurudi kudhibiti kwenye script wakati wowote.

Matumizi

Anatarajia mashabiki cmd kwa orodha ya amri za kutekeleza. Anatarajia inaweza kuingizwa kikamilifu kwenye mifumo inayounga mkono #! notation kwa kuashiria script kama kutekelezwa na kufanya mstari wa kwanza katika script:

#! / usr / mitaa / bin / kutarajia -f

Bila shaka, njia lazima ieleze kwa usahihi ambapo unatarajia maisha. / usr / ndani / bin ni mfano tu.

The -c bendera huanza amri ya kutekelezwa kabla ya yeyote kwenye script. Amri inapaswa kunukuliwa ili kuzuia kuvunjika na shell. Chaguo hili linaweza kutumika mara nyingi. Amri nyingi zinaweza kutekelezwa kwa moja -c kwa kuwatenganisha na semicolons. Maagizo yanatekelezwa ili waweze kuonekana. Wakati wa kutumia Expectk, chaguo hili ni maalum kama-ya kawaida.

Bendera-huwezesha pato fulani ya uchunguzi, ambayo hasa inaripoti shughuli za ndani ya amri kama vile kutarajia na kuingiliana. Bendera hii ina athari sawa na "exp_internal 1" mwanzoni mwa Matarajio ya script, pamoja na toleo la Kutarajia linachapishwa.

Nambari ya -D inaruhusu debugger mwingiliano. Thamani ya jumla inapaswa kufuata. Debugger itachukua udhibiti kabla ya utaratibu wa Tcl ijayo ikiwa thamani sio sifuri au ikiwa ^ C inafungwa au kuvunjika kwa pigo, au amri nyingine ya debugger inayofaa inaonekana kwenye script. Unapotumia Expectk, chaguo hili ni maalum kama - Dhibiti.

The -f bendera huanza faili ambayo kusoma amri. Bendera yenyewe ni chaguo kama ni muhimu tu wakati wa kutumia #! maelezo, ili hoja nyingine ziweze kutolewa kwenye mstari wa amri. Wakati wa kutumia Expectk, chaguo hili ni maalum kama -file.

Kwa chaguo-msingi, faili ya amri inasomewa kwenye kumbukumbu na kutekelezwa kwa ukamilifu. Ni mara kwa mara kuhitajika kusoma files moja line wakati mmoja. Ili kushinikiza mafaili ya kiholela kuwashughulikiwa kwa njia hii, tumia bendera -b. Unapotumia Expectk, chaguo hili ni maalum kama -buffer.

Ikiwa kamba "-" hutolewa kama jina la faili, pembejeo ya kawaida inasoma badala yake. Tumia "./-" kusoma kutoka faili iliyoitwa "-".

The-bendera husababisha Kutarajia kuingilia kati kwa amri badala ya kuisoma kutoka faili. Kuhamisha imekamilika kupitia amri ya kuondoka au juu ya EOF. The-bendera inachukuliwa ikiwa hakuna faili ya amri wala -c hutumiwa. Unapotumia Expectk, chaguo hili ni maalum kama-haiwezekani.

- inaweza kutumika kutangaza mwisho wa chaguo. Hii ni muhimu kama unataka kupitisha hoja kama chaguo kwenye script yako bila ya kutafsiriwa na Kutarajia. Hii inaweza kuweka kwa uzuri katika #! mstari ili kuzuia tafsiri yoyote ya bendera na Kutarajia. Kwa mfano, zifuatazo zitatoka hoja za asili ikiwa ni pamoja na jina la script katika hoja ya kutofautiana.

#! / usr / mitaa / bin / kutarajia -

Kumbuka kuwa mkataba wa kawaida (3) na kutekeleza (2) lazima uzingatiwe wakati unapoongeza hoja #! mstari.

Faili $ exp_library / expect.rc inafungwa kwa moja kwa moja ikiwa iko, isipokuwa bendera-N inatumiwa. (Unapotumia Expectk, chaguo hili ni maalum kama -NORC.) Hivi karibuni baada ya hili, file ~ / .expect.rc inafungwa moja kwa moja, isipokuwa -ta bendera itatumiwa. Ikiwa variable ya mazingira ya DOTDIR inatafanuliwa, inachukuliwa kama saraka na .expect.rc inasomewa huko. Wakati wa kutumia Expectk, chaguo hili ni maalum kama -norc. Ufuatiliaji huu hutokea tu baada ya kutekeleza bendera yoyote.

-v husababisha Kutarajia kuchapisha idadi yake ya toleo na kuondoka. Bendera inayolingana katika Expectk, ambayo hutumia majina ya muda mrefu ya bendera, ni -version.

Args kwa hiari hujengewa kwenye orodha na kuhifadhiwa kwenye variable inayoitwa variable na. argc imeanzishwa kwa urefu wa hoja.

Argv0 inafafanuliwa kuwa jina la script au binary ikiwa hakuna script inatumiwa. Kwa mfano, zifuatazo zinaonyesha jina la script na hoja tatu za kwanza:

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

Maagizo

Anatarajia anatumia lugha ya amri ya amri. Tcl hutoa mtiririko wa kudhibiti (ikiwa, kwa, kuvunja), tathmini ya kujieleza na vipengele vingine kadhaa kama ufafanuzi wa upya na utaratibu. Maagizo ya kutumika hapa lakini hayatafanywa (kuweka, kama, exec, ni amri za TCL). Anatarajia amri za ziada. Isipokuwa imefafanuliwa vinginevyo, amri kurudi kamba tupu.

Maagizo yameorodheshwa kwa herufi ili waweze kupata haraka. Hata hivyo, watumiaji wapya wanaweza kupata urahisi kuanza kwa kusoma maelezo ya spawn, kutuma, kutarajia, na kuingiliana, kwa utaratibu huo.

karibu [-lafu] [-onexec 0 | 1] [-i spawn_id]

inafunga uhusiano na mchakato wa sasa. Programu nyingi za maingiliano zitachunguza EOF kwenye stdin yao na kuondoka; hivyo karibu mara nyingi hutosha kuua mchakato pia. The-bendera inasema mchakato wa kufunga kufanana na spawn_id inayoitwa.

Wote wanatarajia na kuingiliana watachunguza wakati mchakato wa sasa unatoka na kufanywa wazi, lakini ikiwa unaua mchakato kwa, sema, "exec kill pid $", unahitaji kufuta kwa karibu kabisa .

Bendera -onexec huamua ikiwa id ya spawn imefungwa katika mchakato wowote uliozalishwa au ikiwa mchakato umefungwa. Ili kuacha id ya wazi, tumia thamani 0. A thamani isiyo ya zero integer imesababisha spawn kufungwa katika mchakato wowote mpya.

Bendera--lave inamfunga mtumwa aliyehusishwa na id ya spawn. Wakati uunganisho umefungwa, mtumwa amefungwa moja kwa moja ikiwa pia ni wazi.

Haijalishi uunganisho umefungwa wazi au wazi, unapaswa kupiga simu kusubiri kufuta slot ya kernel mchakato . Amri ya karibu haina wito kusubiri kwani hakuna dhamana ya kufunga kufunga mchakato itasababisha kuondoka.

debug [[-now] 0 | 1]

inasimamia debugger ya Tcl inakuwezesha kuingia kwa kauli na kuweka vipengee.

Kwa hoja hakuna, 1 inarudi ikiwa debugger haina kukimbia, vinginevyo 0 inarudi.

Kwa hoja 1, debugger imeanza. Kwa hoja 0, debugger imesimamishwa. Ikiwa hoja 1 inatanguliwa na-sasa bendera, debugger imeanzishwa mara moja. Vinginevyo, debugger imeanzishwa kwa tamko la Tcl ijayo.

Amri ya debug haina mabadiliko ya mitego yoyote. Linganisha hii ili uanze Kutarajia na bendera -D.

Amri ya kukatwa huunganisha mchakato uliowekwa kutoka kwenye terminal . Inaendelea kukimbia nyuma. Mchakato huo unatolewa kwa kundi lake la mchakato. I / O ya kawaida inaelekezwa hadi / dev / null .

Kipande kinachofuata kinatumia kukatika ili kuendelea kuendesha script nyuma.

ikiwa {tok] = 0} kuondoka kukatwa. . .

Script iliyofuata inasoma nenosiri na kisha huendesha programu kila saa ambayo inahitaji nenosiri kila wakati linapotumika. Script hutoa nenosiri ili uweze kuitayarisha mara moja.

kutuma "nenosiri" \ "kutarajia -re" (. *) \ n "kwa {} 1 {} {kama {[fork] = 0} {kulala 3600; endelea} kuunganisha spawn priv_prog kutarajia nenosiri: tuma" $ expect_out ( 1, kamba) \ r ". . . Utgång }

Faida ya kutumia kukatwa juu ya kipengele cha mchakato wa asynchronous (&) ni kwamba Kutarajia inaweza kuokoa vigezo vya terminal kabla ya kukatwa na kisha kuitumia kwa ptys mpya. Kwa &, Tarajia hawana nafasi ya kusoma vigezo vya terminal tangu kituo hicho kimesimamishwa na wakati unatarajia hupokea udhibiti.

Toka [-pts] [hali]

husababisha Kutarajia kuondoka au vinginevyo kujiandaa kufanya hivyo.

Bendera ya- onexit inasababisha hoja inayofuata itumike kama mfanyabiashara wa kutoka. Bila shaka, mfanyabiashara wa sasa wa kusafirishwa anarudiwa.

Bendera ya kutafakari husababisha Kutarajia kujiandaa kuondoka lakini usiache udhibiti wa kurudi kwa mfumo wa uendeshaji. Mtejaji anayechaguliwa kutoka kwa mtumiaji anaendesha na pia watunzaji wa ndani wanaotarajia. Hakuna zaidi ya matarajio ya amri inapaswa kutekelezwa. Hii ni muhimu ikiwa unatarajia Unatarajia na vidonge vingine vya Tcl. Mtafsiri wa sasa (na dirisha kuu ikiwa katika mazingira ya Tk) kubaki ili vingine vingine vya Tcl visafishe. Ikiwa unatarajia kuondoka huitwa tena (hata hivyo hii inaweza kutokea), wasimamizi hawarudi tena.

Baada ya kuondoka, uunganisho wote wa taratibu zilizozalishwa zimefungwa. Ufungashaji utaonekana kama EOF kwa mchakato uliozalishwa. exit haitachukua hatua nyingine zaidi ya kile kawaida _exit (2) utaratibu gani. Kwa hivyo, taratibu zilizozalishwa ambazo hazizingati kwa EOF zinaweza kuendelea kukimbia. (Hali mbalimbali ni muhimu kuamua, kwa mfano, ni nini kinachoashiria utaratibu uliozalishwa watatumwa, lakini hii ni tegemezi-ya mfumo, kwa kawaida iliyoandikwa chini ya kuondoka (3).) Utaratibu uliowekwa unaoendelea utaendeshwa utakuwa urithi na init.

hali (au 0 ikiwa sio maalum) inarudi kama hali ya kutoka kwa Kutarajia . Toka hutolewa kikamilifu ikiwa mwisho wa script unafanyika.

exp_continue [-continue_timer]
Amri exp_continue inaruhusu kutarajia yenyewe kuendelea kuendesha badala ya kurudi kama ni kawaida ingekuwa. Kwa default exp_continue upya muda wa muda. Bendera-ya kuendelea_timer inaleta timer kuanzia upya. (Ona matumaini kwa maelezo zaidi.)

Exp_internal [-f file] thamani
husababisha amri zaidi ya kutuma habari za uchunguzi wa ndani kwa Kutarajia stderr ikiwa thamani sio sifuri. Pato hili linazimwa ikiwa thamani ni 0. Maelezo ya uchunguzi yanajumuisha kila tabia iliyopokelewa, na kila jaribio linalotengenezwa ili lifanane na pato la sasa dhidi ya chati.

Ikiwa faili ya hiari hutolewa, pato zote za kawaida na debugging zimeandikwa kwa faili hiyo (bila kujali thamani ya thamani ). Faili yoyote ya awali ya pato ya uchunguzi imefungwa.

Bendera ya bendera husababisha ex_ ndani ili kurudi maelezo ya mambo ya hivi karibuni yasiyo ya maelezo yaliyotolewa.

exp_open [args] [-i spawn_id]
inarudi kitambulisho cha faili ya Tcl ambacho kinalingana na id ya awali ya spawn. Kitambulisho cha faili kinaweza kutumika kama kilichofunguliwa na amri ya wazi ya Tcl. (Id idhini haipaswi kutumika tena. Kusubiri haipaswi kutekelezwa.

Bendera- laaveopen huacha id idhini ya kufungua kupitia upataji wa amri. Kusubiri lazima ifanyike kwenye id ya spawn.

exp_pid [-spawn_id]
inarudi id ya mchakato sambamba na mchakato wa sasa uliozalishwa. Ikiwa -ta bendera inatumiwa, pid inarudi inafanana na ile ya id ya spawn iliyopewa.

exp_send
ni safu ya kutuma .

exp_send_error
ni safu ya kutuma_error .

exp_send_log
ni safu ya kutuma_log .

exp_send_tty
ni safu kwa kutuma .

exp_send_user
ni safu kwa mtumaji .

exp_version [-exit] toleo]
ni muhimu kwa kuhakikishia kwamba script ni sambamba na toleo la sasa la Kutarajia.

Kwa hoja hakuna, toleo la sasa la Kutarajia linarudi. Toleo hili linaweza kuingizwa kwenye script yako. Ikiwa unajua kuwa hutumii vipengele vya matoleo ya hivi karibuni, unaweza kutaja toleo la awali.

Vifungu vinajumuisha namba tatu zilizojitenga na dots. Kwanza ni namba kuu. Maandiko yaliyoandikwa kwa matoleo ya Kutarajia na idadi kubwa tofauti hakika haifanyi kazi. exp_version inarudi kosa ikiwa idadi kubwa hazilingani .

Pili ni namba ndogo. Maandiko yaliyoandikwa kwa toleo na idadi ndogo zaidi kuliko toleo la sasa linaweza kutegemeana na kipengele kipya na haliwezi kukimbia. exp_version inarudi hitilafu ikiwa namba kuu zinakabiliana , lakini nambari ndogo ya script ni kubwa zaidi kuliko ile ya Kutarajia .

Tatu ni nambari ambayo haina sehemu katika kulinganisha toleo. Hata hivyo, imeongezeka wakati Matarajio ya usambazaji wa programu yamebadilishwa kwa njia yoyote, kama vile nyaraka za ziada au uboreshaji. Inarudiwa kwenye 0 juu ya kila toleo jipya.

Na bendera ya- itayarisha , Jaribu kutengeneza hitilafu na kuondoka ikiwa toleo halikutoka .

wanatarajia [[-pts] mwili wa11] ... [-taka] patn [bodyn]
unasubiri mpaka mwelekeo mmoja ufanane na pato la mchakato uliozalishwa, muda uliotangulia umepita, au mwisho wa faili unaonekana. Ikiwa mwili wa mwisho ni tupu, huenda ukaondolewa.

Sifa kutoka kwa amri ya hivi karibuni ya kutarajia kabla ya amri hutumiwa kikamilifu kabla ya mwelekeo mwingine wowote. Sifa kutoka kwa amri ya hivi karibuni ya kutarajia imetumiwa kikamilifu baada ya mwelekeo mwingine wowote.

Ikiwa hoja kwa taarifa nzima ya kutarajia zinahitaji zaidi ya mstari mmoja, hoja zote zinaweza "kubatizwa" moja kwa moja ili kuepuka kusitisha kila mstari na kurudi nyuma. Katika kesi hii moja, mabadiliko ya kawaida ya Tcl yatatokea licha ya braces.

Ikiwa mfano ni neno la msingi, mwili unaofanana unafanywa juu ya mwisho wa faili. Ikiwa mfano ni muda wa muda wa nenosiri, mwili unaoendana unafanywa wakati wa muda. Ikiwa hakuna nenosiri la wakati wa kutumiwa linatumiwa, hatua isiyo ya wazi ya ufanisi inafanywa wakati wa muda. Kipindi cha kusitisha chaguo-msingi ni sekunde 10 lakini inaweza kuweka, kwa mfano hadi 30, kwa amri "kuweka muda wa 30". Muda usio na kipimo unaweza kuwa uliowekwa na thamani -1. Ikiwa mfano ni default nenosiri, mwili sambamba inatekelezwa juu ya mwisho au mwisho wa faili.

Ikiwa muundo unafanana, basi mwili unaoendana unafanyika. wanatarajia anarudi matokeo ya mwili (au kamba tupu ikiwa hakuna muundo unaofanana). Katika tukio ambalo mechi nyingi zinafanana, moja inayoonekana kwanza hutumiwa kuchagua mwili.

Kila mara pato mpya inapofika, inalinganishwa na kila muundo kwa mpangilio waliotajwa. Kwa hiyo, unaweza kupima kwa kutokuwepo kwa mechi kwa kufanya muundo wa mwisho kitu fulani kilichohakikishiwa kuonekana, kama haraka. Katika hali ambapo hakuna haraka, unapaswa kutumia muda (kama ungependa kama ungewasiliana kwa mkono).

Sampuli zinaelezwa kwa njia tatu. Kwa chaguo-msingi, mwelekeo umeelezwa kama na amri ya mechi ya kamba ya Tcl. (Mwelekeo huo pia ni sawa na maneno ya kawaida ya C- kawaida ambayo hujulikana kama "glob" ruwaza). Bendera -gl inaweza kutumika kutetea mifumo ambayo inaweza vinginevyo inakabiliana na matangazo ya kutarajia . Mfano wowote unaotokana na "-" unapaswa kulindwa kwa njia hii. (Masharti yote yanayotokana na "-" yanahifadhiwa kwa chaguzi za baadaye.)

Kwa mfano, kipande kinachofuata kinatafuta kuingia kwa mafanikio. (Kumbuka kwamba kupuuza ni kudhaniwa kuwa utaratibu unaoelezwa mahali pengine kwenye script.)

wanatarajia {busy {unaweka busy \ n; exp_continue} imeshindwa kupoteza "nenosiri batili" kuacha kujifungua wakati wa kufungia}

Quotes ni muhimu kwa muundo wa nne kwa kuwa ina nafasi, ambayo ingekuwa vinginevyo kutenganisha muundo kutoka kwa hatua. Sampuli na hatua sawa (kama vile 3 na 4) zinahitaji kuorodhesha vitendo tena. Hii inaweza kuepuka kwa kutumia ruwaza za regexp-tazama (tazama hapa chini). Maelezo zaidi juu ya kutengeneza mwelekeo wa mtindo wa glob unaweza kupatikana kwenye mwongozo wa TCL.

Mipangilio ya mtindo wa Regexp hufuata syntax iliyoelezwa na regexp ya Tcl (fupi kwa amri ya "kujieleza mara kwa mara"). Mwelekeo wa regexp huletwa na bendera -re . Mfano uliopita unaweza kuandikwa upya kwa kutumia regexp kama:

wanatarajia {busy {unaweka busy \ n; exp_continue} -re "imeshindwa | nenosiri la batili" liondoa pumzi ya kushoto iliyounganishwa}

Aina zote za mwelekeo ni "zisizounganishwa". Hii inamaanisha kuwa mwelekeo haufanani na kamba nzima, lakini inaweza kuanza na kumaliza mechi popote kwenye kamba (kwa muda mrefu kama kila kitu kingine kinachofanana). Tumia ^ ili kufanana na mwanzo wa kamba, na $ ili kufanana na mwisho. Kumbuka kwamba ikiwa hungojea mwisho wa kamba, majibu yako yanaweza kuishia katikati ya kamba kama inavyoelezea kwenye mchakato uliozalishwa. Wakati bado huzalisha matokeo sahihi, pato inaweza kuangalia si ya kawaida. Kwa hiyo, matumizi ya $ hutia moyo kama unaweza kuelezea hasa wahusika mwisho wa kamba.

Kumbuka kwamba kwa wahariri wengi, ^ na $ vinafanana na mwanzo na mwisho wa mistari kwa mtiririko huo. Hata hivyo, kwa sababu kutarajia sio mwelekeo wa mstari, wahusika hawa wanafanana na mwanzo na mwisho wa data (kinyume na mistari) kwa sasa katika matarajio yanayolingana. (Pia, angalia gazeti hapa chini kwenye "mfumo wa usaidizi.")

Bendera ya -ex inasababisha muundo kuwa sawa na kamba "halisi". Hakuna ufafanuzi wa *, ^, nk, unafanywa (ingawa kawaida ya Tcl mikataba lazima bado kuzingatiwa). Mwelekeo halisi ni daima unanchored.

Bendera -nocase husababisha wahusika mkubwa wa pato kulinganisha kama walikuwa wahusika wa chini. Mfano hauathiriwa.

Wakati wa kusoma pato, zaidi ya 2000 bytes inaweza kulazimisha byte mapema kuwa "wamesahau". Hii inaweza kubadilishwa na mechi ya match_max . (Ona kwamba maadili makubwa yanaweza kupunguza kasi ya mchezaji wa muundo.) Ikiwa patlist ni kamili_buffer , mwili unaoendana unafanyika ikiwa mechi_max zimepokelewa na hakuna ruwaza nyingine zimefanana. Ikiwa neno la msingi kamili_buffer hutumiwa, wahusika waliosahau wameandikwa kutarajia_out (buffer).

Ikiwa patlist ni neno lisilo la msingi, na vibaya haziruhusiwi (kwa njia ya amri ya kuondoa_nulls ), mwili unaofanana unafanywa ikiwa moja ASCII 0 inafanana. Haiwezekani kufanana na oct 0 kwa njia ya glob au regexp chati.

Juu ya vinavyolingana na muundo (au eof au full_buffer), pato lolote linalofanana na la awali halijasimamishwa linahifadhiwa katika matarajio tofauti ya matarajio (buffer) . Hadi hadi mechi 9 za regexp substring zihifadhiwa katika vigezo kutarajia (1, kamba) kwa kutarajia_out (9, kamba) . Ikiwa - bendera zinazotumiwa kabla ya muundo, fahirisi za kuanzia na za mwisho (kwa fomu inayofaa kwa ajili ya lrange ) ya masharti 10 huhifadhiwa katika vigezo expect_out (X, kuanza) na kutarajia (X, mwisho) ambapo X ni tarakimu, inafanana na msimamo mzuri katika buffer. 0 inahusu masharti yanayofanana na muundo wote na yanazalishwa kwa mifumo ya glob pamoja na mifumo ya regexp. Kwa mfano, ikiwa mchakato umetoa pato la "abcdefgh \ n", matokeo ya:

wanatarajia "cd"

ni kama maneno yaliyofuata yaliyotokana:

Weka kutarajia_out (0, kamba) cd kuweka expect_out (buffer) abcd

na "efgh \ n" imesalia katika buffer ya pato. Ikiwa mchakato ulizalishwa pato "abbbcabkkkka \ n", matokeo ya:

tumaini -a "b (b *). * (k +)"

ni kama maneno yaliyofuata yaliyotokana:

Weka kutarajia_out (0, kuanza) 1 weka kutarajia_out (0, mwisho) 10 tumaini_out (0, kamba) bbbcabkkkk kuweka matarajio_out (1, kuanza) 2 itatarajia_out (1, mwisho) 3 itatarajia_out (1, kamba) bb kuweka expect_out (2, kuanza) 10 kuweka kutarajia_out (2, mwisho) 10 kuweka kutarajia_out (2, kamba) k set expect_out (buffer) abbbcabkkkk

na "\ n" imesalia katika buffer ya pato. Mfano "*" (na -re ". *") Utaondoa buffer ya pato bila kusoma pato lolote kutoka mchakato.

Kwa kawaida, pato lililofanana limepwa kutoka kwa matarajio ya ndani ya Kutarajia. Hii inaweza kuzuiwa kwa kuanzisha mfano na bendera -notransfer . Bendera hii ni muhimu sana katika kujaribu (na inaweza kufunguliwa "-not" kwa urahisi wakati unajaribu).

Idhini ya kuzalisha inayohusiana na pato zinazofanana (au eof au full_buffer) imehifadhiwa katika expect_out (spawn_id) .

Bendera ya -timeout inasababisha amri ya sasa ya kutarajia kutumia thamani ifuatayo kama muda wa saa badala ya kutumia thamani ya variable ya muda.

Kwa chaguo-msingi, mwelekeo unafanana dhidi ya pato kutoka kwa mchakato wa sasa, hata i- bendera inasema pato kutoka kwa jina lake la spawn_id linalingana dhidi ya mwelekeo wowote uliofuata (hadi kwenye ijayo -i ). Orodha ya spawn_id inapaswa kuwekwa orodha ya faragha ya spawn_ids au variable inayohusu orodha hiyo ya spawn_ids.

Kwa mfano, mfano wafuatayo unasubiri kwa "kushikamana" kutoka kwa mchakato wa sasa, au "busy", "kushindwa" au "nenosiri batili" kutoka spawn_id inayoitwa na $ proc2.

wanatarajia {-i $ proc2 busy {kuweka busy \ n; exp_continue} -re "imeshindwa | nenosiri la batili" liondoa pumzi ya kushoto iliyounganishwa}

Thamani ya variable ya kimataifa yoyote_spawn_id inaweza kutumika kutekeleza chati kwa spawn_ids yoyote ambayo ni jina lake na wengine wote - ni bendera katika amri ya sasa wanatarajia . Spawn_id kutoka bendera-isiyo na muundo unaohusishwa (yaani, ikifuatiwa mara moja na mwingine -i ) inafanywa kwa njia nyingine yoyote katika amri sawa ya kutarajia inayohusishwa na any_spawn_id.

The - bendera inaweza pia kutaja variable ya kimataifa katika hali ambayo kutofautiana kwa kusoma orodha ya spawn ids. Tofauti hurejelewa wakati wowote unavyobadilisha. Hii hutoa njia ya kubadilisha chanzo cha I / O wakati amri iko katika utekelezaji. Vidokezo vya faragha vinavyotolewa kwa njia hii huitwa "idhaa ya" isiyokuwa ya moja kwa moja ".

Vitendo kama vile kuvunja na kuendelea na miundo ya kudhibiti (yaani, kwa , proc ) kuishi kwa kawaida. Amri exp_continue inaruhusu kutarajia yenyewe kuendelea kuendesha badala ya kurudi kama ni kawaida ingekuwa.

Hii ni muhimu kwa kuepuka loops wazi au mara kwa mara kutarajia kauli. Mfano wafuatayo ni sehemu ya fragment ya automatiska rlogin. Exp_continue inepuka kuandika maneno ya pili ya kutarajia (kuangalia kwa haraka tena) ikiwa pembejeo ya rlogin ya nenosiri.

unatarajia {Password: {stty -echo send_user "password (kwa $ user) kwa mwenyeji wa $:" tuma_user -re "(. *) \ n" kutuma_user "\ n" tuma "$ expect_out (1, string) \ r" stty echo exp_continue} nenosiri la "send_user" la batili au akaunti \ n "exit} wakati wa kuingia {send_user" kuunganishwa kwa $ uliopangwa nje \ n "exit} eof {send_user \" uunganisho kwa jeshi lilishindwa: $ expect_out (buffer) "exit} - re $ haraka}

Kwa mfano, kipande kifuatazo kinaweza kusaidia mwongozo wa mtumiaji uingiliano ambao tayari umekamilika kabisa. Katika kesi hii, terminal inawekwa katika hali ya mbichi. Ikiwa mtumiaji anashikilia "+", mabadiliko yanaongezeka. Ikiwa "p" ni taabu, kurudi kadhaa hupelekwa kwa mchakato, labda kuifanya kwa njia fulani, na "i" inaruhusu mtumiaji kuingiliana na mchakato, kwa ufanisi kuiba mbali kutoka kwa script. Katika kila kesi, exp_continue inaruhusu sasa wanatarajia kuendelea na muundo vinavyolingana baada ya kutekeleza hatua ya sasa.

Stty mbichi -echo wanatarajia_fuatayo {-i $ user_spawn_id "p" {kutuma "\ r \ r \ r"; exp_continue} "+" {incr foo; exp_continue} "i" {kuingiliana; exp_continue} "kuacha" kutoka}

Kwa default, exp_continue upya muda wa muda. Kipindi hiki hakijadiliwa tena, ikiwa exp_continue inaitwa na-- inakuja_timer bendera.

wanatarajia_fuatayo [wanatarajia]
inafanya kazi sawa na kutarajia - kabla ila iwapo mifumo kutoka kwa wote inatarajia na kutarajia_fuatayo inaweza kufanana, ruwaza inatarajia inatumiwa. Angalia matarajio-mbele ya amri kwa habari zaidi.

wanatarajia_uwanja wa kurudi [wanatarajia]
inachukua hoja sawa na kutarajia , hata hivyo inarudi mara moja. Sifa zinajaribiwa wakati wowote pembejeo mpya inapofika. Muda wa mwongozo na chaguo-msingi sio maana ya kutarajia_kumbika na hupotezwa kimya. Vinginevyo, amri ya kutarajia - kurudi hutumia matarajio-mbele na kutarajia_mfumo wa baadaye kama vile unavyotarajia .

Unapotarajia- vitendo vya ufuatiliaji vinapimwa , usindikaji wa historia kwa id idhini sawa imefungwa. Usindikaji wa asili haufunuliwa wakati hatua itakapotimia. Wakati usindikaji wa historia umezuiwa, inawezekana kufanya (mbele) kutarajia kwenye id hiyo ya spawn.

Haiwezekani kutekeleza kutarajia wakati kutarajia_kumbika kwa miguu haufunguliwa . Anatarajia_ufuatiliaji wa id idhini fulani inafutwa na kutangaza mpya ya matarajio ya kurudi na id idhini sawa. Kutangaza matarajio ya kutarajia bila muundo wowote huondoa id iliyotolewa kutokana na uwezo wa kufanana na chati nyuma.

wanatarajia - kabla ya [kutarajia]
inachukua hoja sawa na kutarajia , hata hivyo inarudi mara moja. Vipande vya vipengee vya sampuli kutoka kwa matarajio ya hivi karibuni- mbele na id hiyo ya spawn imeongezwa kikamilifu kwa amri zifuatazo zifuatazo. Ikiwa mfano unafanana, hutambuliwa kama ulivyowekwa katika amri ya kutarajia yenyewe, na mwili unaohusishwa unafanywa katika mazingira ya amri ya kutarajia . Ikiwa mwelekeo kutoka kwa wote unatarajia - kabla na unatarajia unaweza kufanana, matarajio-kabla ya muundo hutumiwa.

Ikiwa hakuna mfano unaothibitishwa, id idhini haijatikani kwa chati yoyote.

Isipokuwa imeingizwa na bendera - bendera, wanatarajia- mbele ya mechi ya mechi dhidi ya kitambulisho kilichofafanuliwa wakati ambapo matarajio-mbele ya amri yalifanyika (si wakati muundo wake unafanana).

Bendera-bendera husababisha kutarajia - kabla ya kurejea maelezo ya sasa ya mwelekeo gani utakaofanana . Kwa chaguo-msingi, inaripoti juu ya id ya sasa ya ududu. Njia ya hiari ya hifadhi ya hiari inaweza kutolewa kwa habari juu ya id hiyo ya spawn. Kwa mfano

wanatarajia-kabla ya -info -i $ proc

Kwa moja ya specifikationer maalum ya id inaweza kutolewa. Bendera-sahihi huzuia ids za moja kwa moja zinazozalisha tu kutoka kwa vipimo vya moja kwa moja.

Badala ya specifikationer ya id, bendera "-all" itasababisha "-info" kutoa ripoti juu ya vitambulisho vyote vilivyotengenezwa.

Pato la bendera ya bendera linaweza kutumika tena kama hoja ya kutarajia - kabla.

wanatarajia_natarajia]
ni kama kutarajia lakini inasoma wahusika kutoka / dev / tty (yaani keystrokes kutoka kwa mtumiaji). Kwa default, kusoma hufanyika katika hali iliyopikwa. Hivyo, mistari inapaswa kuishia na kurudi ili kutarajia kuwaona. Hii inaweza kubadilishwa kupitia stty (angalia amri ya daraja hapa chini).

wanatarajia_taka [wanatarajia]
ni kama wanatarajia lakini inasoma wahusika kutoka kwa stdin (yaani keystrokes kutoka kwa mtumiaji). Kwa default, kusoma hufanyika katika hali iliyopikwa. Hivyo, mistari inapaswa kuishia na kurudi ili kutarajia kuwaona. Hii inaweza kubadilishwa kupitia stty (angalia amri ya daraja hapa chini).

uma
hujenga mchakato mpya. Mchakato mpya ni nakala halisi ya sasa ya Kutarajia mchakato . Katika mafanikio, ifunguo inarudi 0 hadi mchakato mpya (mtoto) na inarudi ID ya utaratibu wa mchakato wa mtoto kwa mchakato wa wazazi. Kushindwa (invariably kutokana na ukosefu wa rasilimali, kwa mfano, nafasi ya kubadilisha, kumbukumbu), kurudi umaza kwa mchakato wa mzazi, na hakuna mchakato wa mtoto unaloundwa .

Michakato imefungwa kutoka kwa amri ya kuondoka , kama mchakato wa awali. Michakato iliyofungwa imeruhusiwa kuandika kwenye faili za logi. Ikiwa huwezi kuzuia kufuta debugging au kuingia kwenye michakato mingi, matokeo yanaweza kuchanganya.

Maagizo mengine ya pty yanaweza kuchanganyikiwa na wasomaji wengi na waandishi, hata kwa muda mfupi. Kwa hiyo, ni salama sana kukupa michakato kabla ya kuzaa.

kuingiliana [string1 body1] ... [stringn [bodyn]]
inatoa udhibiti wa mchakato wa sasa kwa mtumiaji, hivyo kwamba vipindi vya vipindi vinatumwa kwa mchakato wa sasa, na stdout na stderr ya mchakato wa sasa wanarudi.

Vipande vya mwili viwili vinaweza kuelezewa kama hoja, katika hali ambayo mwili unafanywa wakati kamba inayofanana inapoingia. (Kwa default, kamba haikutumwa kwa mchakato wa sasa.) Amri ya mkalimani inadhaniwa, ikiwa mwili wa mwisho haupo.

Ikiwa hoja kwa taarifa nzima ya kuingiliana zinahitaji mstari zaidi ya moja, hoja zote zinaweza "kubatizwa" moja kwa moja ili kuepuka kusitisha kila mstari na kurudi nyuma. Katika kesi hii moja, mabadiliko ya kawaida ya Tcl yatatokea licha ya braces.

Kwa mfano, amri ifuatayo inashirikiana na jozi zifuatazo za mwili wa kamba zilizofafanuliwa: Wakati ^ Z imefungwa, Ingatia imesimamishwa. (Bendera ya kurekebisha inarudi njia za mwisho.) Wakati ^ A imefadhaiwa, mtumiaji anaona " umeweka uchapishaji -A" na mchakato unatumwa ^ A. Wakati $ inavyoshikilia, mtumiaji anaona tarehe. Wakati ^ C inafadhaiwa, Jaribu kutarajia . Ikiwa "foo" imeingia, mtumiaji anaona "bar". Wakati ~~ ni taabu, Kutarajia mkalimani anaendesha katikati.

weka CTRLZ \ 032 kuingiliana {-reset $ CTRLZ {exec kill -STOP [pid]} \ 001 {send_user "uliyetumia kudhibiti-A \ n"; tuma "\ 001"} $ {send_user "Tarehe ni [saa ya saa [sekunde za saa]."} \ 003 kuondoka foo {send_user "bar"} ~~}

Katika safu za mwili wa kamba, masharti yanafananishwa kwa utaratibu wao yameorodheshwa kama hoja. Nguzo ambazo hazikutaniki hazikutumwa kwa mchakato wa sasa kwa kutarajia salio inayoja. Ikiwa wahusika huingia kama vile hawezi tena kuwa mechi, sehemu tu ya kamba itatumwa kwenye mchakato ambao hauwezi kuanza mechi nyingine. Kwa hiyo, masharti ambayo ni mechi ya mechi inaweza kushirikiana baadaye, kama masharti ya awali yaliyotaka kuigizana hatimaye inashindwa.

Kwa chaguo-msingi, kamba inayofanana ni sawa na kadi za mwitu . (Kwa kulinganisha, amri ya kutarajia inatumia ruwaza za mtindo wa kifahari kwa default.) Bendera ya -ex inaweza kutumika kulinda mifumo ambayo inaweza vinginevyo inafanana na bendera za kuingiliana . Mfano wowote unaotokana na "-" unapaswa kulindwa kwa njia hii. (Masharti yote yanayotokana na "-" yanahifadhiwa kwa chaguzi za baadaye.)

Bendera-linasababisha kamba kutafsiriwa kama muundo wa mtindo wa regexp. Katika kesi hii, substrings vinavyolingana zimehifadhiwa katika kutofautiana katikati_out sawa na njia inatarajia kuhifadhi pato lake katika kutarajia kutoroka . Nambari- bendera ni mkono sawa.

Mfano wa utangulizi hutangaza hatua inayofanyika juu ya mwisho wa faili. Faili tofauti ya eof pia inaweza kufuata bendera -toka katika kesi ambayo inafanana ikiwa eof hugundulika wakati wa kuandika pato. Hatua ya default ya eof ni "kurudi", ili kuingiliana tu kurudi kwenye EOF yoyote.

Muda wa utaratibu unaanzisha muda (kwa sekunde) na hatua ambayo hufanyika baada ya wahusika hakuna kusoma kwa wakati uliopangwa. Mfano wa muda wa kutekeleza hutumika kwa mchakato uliowekwa hivi karibuni. Hakuna muda wa kushoto. Kipengee maalum cha "muda" (kilichotumiwa na amri ya kutarajia ) hainaathiri wakati huu.

Kwa mfano, kauli ifuatayo inaweza kutumika kwa watumiaji wa autologout ambao hawajaandika kitu chochote kwa saa lakini bado wanapata ujumbe wa mfumo wa mara kwa mara:

kuingiliana -kutaja $ user_spawn_id muda wa kurudi 3600 kurudi-$ \ spawn_id

Ikiwa mfano ni neno la nenosiri, na vidokezo vinaruhusiwa (kupitia amri ya kuondoa_nulls ), mwili unaofanana unafanywa ikiwa moja ASCII 0 inafanana. Haiwezekani kufanana na oct 0 kwa njia ya glob au regexp chati.

Kujiunga na muundo na bendera- kuandika husababisha interact_out variable (spawn_id) kuwa kuweka spawn_id ambayo yanafanana mfano (au eof).

Vitendo kama vile kuvunja na kuendelea na miundo ya kudhibiti (yaani, kwa , proc ) kuishi kwa kawaida. Hata hivyo kurudi husababisha kuingiliana kurudi kwa mpigaji wake, wakati inter_return husababisha kuingiliana ili kusababisha kurudi kwa wito wake. Kwa mfano, ikiwa "pro foo" iitwayo kuingiliana ambayo kisha kutekelezwa action inter_return , proc foo kurudi. (Hii ina maana kwamba ikiwa kuingiliana wito wa kutafsiri kati ya kuandika kurejesha itasababisha kuingiliana kuendelea, wakati inter_return itasababisha kuingiliana kurudi kwa mpigaji wake.)

Wakati wa kuingiliana , mode mbichi hutumiwa ili wahusika wote waweze kupitishwa kwa mchakato wa sasa. Ikiwa mchakato wa sasa hauwezi kupata ishara ya kudhibiti kazi, itaacha ikiwa imetumwa ishara ya kuacha (kwa default ^ Z). Ili kuanzisha upya, tuma ishara inayoendelea (kama vile "kuua -CONT"). Ikiwa unataka kutuma SIGSTOP kwenye mchakato kama huo (kwa ^ Z), fikiria kuzaa csh kwanza na kisha kuendesha programu yako. Kwa upande mwingine, ikiwa unataka kutuma SIGSTOP kuitarajia, mwitafsiri wa kwanza (labda kwa kutumia tabia ya kutoroka), halafu bonyeza ... Z.

Vipande viwili vya mwili vinaweza kutumika kama shorthand kwa kuepuka kuingia kwa mkalimani na kutekeleza amri interactively. Mfumo wa mwisho uliotumiwa unatumiwa wakati mwili wa jozi ya mwili wa kamba unafanywa.

Kwa kasi, vitendo vinatekeleza kwa njia ya ghafi kwa default. Bendera-upya inapunguza upya kituo hicho kabla ya kuingiliana ilifanyika (bila shaka, mode iliyopikwa). Kumbuka kuwa wahusika waliingia wakati hali hiyo inachukuliwa inaweza kupotea (kipengele cha bahati mbaya cha msimamizi wa terminal kwenye mifumo fulani). Sababu pekee ya kutumia- kurekebisha ni kama hatua yako inategemea kuendesha mode iliyopikwa.

Bendera la-- the hutuma wahusika wanaofanana na muundo wafuatayo kwenye mchakato ambao uliwazalisha kama kila tabia inavyoonekana . Hii inaweza kuwa na manufaa wakati mtumiaji anahitaji kuona maoni kutoka kwa chati zilizochapishwa kwa sehemu.

Ikiwa mfano unafanyika lakini hatimaye hauwezi kufanana, wahusika hupelekwa kwenye mchakato uliozalishwa. Ikiwa mchakato uliozalishwa kisha unawachochea, mtumiaji ataona wahusika mara mbili. -echo labda inafaa tu katika hali ambazo mtumiaji hawezi uwezekano wa kukamilisha muundo. Kwa mfano, sehemu yafuatayo inatoka kwa rftp, script ya kurudi-ftp, ambako mtumiaji anasababisha kuingiza ~ g, ~ p, au ~ l, kupata, kuweka, au kuandika orodha ya sasa ya kurudia. Hizi ni mbali sana na amri za kawaida za ftp, ambazo mtumiaji hawezi kutengeneza ~ ikifuatiwa na kitu kingine chochote, isipokuwa kwa makosa, katika hali hiyo, labda hupuuza tu matokeo hiyo.

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

Bendera -nobuffer inatuma wahusika wanaofanana na muundo unaofuata kwenye mchakato wa pato kama wahusika wanavyosoma .

Hii ni muhimu wakati unataka kuruhusu programu kurejesha muundo. Kwa mfano, zifuatazo zinaweza kutumiwa kufuatilia ambapo mtu anapiga simu (modem ya style Hayes). Kila wakati "atd" inaonekana magogo ya script ya mstari wa pili.

taa ya kupangilia {} {kuingiliana -nobuffer -re "(. *) \ r" kurudi huweka logi ya $ "[muundo wa saa [sekunde za saa]: imeitwa $ interact_out (1, kamba)"} kuingiliana -nobuffer "atd" lognumber

Wakati wa kuingiliana , matumizi ya awali ya log_user yanapuuzwa. Hasa, kuingiliana itasisitiza pato lake kuwa logi (limetumwa kwa pato la kawaida) tangu inavyoonekana kuwa mtumiaji hawataki kuingiliana kipofu.

Bendera -o husababisha jozi yoyote ya kufuatia mwili ili kutumika kwa pato la mchakato wa sasa. Hii inaweza kuwa na manufaa, kwa mfano, wakati wa kushughulika na majeshi ambayo hutuma wahusika zisizohitajika wakati wa kikao cha telnet.

Kwa default, kuingiliana anatarajia mtumiaji kuandika stdin na kusoma usomaji wa Utaratibu wa Kutarajia yenyewe. Bendera-bendera (kwa "mtumiaji") inafanya ushirikiano wa kuangalia kwa mtumiaji kama mchakato unaoitwa na hoja yake (ambayo lazima iwe id idhini).

Hii inaruhusu michakato miwili isiyohusishwa kuunganishwa pamoja bila kutumia kitanzi wazi. Ili kusaidia katika kufuta, Tarajia uchunguzi daima uende kwenye stderr (au stdout kwa habari fulani ya kupakia na kufuta maelezo). Kwa sababu hiyo hiyo, amri ya mkalimani itasoma interactively kutoka stdin.

Kwa mfano, kipande kinachofuata kinajenga mchakato wa kuingia. Kisha huwasha mtumiaji (haukuonyeshwa), na hatimaye huunganisha pamoja. Bila shaka, mchakato wowote unaweza kubadilishwa kwa kuingia. Kwa mfano, shell, itaruhusu mtumiaji kufanya kazi bila kutoa akaunti na nenosiri.

fungua kuingilia kuingia kuingia $ spawn_id spawn ncha modem # dial nyuma nje kwa user # connect user kuingia kuingiliana -u $ kuingia

Ili kutuma pato kwa michakato nyingi, orodha kila orodha ya idhaa ya udanganyifu iliyofanywa na bendera ya kutuma. Kuingiza kwa kundi la vitambulisho vya mazao ya pato vinaweza kuamua na orodha ya idhini ya udhaifu iliyotanguliwa na bendera ya kuandika . (Wote -kutaja na -kutafuta kunaweza kuchukua orodha katika fomu sawa na -a bendera katika amri ya kutarajia , isipokuwa kwamba yoyote_spawn_id haipatikani katika kuingiliana .) Bendera zote na viungo (au chati) zinatumika kwa pembejeo hii mpaka mwingine - Bendera ya pembejeo inaonekana. Ikiwa hakuna chaguo linaonekana, -kutafsiri ina maana "-taingiza $ user_spawn_id -output". (Vivyo hivyo, na mifumo ambayo hauna- inakusudia .) Ikiwa moja ya habari ni maalum, inakaribia $ user_spawn_id. Ikiwa kipengee cha pili kinasemwa , kinazidi $ spawn_id. Vipengee vya ziada - bendera vinaweza kutajwa.

Vipengele viwili vya uingizaji vilivyochaguliwa kuwa na matokeo yao kama $ spawn_id na $ user_spawn_id (kwa nyuma). Ikiwa bendera ya kuonekana inaonekana bila bendera ya kuingiza , wahusika kutoka kwa mchakato huo hupwa.

Bendera - bendera linaingiza badala ya spawn_id ya sasa wakati hakuna bomba lingine au bendera-kutumiwa hutumiwa. A-bendera inaashiria bendera-.

Inawezekana kubadili mchakato unaoingiliana na kwa kutumia vitambulisho visivyofaa vya siri. (Vitambulisho visivyofaa vya ufafanuzi vinaelezewa katika sehemu ya amri ya kutarajia.) Vitambulisho visivyofaa vyema vinaweza kuelezewa na -i, -u, -kuta, au -kapu za bendera.

mkalimani [args]
husababisha mtumiaji awe mchanganyiko kati ya amri ya Kutarajia na Tcl. Matokeo ya kila amri huchapishwa.

Vitendo kama vile kuvunja na kuendelea na miundo ya kudhibiti (yaani, kwa , proc ) kuishi kwa kawaida. Hata hivyo kurudi husababisha mkalimani kurudi kwa mpigaji wake, wakati inter_return husababisha mkalimani ili kusababisha kurudi kwa wito wake. Kwa mfano, kama "procoo" iitwaye mkalimani ambayo kisha alifanya hatua inter_return , proc foo kurudi. Amri nyingine yoyote husababisha mkalimani kuendelea kuendelea na amri mpya.

Kwa chaguo-msingi, haraka ina vyenye mbili. Nambari ya kwanza inaelezea kina cha stack ya tathmini (yaani, mara ngapi Tcl_Eval inaitwa). Integer ya pili ni kitambulisho cha historia ya Tcl. Haraka inaweza kuweka kwa kufafanua utaratibu unaoitwa "prompt1" ambao thamani ya kurudi inakuwa ijayo haraka. Ikiwa kauli ina vikwazo vya wazi, parens, braces, au brackets, haraka ya pili (kwa default "+>") inatolewa kwenye mstari mpya. Mwisho wa pili unaweza kuweka kwa kufafanua utaratibu unaoitwa "prompt2".

Wakati wa mkalimani , hali ya kupikwa hutumiwa, hata kama mpigaji wake alikuwa akitumia mbichi mbichi.

Ikiwa stdin imefungwa, mkalimani atarudi ila iwapo-ya bendera itatumiwa, katika kesi hiyo hoja inayofuata inatakiwa.

Faili la_dogi [args] [[-a]
Ikiwa jina la faili linapatikana , faili ya logi itarekodi nakala ya kikao (kuanzia saa hiyo) katika faili. Kitambulisho cha logi kitasimama kurekodi ikiwa hakuna hoja inayotolewa. Faili lolote lolote la awali limefungwa.

Badala ya jina la faili, kitambulisho cha faili ya Tcl kinaweza kutolewa kwa kutumia bendera -open au -leaveopen . Hii ni sawa na amri ya spawn . (Angalia kuzalisha kwa maelezo zaidi.)

A - bendera vikosi vya pato vinavyoingia ambavyo vimezuiwa na amri ya log_user .

Kwa chaguo-msingi, amri ya faili ya logi inafadhili faili za zamani badala ya kuziweka, kwa urahisi wa kuwa na uwezo wa kuzima kuingia na mara nyingi katika kipindi kimoja. Ili kusonga faili, tumia bendera- isiyopendana .

Bendera- bendera husababisha faili ya logi ili kurudi maelezo ya mambo ya hivi karibuni yasiyo ya maelezo yaliyotolewa.

log_user -info | 0 | 1
Kwa chaguo-msingi, mjadala wa kutuma / kutarajia umeingia kwenye stdout (na dirisha la logi ikiwa limefunguliwa). Ukataji wa magurudumu unalemazwa na amri "log_user 0" na imerejeshwa kwa "log_user 1". Kuingia kwenye faili ya logi halibadilika.

Bendera- bendera husababisha log_user kurejea maelezo ya hivi karibuni yasiyo ya maelezo yaliyotolewa.

mechi_max [-d] [-i spawn_id] [ukubwa]
hufafanua ukubwa wa buffer (kwa bytes) kutumika ndani na kutarajia . Kwa hoja isiyo na ukubwa , ukubwa wa sasa unarudi.

Na bendera -d , ukubwa wa default unafanywa. (Default default ni 2000.) Na - bendera, ukubwa ni kuweka kwa jina lake spawn, vinginevyo ni kuweka kwa mchakato wa sasa.

overlay [- # spawn_id] [- # spawn_id] [...] mpango [wasifu]
inatekeleza " vifungo vya programu " badala ya sasa Anatarajia mpango, unaoacha. Njia ya hoja isiyo na nguvu inashikilia hyphen mbele ya jina la amri kama kama shell ya kuingilia. All spawn_ids imefungwa isipokuwa kwa wale walioitwa kama hoja. Hizi ni ramani kwenye vitambulisho vyenye jina.

Spawn_ids zimepangwa kwa vitambulisho vya faili kwa programu mpya ya kurithi. Kwa mfano, mstari wafuatayo huendesha chess na inaruhusu kudhibitiwa na mchakato wa sasa - sema, bwana chess.

overlay -0 $ spawn_id -1 $ spawn_id -2 $ spawn_id chess

Hii ni ufanisi zaidi kuliko "kuingiliana -u", hata hivyo, hutoa uwezo wa kufanya maingiliano yaliyopangwa tangu utaratibu wa Kutarajia hauwezi tena kudhibiti.

Kumbuka kwamba hakuna terminal ya kudhibiti inayotolewa. Kwa hiyo, ukitenganisha au kurejesha uingizaji wa kawaida, mipango inayofanya udhibiti wa kazi (shells, login, nk) haitatumika vizuri.

usawa [-d] [-i spawn_id] [thamani]
hufafanua kama usawa unapaswa kuhifadhiwa au kufutwa kutoka kwa pato la michakato iliyozalishwa. Ikiwa thamani ni sifuri, usawa umefutwa, vinginevyo haujachukuliwa. Kwa hoja hakuna thamani , thamani ya sasa inarudi.

Na bendera -d , thamani ya usawa wa pekee imewekwa. (Chaguo la awali ni 1, yaani, usawa haujaondolewa.) Na bendera - bendera, thamani ya usawa imetengwa kwa id idhini inayojulikana, vinginevyo imewekwa kwa mchakato wa sasa.

kuondoa_nulls [-d] [-i spawn_id] [thamani]
inafafanua kama nulls zimehifadhiwa au zimeondolewa kwenye pato la michakato iliyotokana kabla ya muundo au kuhifadhi katika kutarajia kutarajia au interact_out . Ikiwa thamani ni 1, nulls huondolewa. Ikiwa thamani ni 0, nulls haziondolewa. Kwa hoja hakuna thamani , thamani ya sasa inarudi.

Na bendera -d , thamani ya default imetumwa. (Default default ni 1, yaani, nulls ni kuondolewa.) Pamoja na - bendera, thamani ni kuweka kwa jina lake spawn, vinginevyo ni kuweka kwa mchakato wa sasa.

Iwapo au sio vilivyoondolewa, Tarajia itarekodi matoleo ya wazi kwenye logi na stdout.

tuma kamba ya [-flags]
Inatuma kamba kwa mchakato wa sasa. Kwa mfano, amri

tuma "ulimwengu wa hello"

hutuma wahusika, helloworld kwa mchakato wa sasa. (Tcl inajumuisha amri ya printf -kama (inayoitwa muundo ) ambayo inaweza kujenga masharti magumu mno.)

Wahusika hutumwa mara moja ingawa mipango yenye uingizaji wa mstari usioweza kusoma wasomaji mpaka tabia ya kurudi itapelekwa. Tabia ya kurejesha inaashiria "\ r".

Bendera - inasababisha hoja inayofuata itafasiriwe kama kamba badala ya bendera. Kamba yoyote inaweza kutanguliwa na "-" ikiwa ni kweli au inaonekana kama bendera. Hii hutoa utaratibu wa kuaminika wa kutaja masharti ya kutofautiana bila kupandishwa na wale ambao wanaonekana kama bendera kwa ajali. (Masharti yote yanayotokana na "-" yanahifadhiwa kwa chaguzi za baadaye.)

The - bendera inasema kuwa kamba inatumwa kwa spawn_id inayoitwa. Ikiwa spawn_id ni mtumiaji_spawn_id , na terminal iko katika hali ya ghafi, safu mpya za kamba zinatafsiriwa kwa kurudi-mfululizo wa mapya ili waweze kuonekana kama terminal ilikuwa katika hali iliyopikwa. Bendera -rafu inazima hii tafsiri.

The - bendera bendera hutuma wahusika null (0 bytes). Kwa default, null haitumwa. Kizingiti kinaweza kufuata-- null kuonyesha jinsi wengi null kutuma.

Bendera- kuvuka huzalisha hali ya kuvunja. Hii ina maana tu kama id ya spawn inahusu kifaa tty kufunguliwa kupitia "spawn -open". Ikiwa umeanzisha mchakato kama ncha, unapaswa kutumia mkataba wa ncha ya kuzalisha mapumziko.

Hifadhi ya bendera hutoa pato kwa kupelekwa "polepole", hivyo kuepuka hali ya kawaida ambapo kompyuta hutoa nje buffer ya pembejeo ambayo imetengenezwa kwa mwanadamu ambaye kamwe hawatakuwa na buffer sawa. Pato hili linadhibitiwa na thamani ya variable "send_slow" ambayo inachukua orodha ya vipengele viwili. Kipengele cha kwanza ni integer inayoelezea idadi ya bytes kutuma atomically. Kipengele cha pili ni namba halisi inayoelezea idadi ya sekunde ambayo kutuma atomiki lazima kutenganwe. Kwa mfano, "weka kutuma_kuja {10 .001}" ingeweza kulazimisha "kutuma-s" kutuma masharti na millisecond 1 kati ya kila wahusika 10 waliotumwa.

The -b bendera inazalisha pato kutumwa (kiasi fulani) kama vile mtu anavyoandika. Ucheleweshaji wa kibinadamu huonekana kati ya wahusika. (Algorithm inategemea usambazaji wa Weibull, na marekebisho ya kuambatana na programu hii maalum.) Pato hili linadhibitiwa na thamani ya variable "send_human" ambayo inachukua orodha ya tano. Mambo mawili ya kwanza ni muda wa kuingiliana wa wahusika kwa sekunde. Ya kwanza inatumiwa na default. Ya pili hutumiwa katika mwisho wa maneno, ili kulinganisha kusimama kwa hila ambayo hutokea mara kwa mara katika mabadiliko hayo. Kipimo cha tatu ni kipimo cha kutofautiana ambapo .1 ni kutofautiana kabisa, 1 ni ya kutofautiana kwa sababu, na 10 ni ya kutosha kabisa. Wengi ni ya 0 hadi ya chini. Vigezo viwili vya mwisho ni, kwa mtiririko huo, wakati mdogo na upeo wa kuingilia. Kima cha chini na kiwango cha juu kinatumiwa mwisho na "kipande" wakati wa mwisho. Wastani wa wastani unaweza kuwa tofauti kabisa na wastani uliopatikana kama kiwango cha chini na kiwango cha juu cha maadili ya kutosha.

Kwa mfano, amri ifuatayo huhamisha kawaida na thabiti kawaida:

tuma send_human {.1 .3 1 .05 2} tuma -h "Nina njaa. Hebu tufanye chakula cha mchana."

wakati zifuatazo zinaweza kufaa zaidi baada ya hangover:

weka kutuma_human {.4 .4 .2 .5. 100} tuma -h "usiku wa maadhimisho ya chama cha Good!"

Kumbuka kuwa makosa hayakufanyika, ingawa unaweza kuanzisha hali ya kusahihisha makosa kwa kuingiza makosa na marekebisho katika hoja ya kutuma.

Bendera kwa kutuma wahusika visivyofaa, kwa kutuma mapumziko, kwa kulazimisha pato la polepole na kwa pato la mtindo wa kibinadamu ni pande zote. Ni moja tu ya mwisho itatumika. Zaidi ya hayo, hakuna hoja ya kamba inaweza kuelezwa na bendera kwa kutuma wahusika au mapumziko ya null.

Ni wazo nzuri kutangulia kutuma kwanza kwa mchakato kwa kutarajia . wanatarajia kusubiri mchakato kuanza, wakati kutuma hawezi. Hasa, ikiwa kutuma kwa kwanza kumalizika kabla mchakato kuanza, unatumia hatari ya kuwa na data yako imepuuzwa. Katika hali ambapo mipango ya maingiliano haitoi haraka haraka, unaweza kutanguliza kutuma kwa kuchelewa kama ilivyo katika:

# Ili kuepuka kutoa maelezo ya hackers juu ya jinsi ya kuvunja, # mfumo huu hauingii nenosiri nje. # Kusubiri kwa sekunde 5 kwa kukamilisha kuzaa telnet sana.secure.gov usingizi 5 kutuma password \ r

exp_send ni alias kwa kutuma. Ikiwa unatumia Expectk au tofauti nyingine ya Kutarajia katika mazingira ya Tk, kutuma kunafafanuliwa na Tk kwa kusudi tofauti kabisa. exp_send hutolewa kwa utangamano kati ya mazingira. Vidokezo vilivyofanana vinatolewa kwa amri nyingine za kutuma za Kutarajia.

tumaza-tumaa [-shagi]
ni kama kutuma , isipokuwa kuwa pato inatumwa kwa stderr badala ya mchakato wa sasa.

tuma_namba [-] kamba
ni kama kutuma , isipokuwa kuwa kamba imetumwa kwenye faili ya logi (tazama logi_file .) Majadiliano yanapuuzwa ikiwa hakuna faili ya logi iliyo wazi.

Tuma_shari [-shagi] kamba
ni kama kutuma , ila pato linatumwa kwa / dev / tty badala ya mchakato wa sasa.

tumaa ya kutuma [-shagi]
ni kama kutuma , ila pato linatumwa kwenye stdout badala ya mchakato wa sasa.

sekunde za usingizi
husababisha script kulala kwa idadi iliyotolewa ya sekunde. Pili inaweza kuwa nambari ya mwisho. Kuzuia (na matukio ya Tk ikiwa unatumia Expectk) hutumiwa wakati Unatarajia kulala.

kuzalisha mpango [wa kigeni] [args]
hujenga mchakato mpya unaoendesha " args ya programu ". Stdin yake, stdout na stderr huunganishwa na Kutarajia, ili waweze kusoma na kuandikwa na amri zingine za Kutarajia . Uunganisho umevunjwa na karibu au ikiwa mchakato wenyewe hufunga watambuzi wa faili yoyote.

Wakati utaratibu unapoanza kwa kuzalishwa , spawn_id ya kutofautiana imewekwa kwa maelezo ya kuelezea kwenye mchakato huo . Mchakato unaoelezwa na spawn_id unachukuliwa kama " mchakato wa sasa ". spawn_id inaweza kusoma au kuandikwa, kwa kweli kutoa udhibiti wa kazi.

user_spawn_id ni variable ya kimataifa iliyo na descriptor ambayo inahusu mtumiaji. Kwa mfano, wakati spawn_id imewekwa kwa thamani hii, tumaini tabia kama matarajio ya kutarajia .

. Error_spawn_id ni variable ya kimataifa iliyo na maelezo ambayo inahusu kosa la kawaida. Kwa mfano, wakati spawn_id imewekwa kwa thamani hii, tuma utende kama send_error .

tty_spawn_id ni variable ya kimataifa inayojumuisha descriptor ambayo inahusu / dev / tty. Ikiwa / dev / tty haipo (kama vile cron, at, au batch script), basi tty_spawn_id haijafafanuliwa. Hii inaweza kupimwa kama:

kama {[info vars tty_spawn_id]} {# / dev / tty ipo} mwingine {# / dev / tty haipo # labda katika cron, batch, au script}

spawn inarudi id ya mchakato wa UNIX. Ikiwa hakuna mchakato unaotokana, 0 inarudi. Kipengee spawn_out (mtumwa, jina) imewekwa kwa jina la kifaa cha mtumwa wa pty.

Kwa chaguo-msingi, hutaja jina la amri na hoja. Bendera -noecho inachaacha kuacha kufanya hivyo.

Bendera -console husababisha pato la console ili lielekezwe kwenye mchakato uliozalishwa. Hii sio mkono kwenye mifumo yote.

Ndani, hutumia pty, kuanzishwa kwa njia sawa kama mtumiaji. Hii imeanzishwa zaidi ili mipangilio yote "ime" (kwa mujibu wa stty (1)). Ikiwa stty_init inayofafanuliwa inaelezewa, inafasiriwa kwa mtindo wa hoja za dhati kama udhibiti zaidi. Kwa mfano, "kuweka stty_init ghafi" itasababisha vituo vingi vinavyotokana na taratibu kuanza katika hali ya ghafi. -nottycopy inakwenda initialization kulingana na tty mtumiaji. -nottyinit inaruka safu ya " kulia ".

Kwa kawaida, kuvua huchukua muda mdogo wa kutekeleza. Ikiwa unatambua kupungua kwa muda mrefu, labda hukutana na ptys ambazo zimeunganishwa. Vipimo kadhaa vinaendeshwa kwenye ptys ili kuepuka kuingiliwa na taratibu za errant. (Hizi huchukua sekunde 10 kwa pty iliyowekwa.) Mbio unatarajia na chaguo -d itaonyesha ikiwa Anatarajia kukutana na ptys nyingi katika majimbo isiyo ya kawaida. Ikiwa huwezi kuua michakato ambayo ptys hizi ni masharti, matumizi yako tu inaweza kuwa kuanza upya.

Ikiwa programu haiwezi kufanikiwa mafanikio kwa sababu exec (2) inashindwa (kwa mfano wakati programu haipo), ujumbe wa kosa utarejeshwa na amri inayofuata au kutarajia amri kama mpango ulikimbia na kuzalisha ujumbe wa makosa kama pato. Tabia hii ni matokeo ya asili ya utekelezaji wa spawn . Ndani, panda za mchanga, baada ya mchakato uliozalishwa hauna njia ya kuwasiliana na awali Kutarajia mchakato isipokuwa kwa mawasiliano kupitia spawn_id.

Bendera -openi husababisha hoja inayofuata itafsiriwe kama kitambulisho cha faili ya Tcl (yaani, kurudi kwa wazi .) Idhini ya kinga inaweza kutumika kama ilivyokuwa mchakato uliozalishwa. (Kitambulisho cha faili haipaswi kutumiwa tena.) Hii inakuwezesha kutibu vifaa, faili, na mabomba ghafi kama utaratibu uliozalishwa bila kutumia pty. 0 inarudi ili kuonyesha hakuna mchakato unaohusishwa. Wakati uunganisho kwenye mchakato uliozalishwa umefungwa, ndivyo vile kitambulisho cha faili Tcl. Bendera- laaveopen ni sawa na- kutolewa isipokuwa kwamba -leaveopen inasababisha kitambulisho cha faili kiweke kufunguliwa hata baada ya id idhini imefungwa.

Bendera- tupu husababisha pty kufunguliwe lakini hakuna mchakato uliozalishwa. 0 inarudi ili kuonyesha hakuna mchakato unaohusishwa. Spawn_id imewekwa kama kawaida.

The spawn_out variable (mtumwa, fd) imewekwa kwenye kitambulisho cha faili kinachohusiana na mtumwa wa pty. Inaweza kufungwa kwa kutumia "karibu-lala".

Bendera -ignore huashiria ishara ambayo haipatikani katika mchakato uliozalishwa. Vinginevyo, ishara kupata tabia ya default. Ishara zinajulikana kama amri ya mtego , isipokuwa kuwa ishara kila inahitaji bendera tofauti.

kiwango cha mzigo
husababisha kauli zifuatazo zichapishwe kabla ya kutekelezwa. (Tcl ya ufuatiliaji amri hubadilisha vigezo.) Ngazi inaonyesha jinsi mbali chini katika stack ya simu ya kufuatilia. Kwa mfano, amri ifuatayo inatarajia wakati wa kufuatilia viwango vya kwanza vya simu, lakini hakuna chini ya hapo.

wanatarajia -c "strace 4" script.exp

Bendera ya bendera husababishia kurudi maelezo ya hivi karibuni yasiyo ya maelezo yaliyotolewa.

args ya stty
mabadiliko ya njia za terminal vile vile kwa amri ya nje ya stty.

Kwa default, kituo cha kudhibiti kinapatikana. Vipindi vingine vinaweza kupatikana kwa kutumia programu "Maombi ya kurejesha hali kama matokeo ya amri. Ikiwa hakuna hali iliyoombwa na kituo cha kudhibiti kinapatikana, hali ya awali ya sifa za ghafi na za echo zinarudiwa fomu ambayo inaweza baadaye kuwa kutumika kwa amri.

Kwa mfano, hoja za kijani au zilizopikwa zinaweka terminal kwenye hali ya mbichi. Mazungumzo -raw au kupikwa kuweka terminal katika mode kupikwa. Majadiliano hayo na -echo kuweka terminal katika echo na noecho mode kwa mtiririko huo.

Mfano wafuatayo unaonyesha jinsi ya kuzuia wakati wa kufuta. Hii inaweza kutumika katika scripts vingine-moja kwa moja ili kuepuka kuingiza nywila ndani yao. (Angalia majadiliano zaidi juu ya hili chini ya MAHUSHO YA MAFUNZO hapa chini.)

stty -echo send_user "Neno la siri:" tumaini-tuma "(. *) \ n" kuweka nenosiri $ expect_out (1, kamba) echo stty

mifuko ya mfumo
hutoa args kwa sh (1) kama pembejeo, kama ilivyokuwa imewekwa kama amri kutoka kwa terminal. Anatarajia wanasubiri mpaka shell ikomesha. Hali ya kurudi kutoka sh inaendeshwa kwa njia ile ile ambayo inafanya kazi ya kurudi hali yake.

Tofauti na kutekeleza ambayo hurekebisha stdin na stdout kwenye script, mfumo haufanyi upya tena (isipokuwa ile iliyoonyeshwa na kamba yenyewe). Kwa hiyo, inawezekana kutumia programu ambazo zinapaswa kuzungumza moja kwa moja na / dev / tty. Kwa sababu hiyo hiyo, matokeo ya mfumo hayakuandikwa kwenye logi.

timestamp [args]
inarudi timestamp. Kwa hoja hakuna, idadi ya sekunde tangu wakati huo unarudi.

Bendera -format inatanguliza kamba ambayo inarudi lakini kwa mbadala zilizofanywa kulingana na sheria za POSIX za strftime. Kwa mfano% a inabadilishwa na jina la wiki ya machapisho (yaani, Sat). Wengine ni:

% jina la wiki ya machapisho% Jina kamili la siku ya wiki% b jina la mwezi uliofupishwa% B kamili ya jina la mwezi% c wakati wa tarehe kama: Tarehe Oktoba 6 11:45:56 1993% d siku ya mwezi (01-31% H saa (00-23)% I saa (01-12)% j siku (001-366)% m mwezi (01-12)% M dakika (00-59)% p am au jioni% S pili (00-61) % u siku (1-7, Jumatatu ni siku ya kwanza ya wiki)% U wiki (00-53, Jumapili ya kwanza ni siku ya kwanza ya wiki moja)% V wiki (01-53, style ISO 8601)% w siku (0- 6)% W wiki (00-53, Jumatatu ya kwanza ni siku ya kwanza ya wiki moja)% x wakati wa tarehe kama: Wed Oktoba 6 1993% X wakati kama: 23:59:59% y mwaka (00-99) % Y kama ilivyokuwa: 1993% Z wakatizone (au hakuna kitu kama haiwezekani) %% ishara ya asilimia tupu

Nyingine specifikationer haijulikani. Wahusika wengine watapitishwa bila kutafakari. Eneo la C pekee linaungwa mkono.

The - bendera bendera huanzisha idadi ya sekunde tangu wakati wa kutumiwa kama chanzo cha kuunda. Vinginevyo, wakati wa sasa unatumika.

Ganduku ya -gmt inasababisha matokeo ya timestamp kutumia muda wa GMT . Kwa bendera hakuna, wakati wa wakati wa ndani unatumiwa.

mtego [[amri] ishara]
husababisha amri iliyotolewa ya kutekelezwa juu ya kupokea baadaye ya ishara zilizopewa. Amri inafanywa katika wigo wa kimataifa. Ikiwa amri haipo, hatua ya ishara inarudi. Ikiwa amri ni kamba SIG_IGN, ishara hazipuuziwi. Ikiwa amri ni kamba SIG_DFL, ishara ni matokeo ya mfumo wa default. ishara ni ama ishara moja au orodha ya ishara. Ishara zinaweza kuhesabiwa kwa nambari au kwa mfano kama kwa ishara (3). Kiambishi cha "SIG" kinaweza kufutwa.

Ukiwa na hoja (au mkazo wa-hoja), mtego unarudi idadi ya ishara ya amri ya mtego sasa inayotumiwa.

Bendera ya -code hutumia msimbo wa kurudi wa amri badala ya chombo chochote Tcl kilikuwa kinakaribia kurudi wakati amri ilianza kuanza.

Bendera- inpta husababisha amri ya kupimwa kwa kutumia mkalimani anafanya kazi wakati amri ilianza kuendesha badala ya mtego ulipotangazwa.

Bendera-jina husababisha amri ya mtego kurudi jina la ishara ya amri ya mtego sasa inayofanywa.

Bendera- bendera husababisha mtego amri kurudi idadi kubwa ya ishara ambayo inaweza kuweka.

Kwa mfano, amri "mtego {mtumaji wa" Ouch! "} SIGINT" itachapisha "Ouch!" kila wakati mtumiaji anaendelea ^ C.

Kwa default, SIGINT (ambayo kwa kawaida inaweza kuzalishwa na kuendeleza ^ C) na SIGTERM kusababisha Kutarajia kuondoka. Hii ni kutokana na mtego unaofuata, uliowekwa na default wakati Anatarajia kuanza.

Toka ya mtego {SIGINT SIGTERM}

Ikiwa unatumia bendera -D ili kuanza debugger, SIGINT inafanywa upya ili kuanza mtangazaji wa maingiliano. Hii ni kutokana na mtego wafuatayo:

mtego {exp_debug 1} SIGINT

Mtego wa debugger unaweza kubadilishwa kwa kuweka mazingira ya kutofautiana EXPECT_DEBUG_INIT hadi amri mpya ya mtego.

Unaweza, kwa hakika, kuzidisha hizi mbili tu kwa kuongeza amri za mtego kwenye script yako. Hasa, ikiwa una "mtego wako kutoka SIGINT", hii itapunguza mtego wa debugger. Hii ni muhimu kama unataka kuzuia watumiaji kutoka kwa kupata debugger kabisa.

Ikiwa unataka kufafanua mtego wako mwenyewe kwenye SIGINT lakini bado mtego kwa debugger wakati unaendesha, tumia:

ikiwa {! [exp_debug]} {mtego wa siri SIGINT}

Vinginevyo, unaweza mtego kwa debugger kutumia ishara nyingine.

Mtego hautakuwezesha uendelee hatua kwa SIGALRM kama hii inatumiwa ndani kwa Kutarajia . Amri ya kukatwa huweka SIGALRM kwa SIG_IGN (kupuuza). Unaweza kurejesha hii kwa muda mrefu kama unalemaza wakati wa maagizo ya baadaye ya spawn.

Angalia ishara (3) kwa maelezo zaidi.

subiri [args]
kuchelewesha hadi mchakato uliozalishwa (au mchakato wa sasa ikiwa hakuna jina lake) hukoma.

kusubiri kawaida kurudi orodha ya integers nne. Nambari ya kwanza ni pid ya mchakato uliotarajiwa. Nambari ya pili ni id idhini inayofanana. Nambari ya tatu ni -1 ikiwa kosa la mfumo wa uendeshaji ilitokea, au 0 vinginevyo. Ikiwa integer ya tatu ilikuwa 0, nambari ya nne ni hali iliyorejeshwa na mchakato uliozalishwa. Ikiwa integer ya tatu ilikuwa -1, nambari ya nne ni thamani ya errno iliyowekwa na mfumo wa uendeshaji. Msimbo wa makosa ya kimataifa duniani pia umewekwa.

Mambo ya ziada yanaweza kuonekana mwishoni mwa thamani ya kurudi kutoka kusubiri . Kipengele cha tano cha hiari kinatambua darasa la habari. Hivi sasa, thamani pekee inayowezekana kwa kipengele hiki ni CHILDKILLED katika hali ipi maadili mawili ijayo ni jina la ishara ya mtindo wa C na maelezo mafupi ya maelezo.

The - bendera inasema mchakato wa kusubiri sambamba na spawn_id inayoitwa (sio id mchakato ). Ndani ya mfanyabiashara wa SIGCHLD, inawezekana kusubiri mchakato wowote uliozalishwa kwa kutumia id ya spawn -1.

Bendera ya-- nowait inasababisha kusubiri kurudi mara moja na dalili ya kusubiri kwa mafanikio. Wakati mchakato utatoka (baadaye), utaondoweka moja kwa moja bila ya haja ya kusubiri wazi.

Amri ya kusubiri inaweza pia kutumiwa kusubiri mchakato uliowekwa kwa kutumia hoja "-i -1". Tofauti na matumizi yake na taratibu zilizozalishwa, amri hii inaweza kutekelezwa wakati wowote. Hakuna udhibiti juu ya mchakato unaovunwa. Hata hivyo, thamani ya kurudi inaweza kuchunguzwa kwa id ya mchakato .

MAHALI

Anatarajia moja kwa moja anajua kuhusu maktaba mawili yaliyojengwa kwa Kutarajia maandiko. Hizi hufafanuliwa na directories zilizoitwa katika vigezo exp_library na exp_exec_library. Wote ni maana ya kuwa na faili za matumizi ambayo inaweza kutumika na maandiko mengine.

exp_library ina faili za usanifu-kujitegemea. exp_exec_library ina faili za usanifu-tegemezi. Kulingana na mfumo wako, waandishi wote wawili wanaweza kuwa tupu kabisa. Kuwepo kwa faili $ exp_exec_library / paka-buffers inaelezea kama buffers yako / bin / cat kwa default.

KIJIFU-KIFINDA

Ufafanuzi wa vgrind unapatikana kwa kuvutia-kutazamia maandiko. Kwa kuzingatia ufafanuzi wa vgrind unaotolewa na Kutarajia usambazaji umewekwa vizuri, unaweza kuitumia kama:

vgrind -lexpect faili

Mifano

Wengi hawana dhahiri jinsi ya kuweka kila kitu pamoja na ukurasa wa mtu unaelezea. Ninakuhimiza kusoma na kujaribu mifano katika saraka ya mfano ya Kutarajia usambazaji. Baadhi yao ni programu halisi. Wengine ni mfano tu wa mbinu fulani, na bila shaka, wanandoa ni hacks tu ya haraka. Faili ya INSTALL ina maelezo ya haraka ya programu hizi.

Kutarajia karatasi (angalia pia) pia ni muhimu. Ingawa majarida mengine hutumia syntax inalingana na matoleo ya awali ya Kutarajia, maadili ya kuambatana bado yanafaa na huenda kwa undani zaidi zaidi kuliko ukurasa wa mtu huyu.

CAVEATS

Vipengee vinaweza kuchanganya na majina ya amri ya Kutarajia. Kwa mfano, kutuma kunafafanuliwa na Tk kwa kusudi tofauti kabisa. Kwa sababu hii, amri nyingi zinatarajia zinapatikana pia kama "exp_XXXX". Maagizo na vigezo vinavyotokana na "exp", "inter", "spawn", na "mwisho" hawana vikwazo. Tumia majina ya amri ya kupanuliwa ikiwa unahitaji utangamano huu kati ya mazingira.

Anatarajia inachukua mtazamo wa hiari wa kupendeza. Hasa, vigezo vilivyosomewa na amri maalum ya Kutarajia mpango utafutwa kwanza kutoka kwa wigo wa ndani, na ikiwa haipatikani, katika upeo wa kimataifa. Kwa mfano, hii inakataza haja ya kuweka "muda wa kimataifa" katika utaratibu wowote unaoandika unatumia. Kwa upande mwingine, vigezo vilivyoandikwa ni daima katika wigo wa ndani (isipokuwa amri ya "kimataifa" imetolewa). Tatizo la kawaida kwa sababu hii ni wakati spawn inafanywa katika utaratibu. Nje ya utaratibu, spawn_id haipo tena, hivyo mchakato uliozalishwa haupatikani tena kwa sababu tu ya kupigwa. Ongeza "spawn_id ya kimataifa" kwa utaratibu kama huo.

Ikiwa huwezi kuwawezesha uwezo wa multispawning (yaani, mfumo wako hauunga mkono wala kuchagua (BSD *. *), Uchaguzi (SVR> 2), wala kitu sawa), Kutarajia itaweza tu kudhibiti mchakato mmoja kwa wakati mmoja. Katika kesi hii, usijaribu kuweka spawn_id , wala usitumie michakato kupitia utekelezaji wakati utaratibu uliozalishwa unafanyika . Zaidi ya hayo, huwezi kutarajia kutoka kwa michakato mbalimbali (ikiwa ni pamoja na mtumiaji kama moja) kwa wakati mmoja.

Vigezo vya terminal inaweza kuwa na athari kubwa kwenye maandiko. Kwa mfano, kama script imeandikwa ili kuomba, itastahili ikiwa inajitokeza imezimwa. Kwa sababu hii, Jitahidi vigezo vya upeo wa upeo kwa default. Kwa bahati mbaya, hii inaweza kufanya mambo yasiyofaa kwa programu nyingine. Kwa mfano, shell ya emacs inataka kubadili ramani ya "kawaida": vichwa vya habari hupata ramani kwa majarida mapya badala ya vifurushi vya kurudi, na kukimbia kunazima. Hii inaruhusu mtu kutumia emacs kuhariri mstari wa pembejeo. Kwa bahati mbaya, Kutarajia hawezi kufikiria hili.

Unaweza kuomba kwamba Ingejaribu kuhariri mipangilio yake ya default ya vigezo vya terminal, lakini lazima uwe makini sana unapoandika maandiko kwa mazingira kama hayo. Katika kesi ya emacs, kuepuka kutegemea mambo kama echoing na mwisho wa-line mappings.

Amri zilizokubaliana na hoja zilizounganishwa kwenye orodha moja ( matarajio ya kutarajia na kuingiliana ) kutumia heuristic kuamua kama orodha ni kweli hoja moja au wengi. Ya heuristic inaweza kushindwa tu katika kesi wakati orodha kweli inawakilisha hoja moja ambayo ina nyingi iliyoingia \ n na wahusika yasiyo ya whitespace kati yao. Hii inaonekana haiwezekani, hata hivyo hoja "-nobrace" inaweza kutumika kulazimisha hoja moja inayoweza kushughulikiwa kama hoja moja. Hii inaweza kufikiriwa kutumiwa na mashine inayotokana na Kutarajia kanuni. Vile vile, -patie nguvu ya hoja moja ya kushughulikia kama ruwaza nyingi / vitendo.

BUGS

Ilikuwa kweli kumjaribu jina la "ngono" (kwa "Smart EXec" au "Tuma-Mtazamo"), lakini akili nzuri (au labda Puritanism tu) imeshinda.

Katika mifumo fulani, wakati shell inapozalishwa, inalalamika juu ya kutoweza kufikia tty lakini inaendesha hata hivyo. Hii inamaanisha mfumo wako una utaratibu wa kupata udhibiti ambao Unatarajia haujui. Tafadhali tafuta ni nini, na upejee tena habari hii.

Ultrix 4.1 (angalau matoleo ya hivi karibuni hapa) huchukua muda wa juu ya 1000000 kuwa sawa na 0.

Digital UNIX 4.0A (na labda matoleo mengine) anakataa kutenga ptys ikiwa unafafanua msimamizi wa SIGCHLD. Tazama ukurasa wa ruzuku kwa maelezo zaidi.

IRIX 6.0 haina kushughulikia vyeti vya pty kwa usahihi ili kama Ikizotarajiwa majaribio ya kutenga pty awali kutumika na mtu mwingine, inashindwa. Badilisha kwenye IRIX 6.1.

Telnet (kuthibitishwa tu chini ya SunOS 4.1.2) hutegemea kama TERM haijawekwa. Hili ni tatizo chini ya cron, na katika maandiko ya cgi, ambayo hayatafafanuzi TERM. Kwa hivyo, lazima uiweka wazi - kwa aina gani ambayo haifai kuwa na maana. Inapaswa tu kuweka kwenye kitu! Yafuatayo inafaa kwa kesi nyingi.

weka env (TERM) vt100

Kidokezo (kuthibitishwa tu chini ya BSDI BSD / OS 3.1 i386) hutegemea kama SHELL na HOME haziwekwa. Hili ni tatizo chini ya cron , na katika maandiko ya cgi , ambayo hayatafafanuzi vigezo hivi vya mazingira. Hivyo, lazima uwaweze wazi - kwa aina gani ambayo haifai kwa kawaida. Inapaswa tu kuweka kwenye kitu! Yafuatayo inafaa kwa kesi nyingi.

Weka (SHELL) / bin / sh kuweka env (HOME) / usr / mitaa / bin

Baadhi ya utekelezaji wa ptys imeundwa ili kernel inapoteze pato lolote lisilojifunza baada ya sekunde 10 hadi 15 (namba halisi ni tegemezi ya utekelezaji) baada ya mchakato kufunga maelezo ya faili. Hivyo Tarajia mipango kama vile

spawn tarehe kulala 20 kutarajia

itashindwa. Ili kuepuka hili, piga programu zisizo na maingiliano na kutekeleza badala ya kuzalisha . Wakati hali kama hizo zinafikiriwa, kwa kawaida sijawahi kukutana na hali ambayo matokeo ya mwisho ya programu ya kweli ya maingiliano yatapotea kutokana na tabia hii.

Kwa upande mwingine, Cray ptys UNICOS kupoteza pato yoyote bila kusoma mara baada ya mchakato imefungwa descriptor faili. Nimesema hii kwa Kupotea na wanafanya kazi ya kurekebisha.

Wakati mwingine kuchelewa huhitajika kati ya haraka na jibu, kama vile interface ya tty inabadilisha mipangilio ya UART au viwango vya baud vinavyolingana kwa kutafuta bits kuanza / kuacha. Kawaida, hii yote inahitajika kulala kwa pili au mbili. Mbinu zaidi imara ni kujaribu tena mpaka vifaa vya tayari kupokea pembejeo. Mfano wafuatayo hutumia mbinu zote mbili:

tuma "kasi 9600 \ r"; usingie 1 unatarajia {timeout {kutuma "\ r"; exp_continue} $ haraka}

Msimbo wa mtego hautafanyi kazi na amri yoyote iliyoketi katika kitanzi cha tukio la Tcl, kama vile usingizi. Tatizo ni kwamba katika kitanzi cha tukio, Tcl inakataza nambari za kurudi kutoka kwa washikaji wa tukio la async. Kazi ni kuweka bendera katika msimbo wa mtego. Kisha angalia bendera mara baada ya amri (yaani, kulala).

Amri ya kutarajia-ya kurudi hupuuza-wakati wa hoja na haujui dhana ya muda mrefu kwa ujumla.

& # 34; MAHUSHO YA KUTOKA & # 34;

Kuna mambo kadhaa kuhusu Kutarajia ambayo inaweza kuwa yasiyo ya angavu. Sehemu hii inajaribu kushughulikia baadhi ya mambo haya kwa mapendekezo kadhaa.

Tatizo la kawaida la kutarajia ni jinsi ya kutambua pendekezo la shell. Kwa kuwa hizi zinajitambulisha tofauti na watu tofauti na makundi mbalimbali, huenda ikawa vigumu kutengeneza rlogin bila kujali haraka. Mkataba wa busara ni kuwa na watumiaji kuhifadhi dhana ya kawaida inayoelezea haraka yao (hasa, mwisho wake) katika variable variable EXPECT_PROMPT. Kanuni kama yafuatayo inaweza kutumika. Ikiwa EXPECT_PROMPT haipo, msimbo bado una fursa nzuri ya kufanya kazi kwa usahihi.

kuweka haraka "(% | # | \\ $) $"; # haraka haraka catch {kuweka haraka $ env (EXPECT_PROMPT)} kutarajia-$ $ haraka

Ninawahimiza kuandika mwelekeo wa kutarajia unaojumuisha mwisho wa chochote unachotarajia kuona. Hii inepuka uwezekano wa kujibu swali kabla ya kuona kitu kote. Kwa kuongeza, wakati unaweza kuwa na uwezo wa kujibu maswali kabla ya kuwaona kabisa, ukichukua jibu mapema, jibu lako linaweza kuonekana tena katikati ya swali. Kwa maneno mengine, mazungumzo yanayotokana yatakuwa sahihi lakini angalia yaliyopigwa.

Vidokezo vingi vinajumuisha tabia ya mwisho mwishoni. Kwa mfano, haraka kutoka kwa ftp ni 'f', 't', 'p', '>' na. Ili kufanana na haraka hii, lazima uingie akaunti kwa kila mmoja wa wahusika hawa. Ni kosa la kawaida si kuingiza tupu. Weka tupu kwa wazi.

Ikiwa unatumia muundo wa fomu ya X *, * itafanana na pato zote zilizopatikana kutoka mwishoni mwa X hadi kitu cha mwisho kilichopokelewa. Hii inaonekana intuitive lakini inaweza kuchanganyikiwa kwa sababu maneno "mwisho ya kupokea" yanaweza kutofautiana kulingana na kasi ya kompyuta na usindikaji wa I / O wote kwa kernel na dereva wa kifaa.

Hasa, wanadamu huwa na kuona pato la mpango unaofika katika chunks kubwa (atomiki) wakati kwa kweli programu nyingi zinazalisha pato moja kwa wakati mmoja. Kufikiri hii ni kesi, * kwa mfano wa aya iliyotangulia inaweza kulinganisha mwisho wa mstari wa sasa hata ingawa inaonekana kuwa zaidi, kwa sababu wakati wa mechi hiyo ndiyo matokeo yote yaliyopokelewa.

wanatarajia kuwa hakuna njia ya kujua kwamba pato la ziada linakuja isipokuwa ruwaza yako hasa huihesabu.

Hata kutegemea uboreshaji wa mstari usiofaa. Sio tu mipango ya kufanya mara kwa mara kufanya ahadi juu ya aina ya mateso wanayofanya, lakini mfumo wa uharibifu unaweza kuvunja mstari wa pato ili mstari uvunjaji kwenye sehemu inayoonekana kuwa nasibu. Hivyo, kama unaweza kueleza wahusika wa mwisho wa haraka wakati wa kuandika ruwaza, ni busara kufanya hivyo.

Ikiwa unasubiri mfano katika pato la mwisho la programu na mpango hutoa kitu kingine badala yake, hutaweza kuchunguza kuwa na neno muhimu la muda . Sababu ni kwamba kutarajia sio kwenda wakati - badala yake utapata dalili. Tumia hiyo badala yake. Hata bora, tumia zote mbili. Njia hiyo ikiwa mstari huo unakuzunguka, hutahitaji kuhariri mstari yenyewe.

Waandishi wa habari mara nyingi hubadilishwa kwenye usafiri wa usafirishaji, ufuatiliaji wa mstari wakati wa pato kwa dereva wa terminal. Kwa hivyo, ikiwa unataka mfano unaozingatia mistari miwili, kutoka, sema, printf ("foo \ nbar"), unapaswa kutumia mfano "foo \ r \ nbar".

Tafsiri kama hiyo hutokea wakati wa kusoma kutoka kwa mtumiaji, kupitia matarajio_taka . Katika kesi hii, wakati wa kushinikiza kurudi, itatafsiriwa kwa mstari mpya. Ikiwa unatarajia basi hupita kwenye mpango unaoweka terminal yake kwa mode ghafi (kama vile telnet), kutakuwa na tatizo, kama mpango unatarajia kurudi kweli. (Mipango fulani ni kweli kusamehe kwa kuwa wao kutafsiri moja kwa moja majarida ya kurudi, lakini wengi hawana.) Kwa bahati mbaya, hakuna njia ya kujua kwamba mpango kuweka terminal yake katika mode ghafi.

Badala ya kuchukua nafasi ya kutafsiri majarida na kurudi, suluhisho ni kutumia amri "stty ghafi", ambayo itaacha tafsiri. Kumbuka, hata hivyo, kwamba hii ina maana kwamba huwezi kupata vipengee vya kupikwa kwa mstari.

kuingiliana kikamilifu kuweka sekunde yako kwa mode ghafi ili tatizo hili lisitoke.

Ni mara nyingi muhimu kuhifadhi fungulasiri (au maelezo mengine ya kibinafsi) katika Kutarajia maandiko. Hii haipendekezi tangu kitu chochote kinachohifadhiwa kwenye kompyuta kinaweza kupatikana na mtu yeyote. Hivyo, kuingilia kati kwa manenosiri kutoka kwa script ni wazo lenye akili zaidi kuliko kuziweka kwao halisi. Hata hivyo, wakati mwingine kuingiza vile ni uwezekano tu.

Kwa bahati mbaya, mfumo wa faili wa UNIX hauna njia ya moja kwa moja ya kuunda scripts ambazo zinatekelezwa lakini haziwezi kusoma. Mfumo ambao unasaidia scripts za segid shell zinaweza kufanana sawa na ifuatavyo:

Unda Matarajio ya script (ambayo ina data ya siri) kama kawaida. Fanya ruhusa yake kuwa 750 (-rwxr-x ---) na inayomilikiwa na kikundi kinachoaminika, yaani, kikundi kinachoruhusiwa kuisoma. Ikiwa ni lazima, tengeneza kikundi kipya kwa kusudi hili. Halafu, fungua script / bin / sh na ruhusa 2751 (-rwxr-s - x) inayomilikiwa na kundi moja kama hapo awali.

Matokeo ni script ambayo inaweza kutekelezwa (na kusoma) na mtu yeyote. Inapotakiwa, inaendesha Matarajio ya script.

& # 34; tazama pia & # 34;

Tcl (3), zisizotarajiwa (3)
"Kuchunguza Kutarajia: Kitengo cha Tcl-Basic Based Automating Programs Interactive" na Don Libes, pp. 602, ISBN 1-56592-090-2, O'Reilly na Associates, 1995.
"wanatarajia: Kuponya Maadili Yanayoweza Kudhibitiwa" na Don Libes, Mkutano wa Summer 1990 Mkutano wa USENIX, Anaheim, California, Juni 11-15, 1990.
"Kutumia Kutarajia Kuendesha Kazi za Utawala wa Mfumo" na Don Libes, Mahakama ya Mkutano wa Utawala wa Mfumo wa Usanifu wa USENIX wa 1990, Colorado Springs, Colorado, Oktoba 17-19, 1990.
"Tcl: Lugha ya Amri iliyoingizwa" na John Ousterhout, Mkutano wa Majira ya baridi 1990 Mkutano wa USENIX, Washington, DC, Januari 22-26, 1990 .. "Kutarajia: Scripts for Controling Interactive Programs" na Don Libes, Computing Systems , Vol. 4, No. 2, Maandishi ya Vyombo vya Habari vya Chuo Kikuu cha California, Novemba 1991 .. "Mipango ya Maingiliano ya Upimaji wa Ukandamizaji na Utekelezaji", na Don Libes, Mkutano wa Majira ya Mkutano wa USENIX 1992, pp. 135-144, San Antonio, TX, Juni 12-15, 1992 .. "Kibitz - Kuunganisha Programu Zingi za Maingiliano Pamoja", na Don Libes, Software - Mazoezi na Uzoefu, John Wiley & Wanaume, West Sussex, England, Vol.

23, No. 5, Mei, 1993 .. "Msaidizi wa Matumizi ya Tcl", na Don Libes, Mahakamani ya Warsha ya Tcl / Tk ya 1993, Berkeley, CA, Juni 10-11, 1993.

Mwandishi

Don Libes, Taasisi ya Taifa ya Viwango na Teknolojia

MAFUNZO

Shukrani kwa John Ousterhout kwa Tcl, na Scott Paisley kwa msukumo. Shukrani kwa Rob Savoye kwa kutarajia msimbo wa autoconfiguration.

Faili la HISTORY linaandika mengi ya mageuzi ya kutarajia . Inafanya kusoma kusisimua na inaweza kukupa ufahamu zaidi wa programu hii. Shukrani kwa watu waliotajwa ndani yake ambao walinipeleka kurekebisha mdudu na kutoa msaada mwingine.

Kubuni na utekelezaji wa Kutarajia kulipwa kwa sehemu na serikali ya Marekani na kwa hiyo ni katika uwanja wa umma. Hata hivyo mwandishi na NIST wangependa mkopo kama mpango huu na nyaraka au sehemu zake zinazotumiwa.