Linux / Unix Command күтүлөт

Талап бир скрипт боюнча башка өз ара программалар менен сүйлөшүп программа. скрипт кийин күтүш программасынын күтүүгө болот билет жана туура жооп болушу керек. An чечмеленет тил диалогун багыттай бутактануу жана жогорку даражалуу башкаруу структураларын камсыз кылат. Мындан тышкары, колдонуучу менен көзөмөлгө алып, андан кийин ариби үчүн көзөмөлдү кайтаруу, түздөн-түз каалаган кезде баарлаша аласыз.

Expectk күтүлөт жана Tk аралашмасы болуп саналат. Бул жөн эле талап сыяктуу болушат жана салттуу билимдер, анын каалоо. Талап да TCL жок С же С ++ түздөн-түз колдонууга болот.

аты-жөнү, "күтүлөт" жөнөтүү идеясына келген / UUCP, Кермит жана башка модем башкаруу программалары менен жайылтса тизилишин күтүшөт. Бирок UUCP айырмаланып, ал акыл-жылы ар кандай программа жана тапшырма менен колдонуучу деңгээл буйрук катары иштетүү мүмкүн болгудай болуп саналат күтүлөт. бир эле учурда бир нече программалар менен сүйлөшүү болот деп күтүшөт.

Кандай болот деп күтүшөт

Мисалы, бул жерде Кудайдын буйругу эмне күтүүгө болот, кээ бир нерселер бар:

Эмне себептен ар кандай бар кабыгы бул милдеттерди аткара албайт. Бардык күтүш мүмкүн.

Жалпысынан алганда, программа жана жерди пайдалануучунун ортосунда түзүлгөн өз ара талап кандайдыр бир программасын иштеп пайдалуу күтүлөт. зарыл болсо, ошонун баарын өз ара программалык мүнөздөөгө болот деп эсептелет. көзөмөлдөнүүдө программасын да токтотуу үчүн пайдалануучу үчүн көзөмөлдү кайтарып берет деп күтсөк болот. Ошо сыяктуу эле, колдонуучу каалаган убакта ариби үчүн көзөмөлдү кайтарып бере алабыз.

Колдонуу

Күтүш ишке ашыруу үчүн буйрук тизмесин cmdfile окуйт. # колдоо системалар боюнча толук негиз болушу мүмкүн деп күтүш! Аткарылуучу катары арибин белгилөө жана ариби менен биринчи сызыгын жасап белгилер:

#! / Окудум / Жергиликтүү / бин / күтүп -f

Албетте, жашоо күтүш жерде жолу так сүрөттөө керек. / Окудум / жергиликтүү / бин бир мисалы болуп саналат.

-C желек буйрук ариби менен эч чейин аткарылууга тийиш бурат. команда катмары тарабынан бузулуп жаткан жол бербөө үчүн келтирилген болушу керек. Бул параметр бир нече жолу пайдаланылышы мүмкүн. Бир нече буйруктар чекит менен бөлө бир -C менен ишке ашырылышы мүмкүн. Алар пайда үчүн буйруктары менен аткарылат. Expectk колдонуп жатканда, бул параметр -command катары көрсөтүлгөн.

-D желек, биринчи кезекте, мындай күтүү жана өз ара эле буйрук ички ишин билдирди айрым диагностикалык чыгарылышты, берет. Бул желек бир ариби күтүлөт эле башында "exp_internal 1" катары таасир этет, ошондой эле талап нускасы басылып жатат.

-D желек менен өз ара аракеттенүү мүчүлүштүктөрдү берет. Бүтүн балл керек. мүчүлүштүктөрдү балл эмес нөл же ^ C кысып же бир чекити болуп турат, же башка ылайыктуу мүчүлүштүктөрдү буйрук ариби менен пайда болсо, анда кийинки TCL тартипте чейин бийлик жүргүзө баштайт. Expectk колдонуп жатканда, бул параметр катары аныкталган, - мүчүлүштүктөрдү.

-f желек буйруктарды окуп бир сааты бурат. желек өзү # колдонгондо гана пайдалуу болсо, милдеттүү эмес! башка далилдер буйрук сабында камсыздалышы мүмкүн деп эки ооз сөз. Expectk колдонуп жатканда, бул параметр -file катары көрсөтүлгөн.

Алыдын ала, буйрук билэ кирип окуп эс жана аны толугу менен ишке ашырган. Бул учурда Files бир сапты окуп кээде баалуу болуп саналат. негизсиз документ мажбурлоо үчүн ушундай жол менен чечүүгө болот, -b желегин пайдаланууга. Expectk колдонуп жатканда, бул параметр -buffer катары көрсөтүлгөн.

сап, анда "-" бир аты катары берилет, стандарттуу киргизүү ордуна келет. Колдонуу "./-" иш жүзүндө деген делосуна окуп ", - деген".

-i желек себептери өз ара бир делосуна аларды окуп ордуна буйрук талап кылуусун талап кылат. Prompting чыгуу буйругу аркылуу же EOF кийин токтотулат. -i желеги да буйрук билэ да е колдонулган болсо, кабыл алынат. Expectk колдонуп жатканда, бул параметр -interactive катары көрсөтүлгөн.

- параметрлердин жок араны аныктоо үчүн колдонулушу мүмкүн. Бул аны күтүш чечмелеген жок сиздин ариби менен тандоо сыяктуу аргументтерди өткүлөрү келсе, пайдалуу болуп саналат. Бул пайдалуу # жайгаштырылган болот! сап күтүлөт кандайдыр бир flaglike маанисин алдын алуу. Мисалы, төмөнкүлөр өзгөрүлмө argv менен жазма аты, анын ичинде баштапкы далилдерди калтырат.

! # / Окудум / Жергиликтүү / бин / күтөт -

Адаттагыдай кетсек getopt (3) жана execve (2) жыйындар # аргументтерин кошуп жатканда сакталууга тийиш! сызык.

-N желек колдонулат, эгерде билэ $ exp_library / expect.rc ушул болсо, дароо эле жашашат. (Expectk колдонуп жатканда, бул параметр -NORC катары көрсөтүлгөн.) Ушундан кийин дароо, билэ ~ / .expect.rc -н желек колдонулат каралбаса, эсеп жазуусу жашашат. чөйрө өзгөрүлмө DOTDIR аныкталган болсо, анда ал бир каталогуна катары каралат жана .expect.rc жерден окуп жатат. Expectk колдонуп жатканда, бул параметр -norc катары көрсөтүлгөн. Бул издөө гана -C желектерин аткаруучу кийин пайда болот.

-v себептери, анын версия номерин жана чыгуусуна басып күтүлөт. Узун желек аттарын колдонот тиешелүү Expectk желеги, колёса болуп саналат.

Ыктыярдуу args тизмесине курулган жана argv деген өзгөрмө сакталат жана. argc argv узундугуна демилгеленди жатат.

эч кандай жазуусу колдонулат, эгерде Argv0 арибин же бинардык аты болуп аныкталат. Мисалы, ариби менен биринчи үч далилдер аталышы төмөнкү басып:

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

буйруктары

Күтүш курал Command Тили колдонот. TCL Агымды башкаруу менен камсыз кылат (эгерде, анткени, тыныгуусуз), сөз баалоо жана recursionand тартиби аныктама ошондой эле бир катар башка өзгөчөлүктөрү. (Эгерде, Шмидт жыйындысы) TCL буйрук бар командалары аныкталган эмес, бирок бул жерде да колдонгон. Күтүш кошумча буйруктар колдойт. Эгерде башкасы көрсөтүлбөсө, буйруктарына бош сап кайтып.

Алар бат эле орун алат деп командалары алиппе келтирилген. Бирок, жаңы колдонуучулар бул сонундарын баяндалган ал билдирүүлөрдү окуганда жүрөгүбүз менен баштоо үчүн жардам жиберип, күтөт жана бул үчүн, өз ара таба алат.

жакын [кул] [0 -onexec | 1] [-i spawn_id]

учурдагы байланышты жабылат алууда . Көбү өз ара программалар аныктай турган EOF алардын stdin жана чыгуу боюнча; Ошентип, жакын, адатта, өлтүрүү үчүн жетиштүү ишин , ошондой эле. -i желек жарыялайт жараянын деген spawn_id тиешелүү жабуу.

Да күтөт жана учурдагы аныктоочу болот ара иштеп чыга турган жана кыйыр бир жакын, ал эми силер өлтүрүп, анда жараянын , айталы, "Шмидт өлтүрүү $ PID" менен, ачык жакын барышыбыз керек.

-onexec желек икринка номуру кандайдыр бир жаңы жабык болот аныктайт бөлүнгөндүктөн аны берүү же алуу капталган болот. , Ачык икринка ID таштап Наркы 0. Бир эмес нөл бүтүн балл кандайдыр бир жаңы жол жабык туудурган күчтөрдү колдонуу үчүн.

кул желеги икринка ID менен байланышкан кулду жабылат. байланыш жабык болгондо, кул дароо эле ал дагы деле ачык болсо, ошондой эле жабык турат.

Кандай гана байланыш толугу менен же ачык жабык болобу, сиз тийиштүү ядро тазалап, күтө чакыруу керек жараян тешик. Жакын буйругу жабуучу эч кандай кепилдик жок бери күтүп деп атаган эмес, кайра байланыш, ал чыгып калышына себеп болот.

мүчүлүштүктөрдү [[азыр] 0 | 1]

Сиз отчеттору жана алар белгиленген үзүлүү аркылуу чыга берген TCL мүчүлүштүктөрдү көзөмөлдөйт.

эч кандай далилдер менен, 1 мүчүлүштүктөрдү чуркап жок болсо кайра берилет, эгерде 0 кайтарылып берилет.

1 аргументи менен мүчүлүштүктөрдү башталды. а 0 аргументи менен мүчүлүштүктөрдү токтоп турат. 1 аргумент азыр желеги алдында болсо, мүчүлүштүктөрдү тез арада башталды. Болбосо, мүчүлүштүктөрдү кийинки TCL арыз менен башталды.

мүчүлүштүктөрдү буйругу ар кандай тузактарды өзгөрбөйт. -D желеги менен талап баштап салыштырып көрчү.

Үзүү буйругу желмогуз ажыратуулары жараянын тартып терминалга . Ал тек-жайы иштеп улантууда. жараян өз жараяны тобуна берилет. Standard I / O багытталышы камсыз кылынат / иштеп чыгуучунун / нөл .

Төмөнкү үзүндүсү колдонуу алкагында скриптер мындан ары да ажыратып, аппаратты өчүрүү керек.

Эгерде {[айры] = 0} чыгуу үзүү. . .

Төмөнкү скрипт бир сөздү окуп, анан ал чуркап бир сөздү ар бир убакытты талап кылат, ар бир сааттык программа менен коштолот. сиз бир гана жолу аны терүү керек деген жазуусу сөздү аткарат.

send_user "пароль \?" expect_user томондогу "\ н (*)." үчүн {} 1 {} {{Эгерде [айры] = 0} {уйку 3600; мындан ары да} үзүү икринка priv_prog күткөн Сырсөз: "$ expect_out жөнөтүү ( 1-сап) \ р ". . . чыгуу}

номиналдык асинхрондук технологиялык өзгөчөлүгү (&) үстүнөн чар колдонуу үчүн артыкчылык кийин, андан кийин жана ажыратылганда чейин терминалдык параметрлерин сактай алат деп күтүш жаңы ptys аларды колдонууга болот. Менен &, терминалдык эле учурда ажыратылды бери терминал, анын параметрлерин окууга мүмкүнчүлүк болгон эмес деп күтүш башкара алат күтүлөт.

чыгуу [-opts] [абалы]

себептери эмне үчүн чыгып, же башка жол менен даярдап күтүлөт.

-onexit желеги менен чыгуу чыгуучунун катары колдонулууга тийиш болгон кийинки аргумент себеп болот. аргумент болбосо, азыркы чыгуу иштеткичи кайтарылып берилет.

-noexit желек себептери чыгып, бирок иш жүзүндө иштеп жаткан системасына көзөмөлдү кайтаруу кыска токтотууга даярдоо күтүлөт. колдонуучунун аныкталган чыгуу иштеткичи, ошондой эле өз алдынча ички иштеткичтерин күтүш эле жүргүзүлөт. Жок, андан ары буйрук аткарылууга тийиш күтүлөт. башка TCL бутактары менен күтүп иштебей жатса бул ыкма өтө пайдалуу. Учурдагы котормочу (Tk чөйрөдө болсо да, негизги терезе) башка TCL улай тазалоо үчүн калууда. Күтүш чыгып кайра (Бирок бул болушу мүмкүн) деп аталат, анда колдонгондор кайра жок.

журуучу кийин, ыроолонгон ар жараяндар бардык байланыштары жабылат. Аягына чыгаруу бөлүнгөндүктөн жол менен бир EOF катары аныкталат. чыгуу кадимки _exit (2) жол-жобосу кандай тышкары эч кандай башка иш-аракеттерди талап кылат. Ошентип, EOF текшерип эмес, аткаруу үчүн, мындан ары да мүмкүн жараяндарды жаратты. (Мисалы үчүн шарттарды ар кандай аныктоо үчүн маанилүү, кайсы бир топко бөлүнгөндүктөн жараянын сигнал жөнөтүлөт, бирок бул система көз каранды, адатта чыгуу боюнча документ бар (3).) ЖМТИ тарабынан мураска калган болот чуркап уланта жараяндардын жаратты.

Статусунда (же 0 көрсөтүлгөн эмес болсо) талап менен чыгуу абалы катары кайтарылат. скрипт акырына жеткен болсо, тымызын толугу менен аткарылат.

exp_continue [-continue_timer]
Команда exp_continue демейде болуп кайтып эмес, аткаруу үчүн өзүн-өзү талап берет. Демейки exp_continue By күтүү агытуу чыгарды. -continue_timer желеги кайрадан болуу агытуу жол бербейт. (Толук маалымат алуу үчүн талап кара.)

exp_internal [-f билэ] балл
Мындан ары күтүш ички диагностикалык маалыматты жиберүүгө буйрук себеп stderr балл эмес нөл болсо. Наркы 0. диагностикалык маалымат ар бир мүнөздө кабыл алынган, үлгүлөрүнүн каршы учурдагы көлөмүн дал жасалган ар бир аракет камтыган болсо, анда ал ошол чыгаруу өчүрүлгөн.

Кошумча билэ берилген болсо, анда бардык табигый жана мүчүлүштүктөрдү чыгаруу деп File (наркынын карабастан) үчүн жазылган. Ар бир өткөн диагностикалык чыгаруу билэ жабылган.

Бах, желек берген акыркы эмес маалымат далилдерди сүрөттөмө кайтып exp_internal себеп болот.

exp_open [args] [-i spawn_id]
баштапкы икринка ID туура келген TCL билэ аныктагычы кайтарат. Билэ аныктагыч анда TCL ачык буйругу менен ачылган болсо, колдонсо болот. (Икринка ID мындан ары колдонуу керек. Бир күтүү, өлүм жазасына тартылышы керек.

-leaveopen желек менен буйруктарын күтүш жетүү үчүн ачык икринка ID калтырат. Бир күтүү икринка ID боюнча аткарылууга тийиш.

exp_pid [-i spawn_id]
Азыркы бөлүнгөндүктөн аны иштеп чыгуу үчүн тиешелүү технологиялык ID кайтарат. -i желек колдонулган болсо, PID берген икринка ID деп келет кайтты.

exp_send
жөнөтүү үчүн өлкө болуп саналат.

exp_send_error
send_error үчүн өлкө болуп саналат.

exp_send_log
send_log үчүн өлкө болуп саналат.

exp_send_tty
send_tty үчүн өлкө болуп саналат.

exp_send_user
send_user үчүн өлкө болуп саналат.

exp_version [[-exit] чыгаруу]
скрипт күтүлөт колдонулган шайкеш кылуу үчүн пайдалуу болот.

Эч кандай далилдер менен, талап учурдагы версия кайтарылып берилет. Бул нуска анда ариби менен коддолгон мүмкүн. Мейли, акыркы түрү өзгөчөлүктөрүн колдонуп жок экенин билген болсо, мурда нускасын көрсөтүүгө болот.

Versions чекит менен бөлүнгөн үч сандын турат. Биринчи негизги саны болуп саналат. Түрү үчүн жазылган Scripts башка негизги саны менен талап дээрлик иштебейт. негизги номерлери дал келбейт, анда exp_version ката кайтарат.

Экинчиден кичине сан болот. Учурдагы караганда көбүрөөк анча саны менен чыгаруу үчүн жазылган Scripts кээ бир жаңы өзгөчөлүк көз каранды болушу мүмкүн жана иштетүүгө мүмкүн. exp_version негизги номерлери дал эгер ката кайтарып берет, ал эми жашы жете элек скрипт саны келаткан күтүлөт далай бийиктерде экени талашсыз.

Үчүнчү версия салыштырганда эч кандай ролду ойнойт бир сан болуп саналат. Бирок, бул программалык бөлүштүрүү, мисалы, кошумча документтерди же оптималдаштыруу менен кандайдыр бир жол менен өзгөртүп жатат деп күтүш качан чогулткан жатат. Ар бир жаңы анча чыгаруу 0 үстүнө абалга келет.

-exit желеги менен, версия эскирип болсо басып ката жана эшик күтүлөт.

күткөн [[-opts] pat1 body1] ... [-opts] баш [bodyn]
үлгүлөрүнүн бир топко бөлүнгөндүктөн аны кайра өндүрүүнү дал чейин күтүп, көрсөтүлгөн мөөнөт өтүп кетти, же акырына карата билэ көрүнүп турат. акыркы орган бош болсо, анда ал капарга албай коюуга мүмкүн.

Акыркы expect_before буйругун Patterns толугу менен башка эч бир түрүнө чейин колдонулат. Акыркы expect_after буйругун Patterns толугу менен башка эч бир оймо кийин колдонулат.

Ааламдарга аргументтер билдирүүсүнө караганда, бир сапты талап күткөн болсо, бардык талаш-тартыштар үчүн эле бири "өлсүн" мүмкүн слэш менен ар бир сапты токтотуу алыс. Бул бир эле учурда, өзгөчө TCL ордун алмаштыруу кашаа карабастан пайда болот.

Үлгү ачкыч EOF болсо, тийиштүү орган акырына-жылдын делосуна боюнча жүргүзүлөт. Үлгү ачкыч күтүү болсо, тиешелүү орган күтүү боюнча жүргүзүлөт. эч кандай кечиктирүү сөздөрдү колдонгон болсо, тымызын нөл аракет күтүү боюнча жүргүзүлөт. демейки күтүү мөөнөтү 10 секунда, ал эми буйругу "30 күтүү койду" деп, 30, мисалы, жол-жоболоштурулушу мүмкүн. Чексиз күтүү наркы боюнча дайындалган мүмкүн -1. Үлгү ачкыч демейки болсо, тиешелүү органы же күтүү, же акырына карата делосуна боюнча жүргүзүлөт.

үлгүгө дал келсе, анда тиешелүү орган аткарылат. берүүнүн дененин натыйжасы (же эч кандай үлгүгө дал келсе бош сапка) күтөт. бир нече үлгүлөргө дал ошол учурда, биринчи пайда болгон бир орган тандоо үчүн колдонулат.

жаңы чыгаруу келгенде ар бир жолу, албетте, алар келтирилген үчүн ар бир үлгүсүнө салыштырылат. Алсак, мисалы, бир калыпка катары кепилдик акыркы үлгү нерсе, кабыл алуу менен бир матч жоктугу үчүн сыноо болушу мүмкүн. Эч кандай чакыруу бар жагдайларда күтүү (жөн гана кол менен өз ара болсо болмок сыяктуу) колдонуу керек.

Patterns үч кандай жолдор менен көрсөтүлгөн. Алыдын ала, оюу-TCL кылдуу дал буйругу менен көрсөтүлгөн. (Мындай моделдер да окшош C-катмарында , адатта, "Glob" үлгүлөрүнүн деп аталуучу ар дайым). -gl желеги башкача кылып чейин желектерди талап дал мүмкүн үлгүлөрүн коргоо үчүн колдонулушу мүмкүн. Ар бир үлгү катары менен башталат ", -" Бул жол менен корголууга тийиш. (Бардык менен башталган саптар "-" келечектеги жолдору үчүн сакталат.)

Мисалы, төмөнкү үзүндү ийгиликтүү кирүүдө издейт. (Ариби менен башка аныкталган жол-жобосу болуп эсептелет муунтуп Note.)

күткөн {бош {\ н алек коёт; exp_continue} "жараксыз сырсөз" муунтуп жок күтүү сактанууну туташкан муунтуп}

эгерде иш аракеттерди үлгү бөлүп турган мейкиндикти камтыйт бери Quotes төртүнчү үлгү зарыл. ошол эле иш-аракеттер менен Patterns (мисалы, 3- жана 4-ас) кайрадан аракеттерди листингдин талап кылат. Бул regexp стилиндеги моделдерин (төмөндө кара) колдонуу менен оолак болот. Glob-стили моделдерин түзүү тууралуу көбүрөөк маалымат TCL куралынын тапса болот.

Regexp стилиндеги ченемдүүлүктөрү TCL анын regexp ( "кезектеги сөз айкашы" кыска) буйругу менен аныкталат синтаксисин ээрчишет. regexp узоры желеги томондогу менен киргизилет. Өткөн мисал бир regexp катары колдонуп, деп сынга алат:

күткөн {бош {\ н алек коёт; exp_continue} "ишке ашкан жок | жараксыз сөздү" томондогу күтүү сактанууну туташкан муунтуп}

үлгүлөрүнүн эки типтеги "unanchored" болуп саналат. Бул моделдер бүт сап, ал эми сап каалаган матч менен башталат жана аяктайт болот (дагы баары дал ошондой эле көп) дал зарылдыгы жок дегенди билдирет. ^ Сабынан башталышы дал жана $ акыры дал колдонуу. Эгер сап акырын күтүп жок болсо, жооптору алардын бардыгы учурунда айтылып жаткан эле жонокой сап ортосуна чейин аякташы мүмкүн экенин белгилешет. дагы туура жыйынтыктарды чыгаруу менен, чыгаруу табигый болот. Ошентип, $ колдонуу Сиз так сап-жылдын акырына карата белгилер сүрөттөп бере алат, эгерде чакырылат.

көптөгөн редактор менен кетсек, ^ жана $ тиешелүү линияларын башымын жана аягымын дал келбейт. Бирок, сызык багытталган эмес күтөт, бул каармандар маалыматтар башымын жана аягымын боюнча (сызыктардын каршы) Азыркы талап дал туруучу менен дал келбейт. (Ошондой эле, төмөндө карагыла "системасы зилинин.")

Чыг желек үлгүсү бир "так" сап катары туура себеп болот. * Эч кандай мааниси, ^, ж.б.у.с. (кадимки TCL жыйындар да сакталууга тийиш, бирок) жүргүзүлөт. Так үлгүлөрү ар дайым unanchored болуп саналат.

-nocase желек өндүрүшүнүн тамга белгилери, алар кичине каармандар сыяктуу эле салыштырууга болот. узор таасирин тийгизген эмес.

Чыгарылышты окуп жатканда, жыйынтыктары 2000 байт "унутуп" үчүн мурда байт мажбур болот. Бул милдети match_max менен өзгөртүлүшү мүмкүн. (Эскертүү өтө чоң экенин баалуулуктар үлгүгө дал жайыраак болот.) Patlist full_buffer болсо, match_max байт кабыл алынган болсо, тиешелүү мамлекеттик орган жүзөгө ашырылат жана эч кандай башка үлгүлөрүнө туура келет. Full_buffer ачкыч колдонулат же жокпу, унутуп каармандар expect_out үчүн жазылган (тосмо).

Patlist Ачкыч нөл жана nulls (remove_nulls буйругу аркылуу) гана уруксат берилген болсо, анда тиешелүү орган бир болсо, аткарылган ASCII 0 дал келет. Бул Glob же regexp үлгүлөрүнүн аркылуу 0 байт дал мүмкүн эмес.

Үлгү (же EOF же full_buffer) дал келген учурда, дал келген жана буга чейин андай чыгаруу өзгөрмө expect_out (тосмо) сакталат. Expect_out өзгөрмөлөр 9 regexp саптар дан сакталды чейин (1, сап) expect_out аркылуу (9-сап). -indices желек үлгүсүнө мурда колдонулган болсо, башталган жана аяктаган көрсөткүчтөрдүн 10 Саптар expect_out өзгөрмөлөр (X, башталат) сакталган (а түрүндө lrange ылайыктуу) жана expect_out (X, акырына карата) X бир жерде орундуу, Санитардык-жылы саптар кызмат ордуна ылайык келет. 0 толугу менен үлгү келген жана Glob үлгүлөрүнүн, ошондой эле regexp үлгүлөрдү өндүрүлгөн Саптар билдирет. Мисалы, бир иш "abcdefgh \ н", жыйынтыгы өндүрүүнү өндүрүлгөн, эгерде:

күтүү "компакт-диск"

кийинки билдирүү аткарылган болсо, ошондой болуп саналат:

коюп expect_out (0, сап) CD белгиленген expect_out (тосмо) ABCD

жана "efgh \ н" өндүрүштүн аймак боюнча калат. жараяны чыгарылышты "abbbcabkkkka \ н" өндүрүлгөн болсо, натыйжасы боюнча:

-indices томондогу "б (б *) * (к +)." күтөт

кийинки билдирүү аткарылган болсо, ошондой болуп саналат:

коюп expect_out (0, баштоо 1) белгиленген expect_out (0, акырына карата) 10 топтому expect_out (0, сап) expect_out коюп bbbcabkkkk (1, баштоо) 2 белгиленген expect_out (1, акырына карата) 3 белгиленген expect_out (1-сап) expect_out коюп BB (2, баштоо) 10 топтому expect_out (2, акырына карата) 10 топтому expect_out (2-сап) к белгиленген expect_out (тосмо) abbbcabkkkk

жана "\ н" өндүрүштүн аймак боюнча калат. үлгү "*" (жана томондогу ".") учурунда мындан ары өндүрүүнү окубай туруп чыгаруу чекти жууп калат.

Негизи, дал чыгуу күтөт ички паддарды тарабынан талкаланат. Бул -notransfer желеги менен үлгү атланы тарабынан чектелиши мүмкүн. Бул желек тажрыйба өзгөчө пайдалуу (жана тажрыйба жүргүзүп жатып жайлуулугу "эле эмес," үчүн кыскартылган болот).

Дал өндүрүшүнүн (же EOF же full_buffer) менен байланышкан икринка ID expect_out (spawn_id) сакталат.

-timeout желеги учурдагы буйругу күтүү убакыты катары төмөндөгүдөй мааниге күтүү өзгөрмөнүн колдонуунун ордуна колдонууну талап кылат.

Алыдын ала, оюу азыркы иштеп чыгаруу менен дал келген, бирок -i желек деген spawn_id тизмеден чыгаруу кандайдыр бир төмөнкү үлгүлөрдү (кийинки -i чейин) туура дейт. spawn_id тизме да spawn_ids же spawn_ids мындай тизмесине шилтеме өзгөрмөнүн тизме бөлүнгөн Художник болушу керек.

Мисалы, төмөнкү мисал "менен байланышып," азыркы учурунда, же "бош эмес", же $ proc2 атындагы spawn_id чейин "жараксыз сөз", "жок" деп турат.

күткөн {-i $ proc2 алек {\ ​​н алек коёт; exp_continue} "ишке ашкан жок | жараксыз сөздү" томондогу күтүү сактанууну туташкан муунтуп}

Глобалдык өзгөрмө any_spawn_id наркы учурдагы талап буйругу менен бардык башка -i желектери менен аталган бардык spawn_ids менен үлгүлөргө дал үчүн гана пайдаланылышы мүмкүн. Жок байланыштуу үлгү менен -i желеги тартып spawn_id (б.а., башка -i артынан) Ошол эле буйрук any_spawn_id байланыштуу талап боюнча башка үлгүлөрүнүн жеткиликтүү болот.

-i желеги да өзгөрүлмө икринка ИД тизмесин окуп жаткан учурда глобалдык өзгөрмө аты мүмкүн. ал өзгөрүлгөндүгү өзгөрүлмө окуп жатат. Бул буйрук аткаруу болуп саналат, ал эми I / O булагы өзгөртүүгө бир жолу менен камсыз кылат. ушундай жол менен берилген Артём лерин "кыйыр" икринка аныктагычтары деп аталат.

Мисалы, себеби башкаруу структуралар үзүлүшүн жана мындан ары да ошондой иш-аракеттер (мисалы үчүн, методго) кадимки жол менен аракет кылуу. Команда exp_continue демейде болуп кайтып эмес, аткаруу үчүн өзүн-өзү талап берет.

Бул ачык качуу үчүн пайдалуу илмек же кайталап күтөт отчет. төмөнкү мисал rlogin автоматташтыруу үчүн кол жазманын бир бөлүгү болуп саналат. Rlogin сырсөз түрткү болсо, exp_continue экинчи арыз (тез кайра издеп) талап жазганына этимал.

күткөн {Password: {stty -echo send_user "пароль ($ колдонуучу) $ аскер жөнүндө:" expect_user томондогу "(*.) \ н" send_user "\ н" "$ expect_out (1, сап) \ R" жөнөтүү stty Эхо exp_continue} туура {send_user "күчүн жоготту деп сөз же эсеп \ н" чыгуу} күтүү {send_user "$ аскер туташуу убакыты кечиктирилди \ н" чыгуу} EOF {send_user \ "байланышы жок өтөт: $ expect_out (структура)" чыгуу} - $ калыпка кайра}

Мисалы, кийинки үзүндүсүндө бир колдонуучу мурунтан эле толугу менен дардын бир өз ара жардам мүмкүн. Бул учурда, терминал чийки режимге коюлат. Колдонуучу "+" кысылып болсо, өзгөрмө чогулткан жатат. "Б", ыкшап, анда бир нече кайра кайра жөнөтүлөт, балким, кандайдыр бир жол менен аны тумшукка берип, "мен" билан натыйжалуу жазуудан көзөмөл уурдаган, иш менен өз ара берет. Ар бир учурда, exp_continue азыркы учурдагы иш-аракеттерди аткаруу кийин үлгү келүүсүн улантуу үчүн талап берет.

stty чийки -echo expect_after {-i $ user_spawn_id "б" { "\ р \ р р \" жөнөтүүгө; exp_continue} "+" {incr Күлкү; exp_continue} "мен" {өз ара аракеттенүү; exp_continue} чыгуу "таштап"}

Алыдын ала, exp_continue күтүү агытуу чыгарды. Exp_continue -continue_timer желеги менен аталган болсо, таймер, кайра жок.

expect_after [expect_args]
да оюу, анда күтөбүз башка expect_before үчүн айырмасыз жумуштарды жана expect_after дал мүмкүн, узор колдонулат күтөт. Көбүрөөк маалымат алуу үчүн expect_before буйругун кара.

expect_background [expect_args]
Бирок, ал ошол замат кайра, күткөн эле далилдерди талап кылынат. Patterns жаңы киргизүү келип сайын сыналууда. Үлгү күтүү жана демейки expect_background үчүн мааниси жана тымызын жарактан чыгарылат. Болбосо, expect_background буйрук expect_before жана expect_after үлгүлөрү сыяктуу күтөт колдонот.

Expect_background аракеттер баа болуп жаткан кезде, ошол эле икринка ID үчүн маалымат иштетүү бөгөттөлгөн. иш аяктаганда Негизги иштетүү бөгөттөн болуп саналат. Маалымат иштетүү бөгөттөлгөн да, ал (чагылдыруу) эмне болот эле икринка ID боюнча күтөт.

Бул бир expect_background бөгөттөн болуп саналат, ал эми талап ишке ашыруу мүмкүн эмес. бир икринка иденттүүлүгүн expect_background эле икринка ID менен жаңы expect_background жарыялоо жолу менен жок кылынат. Эч кандай үлгү менен expect_background жарыялоо алкагында үлгүлөргө дал жөндөмдүүлүгү берилген икринка ID жок.

expect_before [expect_args]
Бирок, ал ошол замат кайра, күткөн эле далилдерди талап кылынат. Ошол эле икринка ID менен акыркы expect_before тартып Үлгү-аракет түгөй толугу менен болбосун төмөнкү буйруктардын үмүттөнө кошулат. Үлгү менен дал келсе, анда ал өзү буйрук күтүп көрсөтүлгөн болсо катары каралат, жана тийиштүү орган күткөн буйрук алкагында аткарылат. Эки expect_before келген үлгүлөрү менен дал күтүүгө болот, анда expect_before үлгүсү колдонулат.

эч кандай үлгү көрсөтүлгөн болсо, икринка ID кандай үлгүлөрдү текшерилет эмес.

Бир -i желеги тарабынан жокко чыкпаса, expect_before узоры expect_before буйрук аткарылган учурда (анын үлгү туура эмес) боюнча аныкталат икринка ID каршы дал келбейт.

Бах, желек себеп, ал дал турган мыйзам ченемдүүлүктөрү учурдагы техникалык кайтып expect_before. Алыдын ала, азыркы икринка ID билдирди. Кошумча икринка ID өзгөчөлүгү экенин икринка ID боюнча маалымат алуу үчүн берилиши мүмкүн. Мисалы

expect_before Бах -i $ Жаздын

көпчүлүгү бир икринка ID тактоо боюнча берилиши мүмкүн. кыйыр өзгөчөлүктөрдү гана түздөн-түз икринка даректерин басып -indirect желек.

Ордуна икринка ID тактоо боюнча, Кыргызстандын желеги икринка ИД боюнча отчет ", Бах," алып келем "нерселердин".

Бах, желектин көлөмү expect_before үчүн аргумент катары колдонулушу мүмкүн.

expect_tty [expect_args]
күткөн, бирок / иштеп чыгуучунун / Телетайп келген каармандарды окуган (б.а. колдонуучудан баскан) болуп саналат. Алыдын ала, окуу бышырылган режиминде жүзөгө ашырылат. Ошентип, сызыктар аларды күткөн үчүн кайра менен аякташы керек. Бул stty аркылуу өзгөртүлүшү мүмкүн (төмөндө stty буйругун карагыла).

expect_user [expect_args]
күткөн, бирок ал stdin келген каармандарды окуган (б.а. колдонуучудан баскан) болуп саналат. Алыдын ала, окуу бышырылган режиминде жүзөгө ашырылат. Ошентип, сызыктар аларды күткөн үчүн кайра менен аякташы керек. Бул stty аркылуу өзгөртүлүшү мүмкүн (төмөндө stty буйругун карагыла).

айры
бир жаңы пайда алуу . Жаңы жараяны азыркы күтүш так көчүрмөсү болуп жүрүшүндө . Ийгилигине, айры жаңы (балдар) үчүн 0 кайтарып алуу жана кайра иштетүү бала ID жараянында ата-эне менен жүрүшүндө . Ийгиликсиз On (дайыма каражаттын жоктугуна байланыштуу, мисалы, алмашуу мейкиндик, эс), айры кайтып -1 Ата-эне үчүн иштеп , бирок балдары жок болсо кайра түзүлөт.

Чыгуу буйругу аркылуу желмогуз жараяндар чыгуу эле түп сыяктуу иш . Желмогуз жараяндар журналына кат жазууга уруксат берилет. Сиз өнөр жайынын көпчүлүк мүчүлүштүктөрдү же кирүүнү иштен жок болсо, анда анын натыйжасы түшүнүксүз болушу мүмкүн.

Кээ бир Pty Ишке атүгүл кыска, бир нече окурмандардын жана жазуучулардын чаташтырууга мүмкүн. Демек, анекдоттор жараяндар алдында турган жолдун коопсуз болуп саналат.

өз ара [string1 body1] ... [stringn [bodyn]]
учурдагы көзөмөл берет жараянына жаза үчүн, колдонуучуга учурдагы жиберилет жүрүшүндө , ошондой эле учурдагы stdout жана stderr кайра кайтарылып берилет.

Сап-дене түгөй тиешелүү сап кирип жатканда дене аткарылган учурда жүйөлөрүн, ошондой эле көрсөтүлгөн болушу мүмкүн. (Алыдын ала, сап учурдагы үчүн жиберген эмес, кайра .) Тилмеч буйрук акыркы орган жок болсо, кабыл алынат.

Толугу менен өз ара билдирүүсүнө далилдер бир нече сапты талап болсо, бардык талаш-тартыштар үчүн эле бири "өлсүн" мүмкүн слэш менен ар бир сапты токтотуу алыс. Бул бир эле учурда, өзгөчө TCL ордун алмаштыруу кашаа карабастан пайда болот.

Мисалы, төмөнкү буйрук сызыгынын аныкталган төмөнкү сап-дене жуп менен өз ара: ^ Z кысып келгенде, токтотулган күтүлөт. (-reset желек терминалдык режимдери калыбына келтирүүдө.) ^ А кысып жатканда, колдонуучу жана "Эгер контролдоо-A терилген" көрүп жараяны бир ^ А жөнөтүлөт. $ Басылганда, колдонуучу датасы көрөт. ^ C басылганда, эшик күтүлөт. "Күлкү" кирип калса, колдонуучу "деген сапты" көрөт. ~~ басылганда, тилмеч өз ара чуркап күтүлөт.

белгиленген CTRLZ \ 032 ара {-reset $ CTRLZ {Шмидт өлтүрүү -Stop [PID]} 001 {send_user "Эгер контролдоо-A \ н терилген" \; жиберем "\ 001"} $ {send_user "датасы [саат формат [саат секунд]]." деп} 003 чыгуу үйрөндүм \ {send_user "бар"} ~~}

сап-дене-экиден болуп, саптар, алар аргумент катары келтирилген үчүн дал келет. Жарым-жартылай дал Strings учурдагы үчүн жиберген эмес, кайра келе калган доор. Белгиден кийин дал ошол жерде мындан ары, балким, мүмкүн ушунчалык кирген болсо, сап бөлүгү гана жөнөтүлөт учурунда , балким, дагы бир матч башташы мүмкүн эмес. Ошентип, жарым-жартылай дал келүүлөр саптар бар саптар дал келүү болушу үчүн аракет кылган алгачкы саптар акыры албаса, кийинчерээк дал болот.

Алыдын ала, сап дал келген эч кандай так эмес жапайы карталар . (Ал эми, күткөн буйрук демейки Glob стилиндеги үлгүлөрүн колдонот.) Чыг желеги башкача кылып чейин желектерди өз ара дал мүмкүн үлгүлөрүн коргоо үчүн пайдаланылышы мүмкүн. Ар бир үлгү катары менен башталат ", -" Бул жол менен корголууга тийиш. (Бардык менен башталган саптар "-" келечектеги жолдору үчүн сакталат.)

Томондогу желеги бир regexp стилиндеги үлгү катары чечмеленбөөгө жипти мажбурлайт. Бул учурда, дал саптар жол сыяктуу дүкөндөр өзгөрүлмө expect_out анын көлөмүн талап interact_out өзгөрмөнүн ичинде сакталат. -indices желек ушундай колдоого алынат.

Узор EOF-жылдын аягына чейин бир-делосуна боюнча аткарылган иш киргизет. Бир EOF чыгарылышты жазып жатканда аныкталса, анда өзүнчө EOF үлгү да дал келет, бул учурда бөлүмдүн желегин болот. Деп, өз ара аракеттеринен эч кандай EOF үстүнө кайтып үчүн демейки EOF аракет ", кайра" болуп саналат.

Үлгү күтүү эч кандай белгилер бир жолу окуп, кийин өлүм жазасына бир күтүү (ар секундалык) жана иш-аракеттерди жайылтат. Күтүү үлгү мурда көрсөтүлгөн тиешелүү иш . эч кандай демейки күтүү бар. Өзгөрмө атайын "күтүү" (күткөн буйругу менен пайдалануу), бул күтүү таасир берди.

Мисалы, төмөнкү сөздөрү бир саат бою эч нерсе терилген, бирок дагы эле тез-тез системасы билдирүүлөрдү ала элек колдонуучуларды autologout үчүн колдонулушу мүмкүн:

өз ара -input $ user_spawn_id күтүү 3600 кайтып бөлүмдүн \ $ spawn_id

Узор ачкыч нөл болсо, жана nulls (remove_nulls буйругу аркылуу) уруксат берилген, тиешелүү орган 0 бир ASCII туура болсо, аткарылган. Бул Glob же regexp үлгүлөрүнүн аркылуу 0 байт дал мүмкүн эмес.

Өзгөрүлмө interact_out себеп -iwrite желеги менен үлгү Prefacing (spawn_id) үлгүгө дал келген (же EOF) spawn_id коюлса керек.

Сыяктуу иш-аракеттер үзүлүшүн жана мындан ары да себеп Башкаруучу түзүмдөрдү түзүү (б.а., анткени, методго) кадимки жол менен аракет кылуу. Бирок inter_return себептери, анын дубасын бир кайтып келиши үчүн өз ара эми себептери, анын дубасын кабыл кайтып ара кайрылып. Мисалы, "Жаздын баллада", андан кийин иш-аракет inter_return аткарылган ара деп аталган болсо, Жаздын баллада кайтып келет. (Бул өз ара чалуулар ара кайтып терип тилмечтин, анда inter_return анын дубасын кабыл кайтып ара себеп болот, ал эми, мындан ары да өз ара себеп болот дегенди билдирет.)

Өз ара учурунда, чийки режими бардык белгилер учурдагы өтүп турушу үчүн колдонулган жол . Эгер заряд жараяны жумуш башкаруу сигналдарды кармап, ага бир аялдама белги жиберген болсо, токтоп калат (демейки ^ Z менен). аны кайра үчүн, ( "өлтүрүү -CONT" деген сыяктуу) сигнал мындан ары да жиберет. Эгер чын эле ушундай бир SIGSTOP жөнөтүү келсе жараяны (^ Z менен), csh биринчи, анан программасын иштеп анекдоттор карап көрөлү. Башка жагынан алып караганда, силер биринчи чалуу котормочу, өзүн күтүш үчүн SIGSTOP жөнөтүү үчүн келсе, (балким, качып мүнөзүн колдонуу менен), андан кийин ^ Z басып.

котормочу кирип, өз ара буйруктарды аткаруудан уккубуз үчүн кыскача эле сап-дене түгөй колдонсо болот. мурунку терминал режими кыл дене жуп орган ишке ашырылып жаткан кезде колдонулат.

ылдамдык алуу үчүн, иш-аракеттер демейки чийки режиминде аткарылат. -reset желек, ал өз ара аракеттеринен (дайыма, бышырылган режимин) аткарылган чейин режимде керек Терминалды чыгарды. белги режими (кээ бир системалары боюнча терминалдык айдоочусун өкүнүчтү өзгөчөлүктү) жоголуп кетиши мүмкүн жандырылып жатканда кирип кетсек. Сиздин иш-аракет бышырылган режиминде иштеп көз каранды болсо, саналат -reset колдонуу үчүн гана себеп.

-echo желек кайра төмөндөгү үлгүгө дал белгилер жөнөтөт жүрүшүндө ар бир тамга окуп катары түзүлгөн. Колдонуучу жарым-жартылай терилген үлгүлөрүнүн келген пикир экенин көрө алгыдай болушу керек бул пайдалуу болушу мүмкүн.

Үлгү айтылып жатат, бирок, акыры дал албаса, каармандар бөлүнгөндүктөн жиберилет алууда . Бөлүнгөндүктөн, анда иштеп , анан аларды кайталанууда, колдонуучу тамгаларын эки жолу көрүшөт. -echo балким колдонуучу кырдаалдарда гана тиешелүү үлгү аягына эмес, күмөн болуп саналат. Мисалы, төмөнкү үзүндү rftp, Recursive-FTP скрипт колдонуучу кирип ~ г., ~ б, же ~ л, алуу, кой, же recursively учурдагы каталогун Тизмеге шартталгандыгын аныктаса, келет. Бул колдонуучу туура тышкары, ~ башка эч нерсе менен терүү үчүн күмөн, мында да, алар жөн эле баары натыйжасын көрмөксөн деп, алыс кадимки FTP буйруктарынан болуп саналат.

өз ара {-echo ~ г {getcurdirectory 1} -echo ~ л {0} getcurdirectory -echo ~ б {putcurdirectory}}

-nobuffer желек чыгуу үчүн төмөнкү үлгүгө дал белгилер жөнөтөт жараяны каармандар окуп жатабыз.

Эгер программа каалайм бул пайдалуу шайкеш үлгү кайра. Мисалы, төмөнкүлөр адам терүү (а Хейз стилиндеги модем) кайда мониторинг жүргүзүү үчүн колдонулушу мүмкүн. Ар бир жолу "АТД" скрипт линиясын калган жетсин көрүнүп турат.

Жаздын lognumber {} {-nobuffer томондогу өз ара "\ р (*)." Кайра $ "[саат түзүлүшү [саат секунд]]: терилген $ interact_out (1-сап)," журналы салат} -nobuffer "АТД" lognumber ара

Өз ара учурунда log_user мурдагы пайдалануу эске алынбайт. Атап айтканда, өз ара бул колдонуучунун далилсиз ара каалагандыктан эмес, чеке-жылдан бери (стандарттык өндүрүшүнүн жөнөтүлөт) катталышы анын көлөмүн мажбур кылат.

Епо желек эч төмөнкү негизги дене түгөй учурдагы өндүрүү үчүн колдонулат себеп алууда . Бул, мисалы, пайдалуу болушу мүмкүн менен мамилелешүүдө, Себайот кируу сессиянын ичинде керексиз белгилерди жиберем.

Алыдын ала, ара колдонуучу stdin жазуу жана талап боюнча stdout окуп болууну талап кылат жараянынын өзү. -u желек ( "тутуу" үчүн) деп колдонуучу карап ара кылат жүрүшүндө анын аргументи (бир топко бөлүнгөндүктөн номуру болушу керек) менен аталган.

Бул ачык укурукту колдонбостон бириктирилсин эки тиешеси жок жол берет. катадан арылтуу боюнча жардам алуу үчүн, дарт ар дайым stderr барып күтүлөт (же белгилүү бир даярдоо жана мүчүлүштүктөрдү маалымат үчүн stdout). Ошол эле себептен, тилмеч буйрук stdin чейин өз ара окуп берет.

Мисалы, кийинки үзүндүсүндө бир кирүү жараткан жараянын . Андан кийин бул колдонуучу (көрсөтүлгөн эмес), акыры экөө байланыштырат Топтон. Албетте, ар кандай технологиялык кирүү үчүн алмаштырылышы мүмкүн. А кабыгы, мисалы, колдонуучу каттоо эсебин жана сырсөзүн камсыз иштөөгө мүмкүндүк берет.

кайра колдонуучу # чыгып икринка кирүү белгиленген кирүү $ spawn_id икринка башындагылар модем # терүү -u $ эсеп ара кире байланышуу

Бир нече жол менен өндүрүүнү жөнөтүү үчүн, бир бөлүмдүн желеги менен мурда ар бир икринка ID тизмеси. Бир киргизүү топ чыгаруу икринка ИД бир -input желеги менен мурда бир икринка ID тизме менен аныкталат. (Ошол any_spawn_id байланыштыруу маанилүү эмес, башка да -input жана бөлүмдүн буйругу талап-жылы -i желегине окшош түрүндө тизмесин талап кылынышы мүмкүн.) Бардык кийинки желектер жана Саптар (же оюу) башка ушул киргизүү үчүн колдонулат - киргизүү желек кездешет. Эч кандай -input пайда болсо, бөлүмдүн "-input $ user_spawn_id бөлүмдүн" билдирет. (Ошо сыяктуу эле, -input жок, чиймелер менен.) Бир -input көрсөтүлгөн болсо, анда ал $ user_spawn_id жокко чыгарат. Экинчи -input көрсөтүлгөн болсо, анда ал $ spawn_id жокко чыгарат. Кошумча -input желектер белгилениши мүмкүн.

эки ойдо киргизүү, алардын натыйжалары spawn_id жана $ user_spawn_id (тескерисинен) $ катары көрсөтүлгөн ээ демейки иштетет. Бир -input желеги жок бөлүмдүн желеги менен пайда болсо, анда ошол каармандар жол жарактан чыгарылат.

-i желек башка эч -input же бөлүмдүн желектер колдонулган учурдагы spawn_id алмаштырууну киргизет. Бир -i желеги бир епо желегин билдирет.

Бул кыйыр икринка даректерин колдонуу менен жолугуп жаткан жараяндарды өзгөртүүгө болот. (Кыйыр икринка лерин күткөн буйругу боюнча бөлүмдө жазылган.) Түз икринка аныктагычтары -i менен көрсөтүлүшү мүмкүн, -u, -input, же бөлүмдүн желектер.

котормочу [args]
колдонуучунун өз ара болушу күтүлөт жана TCL буйрулат түрткү болот. Ар бир буйруктун натыйжасы басылып жатат.

Мисалы, себеби башкаруу структуралар үзүлүшүн жана мындан ары да ошондой иш-аракеттер (мисалы үчүн, методго) кадимки жол менен аракет кылуу. Бирок inter_return анын дубасын бир кайтарып алып туруу тилмечти себеп болот, ал эми анын дубасын кабыл кайтып себептери тилмечти кайрылып. Мисалы, "Жаздын баллада", андан кийин иш-аракет inter_return аткарылган котормочу деп аталган болсо, Жаздын баллада кайтып келет. Кайсы болбосун башка буйрук себептери тилмеч жаңы буйрук боюнча айтымында мындан ары да.

Алыдын ала, дароо эки бүтүн бар. Биринчи бүтүн баалоо кабат жука айтылат (б.а., Tcl_Eval деп да канча жолу). Экинчи бүтүн TCL тарыхы аныктагыч болуп саналат. тез кайра балл кийинки тез болуп калат "prompt1" деп аталган жол-жобосун аныктоо менен белгилениши мүмкүн. билдирүүсү ачык орун бар болсо, кашаа, кесүү, же кичине, орто туруу ( "+>" демейки) NEWLINE боюнча берилет. экинчи сап "prompt2" деп аталган жол-жобосун аныктоо менен берилиши мүмкүн.

Тилмеч учурунда, бышырылган режими анын экеним чийки режимин колдонгон болсо да, колдонулат.

Stdin жабык болсо, тилмеч учурда кийинки аргумент талап кылынса, анда -eof желек колдонулат каралбаса, кайтып келет.

log_file [args] [[биригип] билэ]
Бир аты берилген болсо, log_file делосуна сессиясында (ошол маалда башынан тартып) бир протоколго жазылып калат. эч кандай талаш-тартыш болсо да берилген log_file жазып калат. Ар бир мурунку журналы билэ жабылган.

Анын ордуна бир аты, бир TCL билэ аныктагыч ачкыла же -leaveopen желектерин аркылуу берилиши мүмкүн. Бул икринка буйругуна окшош. (Кошумча маалымат алуу үчүн туудурган карагыла.)

-a желек log_user буйругу менен тыюу деп катталышы чыгаруу күчтөр.

Алыдын ала, log_file буйрук бир сессиянын ичинде бир нече жолу жок жана кирип буруш үчүн жөндөмдүү болуу жайлуулугу, аларды truncating ордуна эски материалдар менен appends. Материалдары кыскарат үчүн, -noappend желегин пайдаланууга.

Бах, желек себеп берген акыркы эмес маалымат далилдерди сүрөттөмө кайтып log_file.

log_user Бах | 0 | 1
Алыдын ала, жөнөтүү / диалог stdout менен кирген деп күтүшөт (жана эгер ачык журналына жазылып). stdout кирип "log_user 1" буйрук "log_user 0" жана reenabled тарабынан өчүрүлөт. журналына жазылып кирип өзгөртүлбөйт.

Бах, желек себеп берген акыркы эмес маалымат далилдерди сүрөттөмө кайтып log_user.

match_max [-d] [-i spawn_id] [көлөм]
талап боюнча ички колдонгон аймак (байттар менен) өлчөмүн аныктайт. Эч кандай көлөмү аргументи менен, учурдагы көлөмү кайтарылып берилет.

-D желеги менен, демейки көлөмү белгиленет. (Баштапкы демейки 2000 болот) -i желеги менен, көлөмү деген икринка ID үчүн белгиленген, эгерде ал учурдагы үчүн коюлган алууда .

Каптама [- # spawn_id] [- # spawn_id] [...] программа [args]
токтотот учурдагы күтүш программасынын ордуна "программасы args" аткарат. бул кирүү кабыгы болсо, бир жылаңач ташымалдоо аргумент буйрук ысмынын алдында ташымалданбаган мажбурлайт. Бардык spawn_ids аргумент катары аталган башка жабык. Бул деген билэ белгилер көздөй бөлүштүрүлүп.

Spawn_ids мураска жаңы программага аныктагычтарды берүүгө бөлүштүрүлүп. Мисалы, төмөнкү сызык шахмат чуркап, аны азыркы менен көзөмөлгө алууга мүмкүндүк берет жүрүшүндө - деп, бир шахмат кожоюн.

Каптама -0 $ spawn_id -1 $ spawn_id -2 $ spawn_id шахмат

Бул болсо, "-С өз ара" караганда бир топ натыйжалуу болот, ал талап-жылдан бери өз ара программаланган кылууга жөндөмдүү курмандыкка технологиялык контролдоо боюнча мындан ары болуп саналат.

эч кандай көзөмөлдөө терминал камсыз кылынат деп жазылган. Ошентип, сен стандартты киргизүү ажыратуу же remap болсо, программаларды жумуш көзөмөл кыла (кабыгынын, кирүү, ж.б.), туура иш эмес.

паритеттик [-d] [-i spawn_id] [балл]
паритеттик кармалат же бөлүнгөндүктөн жараяндардын өндүрүшүнүн тартып кетирүү керекпи же жокпу деп аныктайт. Мааниси нөлгө барабар болсо, паритеттүү сыйрып жатат, эгерде аны чечип эмес. Эч кандай баалуулугу аргументи менен, учурдагы наркы кайтарылып берилет.

-D желеги менен, демейки паритети балл белгиленет. (Баштапкы демейки 1, башкача айтканда, паритеттүү сыйрып эмес.) -i желеги менен, паритеттүү балл деген икринка ID үчүн белгиленген, эгерде ал учурдагы үчүн коюлган алууда .

remove_nulls [-d] [-i spawn_id] [балл]
nulls кармалат же бөлүнгөндүктөн жараяндардын өндүрүшүнүн тартып үлгү дал келген же өзгөрүлмө expect_out же interact_out сактоону алынып жаткан жокпу, аныктайт. Наркы 1 болсо, анда nulls алынып салынат. Мааниси 0 болсо, nulls жок эмес. Эч кандай баалуулугу аргументи менен, учурдагы наркы кайтарылып берилет.

-D желеги менен, демейки маани белгиленет. (Баштапкы демейки 1, башкача айтканда, nulls алынып салынат.) -i желеги менен, нарк деген икринка ID үчүн белгиленген, эгерде ал учурдагы үчүн коюлган алууда .

Nulls алып жаткан жокпу, лог жана stdout үчүн күчүн байт жазат күтүлөт.

жөнөтүү [-flags] сап
Азыркы сапты жөнөтүшү алууда . Мисалы, буйрук

"Деп жазып дүйнө \ R" жөнөтүү

белгилер, Helloworld учурдагы жиберет алууда . (TCL бир камтыйт printf негизсиз татаал саптарды курууга болот деген сөздөр буйрук (аталган формат).)

Каармандар кайра мүнөзү жөнөтүлөт чейин сап-түрдөгү киргизүү менен программалар тамга окуган жок болот, бирок дароо жөнөтүлөт. А кайра мүнөзү "\ R" белгиленет.

- желек эмес, бир туунун, бир сап катары чечмеленбөөгө кийинки аргумент мажбурлайт. Ар бир сап менен коштолушу мүмкүн ", -" чындыгында желегине окшош же жокпу. Бул кокустан желектери сыяктуу карагандар менен түртүп жаткан жок өзгөрмө саптарды тактоо үчүн ишенимдүү механизмин камсыз кылат. (Бардык менен башталган саптар "-" келечектеги жолдору үчүн сакталат.)

-i желек сап деген spawn_id жөнөтүлөт келгенин жарыя кылат. Эгерде spawn_id user_spawn_id жана терминалдык чийки режиминде, жип менен Newlines алар терминалы бышырылган режиминде болсо, пайда үчүн кайра-NEWLINE тизилүү которулат. -raw желеги Бул котормону өчүрөт.

-null желек анык белгилер (0 байт) жөнөтөт. Алыдын ала, бир нөл жөнөтүлөт. Бүтүн жөнөтүү канча nulls көрсөтүүгө -null болот.

Брейк желек үзүлүп абалын түзөт. икринка ID "ачкыла туудурган" аркылуу ачылган Телетайп түзмөк жөнүндө сөз болсо, бул бир гана мааниси бар. Эгер лдъш болсо жараянын мындай учунда эле, эс алуу үчүн бир нерсе жыйын керек.

Ошентип, компьютер эле outtype эч качан, эч бир адам үчүн иштелип чыккан киргизүү чекти outtypes жалпы жагдайга кабылбаш сатылышы желек күчтөр чыгаруу, "жай" жибериле турган аймак . Бул багыт эки элемент тизмесин талап кылынат өзгөрмө "send_slow" наркы тарабынан көзөмөлдөнөт. Биринчи элемент байттар саны atomically жөнөтүү сүрөттөгөн бир бүтүн болуп саналат. экинчи элемент атомдук бөлүнүшү керек жөнөтөт турган канча секунд сүрөттөйт реалдуу саны болуп саналат. Мисалы, "белгиленген send_slow {10 001}" жиберип, ар бири 10 белгиден ортосунда 1 миллисекунда менен саптарды жөнөтүү үчүн "сатылышы жиберем" мажбур болмок.

-h желек күчтөрү чыгуу жибериле турган (бир) адам, чынында, терип сыяктуу. Адам сымал кечигүүлөр каармандардын ортосунда пайда болот. (Алгоритм бул колдонмону жараша өзгөртүүлөрдү менен Weibull бөлүштүрүү, негизделген.) Бул багыт беш элемент тизмесин алып өзгөрмө "send_human" наркы тарабынан көзөмөлдөнөт. алгачкы эки элементтер секунд каармандарынын орточо interarrival убактысы болуп саналат. Биринчи демейки боюнча колдонулат. Экинчи кээде ушундай бийлик пайда тымызын токтоп тууроочу сөздөрдүн жалгоолорусуз боюнча колдонулат. үчүнчү параметр 1 негиздүү өзгөрүлмөлүү болуп саналат өзгөрүлүшүнө чара .1, өтө өзгөрүлмөлүү болуп саналат, ал эми 10 топ өзгөрүлбөс болуп саналат. ашкере 0 үчүн чексиздикке болуп саналат. Акыркы эки параметрлер, тиешелүүлүгүнө жараша, минималдуу жана максималдуу interarrival убакыт. минималдуу жана максималдуу акыркы жана "клип" акыркы жолу колдонулат. акыркы орточо эгерде минималдуу жана максималдуу клип жетиштүү баалуулуктар берилген орточо абдан эле ар түрдүү болушу мүмкүн.

Мисалы, төмөнкү буйрук орозо жана ырааттуу көчүрмөчү туурагылары келчү:

белгиленген send_human {1 3 1 .05 2} -h "Мен ачкамын. Кудайдын түшкү кылсын." жөнөтүү

ал эми төмөнкүлөр сода кийин көбүрөөк ылайыктуу болушу мүмкүн:

белгиленген send_human {4, 4 2, 5 100} -h "Goodd кече ура!" жөнөтүү

жиберерин талашка ката жана өзгөртүүлөрдү даярдоо менен сен жойууга кырдаалдарды орното аласыз, бирок каталар, жашоого эмес экенин белгилешет.

жай өндүрүш толбогон жана укук-стили чыгарылышы, жөнөтүп тынымсыз үчүн, анык белгилер жөнөтүү желектери ара чыгарып салуу болуп саналат. Бир гана акыркы көрсөтүлгөн колдонулат. Мындан тышкары, эч кандай сап аргумент анык белгилер же тыныгуу жөнөтүү желектер менен аныкталышы мүмкүн.

Бул биринчи жөнөтүү алдында бир жакшы идея жүрүшүндө бир талап менен. күтөм күткөн кайра жөнөтүү мүмкүн эмес, ал эми башталат. Атап айтканда, биринчи жөнөтөрдөн мурда аяктайт, анда кайра иштеп баштайт, сен маалыматтарды четке ээ калышыбыз мүмкүн. Өз ара программалар эч кандай баштапкы турууну сунуш жагдайларда кечиктирүү менен жөнөтүү алдында болот, ошондой эле:

# Сынып кантип хакерлерге ишарат берип алдын алуу үчүн, # Бул система сырткы сырсөз талап кылуусун эмес. # Шмидт уйку 5 жөнөтөрдөн сырсөз \ р very.secure.gov икринка TELNET аягына чейин 5 секунд күтө

exp_send жөнөтүү үчүн өлкө болуп саналат. Сиз Expectk же Tk чөйрөдө күтүш башка колдонуу болсо, такыр башка максатта салттуу тарабынан аныкталат жөнөтөт. exp_send айлана-чөйрө менен дал келүү максатында гана берилет. Окшош Н башка күтүш башка жөнөтөрдөн буйрук берилет.

send_error [-flags] сап
чыгаруу азыркы ордуна stderr үчүн жиберилген башка экенин, жөнөтүү сыяктуу иш .

send_log [-] сап
сап гана журналы File (log_file карагыла.) жөнөтүлөт, бир гана айырмасы, жөнөтүү сыяктуу далилдер жок журналы билэ ачык болсо эске алынбайт.

send_tty [-flags] сап
чыгуу үчүн жиберилген башка, жөнөтүү сыяктуу / иштеп чыгуучунун / Телетайп учурдагы көрө алууда .

send_user [-flags] сап
чыгаруу азыркы ордуна stdout үчүн жиберилген башка экенин, жөнөтүү сыяктуу иш .

уйку секунд
үчүн скрипт себеп уктап секунд берилген саны. Seconds бир ондук сан болушу мүмкүн. Бузулса, (жана сиз Expectk колдонуп жаткан болсо Tk окуялар) уктап күтүлөт, ал эми иштелип чыгат.

икринка [args] программа [args]
бир жаңы пайда алуу "программасы args" чуркап. Анын stdin, алар окуу жана башка буйруктарына күтүш менен жазылышы мүмкүн деп stdout жана stderr күтүлөт туташтырылган. Байланыш жакын же сынган жараян өзү билэ белгилер кандайдыр бир жабат.

Жүргөндө жараян түрткү берген Найти жатат, өзгөрүлмө spawn_id деп айткан бир баалоо коюлса алууда . Жараян spawn_id сүрөттөгөн "учурдагы эсептелет жараян ". spawn_id жумуш камсыз мындайча айтканда, окуу же жазуу жүзүндө болушу мүмкүн.

user_spawn_id колдонуучуга айтылат сүрөттөгүч камтыган глобалдык өзгөрмө болуп саналат. Мисалы, spawn_id бул мааниге коюлса да, күткөн expect_user сыяктуу кыймылдайт.

.Мен error_spawn_id стандарттык ката айтылат бир сүрөттөгүч камтыган глобалдык өзгөрмө болуп саналат. Мисалы, spawn_id бул мааниге коюлса да, send_error сыяктуу кыймылдайт жиберем.

tty_spawn_id / четтөө / Телетайп сөз бир сүрөттөгүч камтыган глобалдык өзгөрмө болуп саналат. / Иштеп чыгуучунун / Телетайп (мисалы, темалар,, же партия ариби менен эле) жок болсо, анда аныкталган эмес tty_spawn_id. Бул үчүн сыноо болушу мүмкүн:

Эгерде {# / иштеп чыгуучунун / Телетайп бар} башка {# / иштеп чыгуучунун / Телетайп, балким, темалар боюнча # нерсе жок, партия менен, же ариби боюнча} {[маалымат tty_spawn_id vars]}

икринка UNIX кайра иштетүү ID. Жок болсо, кайра бардыгы болуп, 0 кайтарылып берилет. Өзгөрмө spawn_out (кул, аты, атасынын аты) Pty кул аппараттын атынан коюлган.

Алыдын ала, икринка буйрук атын жана далилдерди кайталанууда. -noecho желек аялдамаларды бул ишти туудурган.

-console желек себептери Console Output бөлүнгөндүктөн аны кайрадан жөнөтө турган иш . Бул бардык системалар боюнча колдоого алынбайт.

Ички, икринка бир Pty колдонот, колдонуучунун Телетайп эле жол менен ишке. Бул мындан ары бардык орнотуулары, "акыл-эси соо" болуп саналат (stty ылайык (1)) ошондуктан демилгеленди жатат. Өзгөрүлмө stty_init аныкталган болсо, анда мындан ары түзүмүн катары stty далилдерди стилинде которулат. Мисалы, "тобу чийки stty_init" мындан ары чийки режиминде баштоо үчүн жараяндарды терминалдар бөлүнгөндүктөн зыян да келтирет. -nottycopy колдонуучунун Телетайп негизинде Initialization дейди. -nottyinit "акылга" Initialization дейди.

Адатта, икринка ишке ашырыш үчүн бир аз убакыт талап кылынат. Эгер сиз өтө көп убакытты алып туудурган байкап турган болсо, анда, балким, өткүс жаткан ptys дуушар болот. сыноолордун бир катар туура эмес жол менен чырмап алчу нерселерден качууга ptys боюнча шайланат. (Бул өткүс Pty 10 секунд кетиши.) Жүгiрiс -d тандоосу менен талап так мамлекеттердин көп ptys дуушар болуп жатат деп күтүш болсо, көрсөтүлөт. Сиз бул ptys тиркелет жаткан жараяндарды өлтүрүү мүмкүн эмес болсо, анда сенин чыгуунун жалгыз жолу өчүрүп болушу мүмкүн.

Программа ийгиликтүү бөлүнгөндүктөн мүмкүн эмес болсо, анткени Шмидт (2) албаса (мисалы, программа жок ала албай калганда), ката жөнүндө билдирүү кийинки өз ара тарабынан анын демилгечисине кайра кайтарылат, же, эгерде программа чуркап натыйжасы деп ката билдирүү өндүрүлгөн эле буйрук күтөт. Бул жүрүш сонундарын ашыруу табигый натыйжасы болуп саналат. Ички, бөлүнгөндүктөн, андан кийин айрыларды туудурган жараян түп күтүш менен байланышууга эч кандай жол жок жүрүшүндө spawn_id аркылуу байланыш менен гана.

Ачкыла желеги бир TCL билэ таануучу катары чечмеленбөөгө кийинки аргумент кылат (б.а., ачык менен кайтып келген.) Икринка номуру анда ал бөлүнгөндүктөн болсо катары пайдаланылышы мүмкүн жараян . (Билэ аныктагыч мындан ары колдонулушу керек.) Мындай кокустуктар сиз, бир Pty колдонбостон бөлүнгөндүктөн жараяндар сыяктуу чийки түзмөктөрдү, материалдары жана газ түтүктөрүн мамиле берет. 0 эч кандай байланышы жок экенин көрсөтүп турат кайтарылып берилет жараян . Бардыгы үчүн байланыш качан жол жабык, ошондуктан TCL билэ аныктагыч болуп саналат. -leaveopen желек икринка номуру жабык кийин да ачык бойдон калтыруу керек билэ аныктагыч себеп -leaveopen башка ачкыла окшош.

-pty желек ачылат үчүн Pty чыгышына себеп болот, бирок эч кандай иш жаратты. 0 эч кандай байланышы жок экенин көрсөтүп турат кайтарылып берилет жараян . Spawn_id адаттагыдай эле белгиленген.

Өзгөрмө spawn_out (кул, FD) Pty кул ылайык билэ таануучу коюлду. Ал "жакын кул" менен жаап койсо болот.

-ignore желек аттары белги бөлүнгөндүктөн аны көрмөксөн турган иш . Болбосо, сигналдар демейки жүрүм-ала. Signals ар бир сигнал өзүнчө желегин талап кыларын эске албаганда, тузак буйрук катары аталган.

strace деңгээл
ишке ашырылып жаткан чейин даярдалган басылма, төмөнкү сөздөрдү пайда болот. (TCL анын изи буйрук өзгөрмө баяндалган.) Деңгээл изин чалуу кабат канчалык алыс түшүп турат. Мисалы, чалууларды-жылдын алгачкы 4 көлөмүн жөнгө салуу, ал эми төмөнкү буйрук сызыгынын күтүлөт, төмөн да эмес.

-C "strace 4" script.exp күтөт

Бах, желек себеп берген акыркы эмес маалымат далилдерди сүрөттөмө кайтып strace.

stty args
Ошо сыяктуу эле, тышкы stty буйругу менен терминалдык режимдери өзгөртөт.

Алыдын ала, контролдоочу терминалы мүмкүнчүлүк болот. Башка терминалдардын саны, алардын ичинен: "статусун берүүнү суранат буйрук натыйжасында аны кайра толуктоо аркылуу кирүүгө болот. Блог Статусунда суралса жана контролдоочу терминал кирүү жатат, чийки жана Эхо атрибуттарын мурунку абалы кийин болушу мүмкүн түрүндө кайтарылып берилет буйругу менен колдонулат.

Мисалы, талаш-чийки же чийки режимге терминал койду -cooked. -raw же бышырылган аргументтер бышырылган режимге терминал койду. Аргументтер кошулушат жана тиешелүүлүгүнө жараша туруу жана noecho режимге терминал койду -echo.

төмөнкү мисал убактылуу өтсө да иштен кандайча көрсөтүп турат. Алардын сырөздөрдү колдонууга жол бербөө үчүн, бул башка-автоматтык жазууларында колдонулушу мүмкүн. (Бул боюнча төмөнкү ишарат EXPECT боюнча талкуу дагы кара.)

stty -echo send_user "Password:" "(*.) \ н" expect_user томондогу белгиленген сырсөз $ expect_out (1-сап) stty Эхо

системасы args
Sh (1) ал терминалдан буйрук катары терилген болгон эле болсо, киргизүү, ошондой эле args берет. Номиналдык мөөнөтү бүткөнгө чейин күтүп күтүлөт. Ш. кайтып Статус Шмидт анын кайра статусун алып барат, ошол эле жол менен чечүүгө болот.

Ариби менен stdin жана stdout Жашыруу кайсы Exec айырмаланып, системасы жок даректи (сап өзү тарабынан көрсөтүлгөн башка) ишке ашырат. Демек, / четтөө / Телетайп менен түздөн-түз сүйлөшүү керек программаларды колдонууга болот. Ошол эле себептен, системасында жыйынтыктарды журналда жазылган эмес.

эни [args]
убакыт кайтарат. эч кандай далилдер менен, доорунун бери секунд саны кайтарылып берилет.

-format желек кайтып келген, бирок strftime үчүн POSIX эрежелер боюнча жүргүзүлөт алмаштыруу менен сап киргизет. Мисалы% га кыскартып, шаарчада аты (мисалы, убакыт) менен алмаштырылган. Башкалар болуп төмөнкүлөр саналат:

% Га кыскартылган шаарчада аты% A толук шаарчада аты% б кыскартылып айдын аталышы% B толук ай аты% C Дата-жолу катары менен: ай (01-31% H саат убакыт 6 11:45:56 1993% г күнү (00-23)% I саат (01-12)% J күн (001-366)% м ай (01-12)% M Мүнөт (00-59)% б Жоопсуздарды же саат% S экинчи (00-61) % у күн (1-7, Дүйшөмбү жуманын биринчи күнү болуп саналат)% U жумада% (00-53, биринчи жекшемби бир жуманын биринчи күнү болуп саналат) V жума (01-53, ISO 8601 стили) күнү W% (0 6)% W аптада (00-53, биринчи Дүйшөмбү эле жумада бир)% х датасы убакытта биринчи күнү болуп саналат: убакыт 6 1993% X убакыт катары: 23:59:59% и-жыл (00-99) % Y жыл катары: 1993% Z убакыт алкагын (же аныкталган жок болсо, эч нерсе) уругун пайыз белгиси %%

Башка% өзгөчөлүктөрү белгисиз болуп саналат. Башка бир белги жете аркылуу берилет. C тил гана колдоого алынат.

-seconds желек доору үлгүдөгү кайсы бир булагы катары колдонулушу керек, анткени секундадан бир катар киргизет. Антпесе, учурдагы убакыт колдонулат.

-gmt желек күчтөрү эни чыгаруу пайдаланууга GMT алкагын. жок желеги менен, жергиликтүү убакыт алкагын колдонулат.

тузак [[буйрук] сигналдар]
берилген сигналдардын бир келечектеги түшкөн жазага тартылат берген буйругу себеп болот. команда дүйнөлүк көлөмдө жүргүзүлөт. Команда жок болсо, сигнал аракет кайтарылып берилет. Буйрук сап SIG_IGN болсо, сигналдар этибарга алынбайт. Буйрук сап SIG_DFL болсо, сигналдар системасы демейки алып жатышат. сигналдар бир белги же сигналдардын тизмеги да болуп саналат. Signals белги (3) ылайык сандын же каймана мааниде белгилениши мүмкүн. "SIG" Ле капарга албай коюуга мүмкүн.

Эч кандай далилдер (же аргумент санын) менен, тузак азыркы учурда ишке ашырылып жаткан тузак буйрук белги санын кайтарат.

Буйрук алгач иштеп баштаганда -code желек кандай коду ордуна буйрук кайра коду колдонот TCL кайтып болду.

-interp желек команда тузагы деп жарыяланган эле эмес, иштеп баштаган учурда активдүү котормочунун жардамы менен баалоо үчүн келет.

Аталышы желек учурда ишке ашырылып жаткан тузак буйрук сигнал наамын кайтарып берүүнү тузак буйрук кылат.

-Макс желек коюлган болот ири сигнал санын кайтып тузак буйрук кылат.

Мисалы, буйрук "тузак {send_user" О кокуй! "} SIGINT" ини "О кокуй!" ар бир жолу колдонуучу ^ C кысат.

Алыдын ала, SIGINT (C, адатта, ^ басуу аркылуу алууга болот) жана SIGTERM себеп чыгуу күтүлөт. Бул башталат күтүш жатканда демейки тарабынан түзүлгөн төмөнкү тузакка менен түшүндүрүүгө болот.

тузак чыгуу {SIGINT SIGTERM}

Сиз мүчүлүштүктөрдү баштоо үчүн -D желегин колдонуп келсе, SIGINT ара мүчүлүштүктөрдү баштоо үчүн кайра каралып турат. Бул төмөнкү тузакка менен шартталган:

тузак {exp_debug 1} SIGINT

мүчүлүштүктөрдү тузак чөйрө өзгөрмө бир тузак буйрук EXPECT_DEBUG_INIT жолу менен өзгөртүлүшү мүмкүн.

Силер, албетте, бир гана сиздин ариби үчүн тузак буйруктарын кошуп, бул да жокко чыгара алат. Атап айтканда, сиз өз "тузак чыгуу SIGINT" болсо, бул мүчүлүштүктөрдү тузак алмаштырылат. Бул бардык мүчүлүштүктөрдү таанышуудан колдонуучуларды алдын алуу үчүн керек болсо пайдалуу.

ал иштеп жатат, силер SIGINT, өз тузак аныктоо, бирок мүчүлүштүктөрдү деле тузак үчүн келсе, пайдалануу:

Эгерде {! [exp_debug]} {тузак mystuff SIGINT}

Же болбосо, башка бир белги аркылуу мүчүлүштүктөрдү үчүн тузак болот.

тузак Бул күтүш үчүн ич-ара колдонулган, ошондой эле SIGALRM үчүн иш-аракеттерди жокко жол бербейт. үзүү буйрук топтому SIG_IGN (четке) үчүн SIGALRM. Сиз кийинки икринка буйрук учурунда көп, аны өчүрүп, бул Дайындарды болот.

Көбүрөөк маалымат алуу үчүн белги (3) карагыла.

күтүп [args]
бир топко бөлүнгөндүктөн чейин кечиктирип жол (же учурдагы жол жок деген болсо) токтотулат.

адатта төрт бүтүн тизмесин кайтарат күтүп. Биринчи бүтүн боюнча PID эмес иш күтүп турган эле. Экинчи бүтүн тиешелүү икринка номуру болот. Иштеп жаткан система ката кетти, же 0, эгерде болсо, үчүнчү бүтүн -1 болуп саналат. Үчүнчү бүтүн 0 болсо, төртүнчү бүтүн бөлүнгөндүктөн аны кайтарып статусу алууда . үчүнчү бүтүн -1 болсо, төртүнчү бүтүн иштетүү тутуму менен белгиленген катасы наркы болуп саналат. глобалдык өзгөрмө ERRORCODE да белгиленет.

Кошумча элементтер буктурмада кайтып наркы жылдын акырына карата абал боюнча пайда болот. Кошумча бешинчи элемент маалымат тобуна аныктайт. Учурда, бул элементи үчүн гана мүмкүн наркы учурда кийинки эки өзгөрмө C-стили сигнал аты менен кыска тексттик сүрөттөлүшү болуп саналат CHILDKILLED жатат.

-i желек жарыялайт жараянын деген spawn_id (NOT тиешелүү күтүп жараян ID). Бир sigchld сигнал чыгуучунун ичинде, ар кандай топко бөлүнгөндүктөн аны күтүүгө болот жүрүшүндө икринка ID -1 колдонуу менен.

-nowait желек ийгиликтүү арам көрсөтүү менен токтоосуз кайтарып берүүгө күтүп келет. Качан жараян (кийинчерээк) чыгып, ал дароо эле ачык арам муктаж болбостон жок болот.

Күтүү буйрук да эки ача карата арам пайдаланылышы мүмкүн жүрүшүндө далилдерди "-i -1" колдонуу. бөлүнгөндүктөн жараяндар менен аны пайдалануу айырмаланып, бул буйрук каалаган убакта аткарылган. Турган эч кандай көзөмөл жок жараяны оруп жатат. Бирок, кайра балл текшерүүгө болот жараян ID.

АЗЕРБАЙДЖАН

жазуусу эки камтылган жазууларында күтүш үчүн китепканаларда билет күтүлөт. Бул өзгөрүүлөр боюнча аталган каталогдорго тарабынан аныкталат exp_library жана exp_exec_library. Эки башка жазууларында тарабынан пайдаланылышы мүмкүн пайдалуу материалдары камтууга тийиш.

exp_library архитектура-көз карандысыз документ бар. exp_exec_library архитектура-каранды материалдары бар. Сиздин тутумуна жараша, эки каталогдор толугу менен бош болушу мүмкүн. билэ $ exp_exec_library / кошка-паддарды бар сенин / бин / кошка паддарды же демейки боюнча баяндалат.

PRETTY-Басмаканалардын

А vgrind определение сулуу-басма скрипттерин күтүш үчүн жеткиликтүү. Бөлүштүрүү күтүлөт менен камсыз vgrind аныктама алдыдагы туура эмес орнотулган болсо, анда аны катары колдоно алабыз:

vgrind -lexpect билэни

мисалы

Бул көптөр менен бирге баарын кантип айкын эмес, адам бет сүрөттөйт. Мен окуп жана бөлүштүрүү күтүлөт мисалы каталогуна мисалдарды аракет кылууга чакырабыз. Алардын айрымдары реалдуу программалары бар. Башкалары болсо кээ бир ыкмаларын гана мисал болуп саналат жана албетте, бир-эки эле тез ыкмаларды болуп саналат. ОРНОТУУ билэ бул программалардын тез баяндамасы бар.

Документтер талап (Кара карагыла), ошондой эле пайдалуу. Күтүш мурда котормолоруна тиешелүү бир нече документтер синтаксисин колдонуп жатканда, төмөндөгү негиздери дагы эле жарактуу болуп саналат жана бул адамдын бетине караганда, көптөгөн майда-чүйдөсүнө чейин кирип кетет.

иштеди,

менен карама-каршы келиши мүмкүн Extensions буйругу аттарын күтүлөт. Мисалы, такыр башка максатта салттуу тарабынан аныкталат жиберет. Ушул себептен улам, буйруктарына күтүш көпчүлүгү эле "exp_XXXX" катары жеткиликтүү. Буйруктар жана өзгөрмөлөр "Саясат", "Интер" менен башталып, "түрткү берген", жана "күтүү" нускалары жок. жүргүзүп ортосундагы бул айкалышуусу керек болсо, берилген буйрук аттарын пайдаланып.

Күтүш ченемин аныктоо үчүн жетишерлик либералдык көз карашта турат. Атап айтканда, программа күтүш үчүн атайын буйрук менен окуу өзгөрмө жергиликтүү масштабдагы биринчи издеп, ошондой эле дүйнөлүк көлөмдө, табылган жок болсо. Мисалы, сиз күткөн колдонот жазып, ар бир тартипте "дүйнөлүк күтүү" көрсөтүшү керек жактады. Башка жагынан алганда, өзгөрмөлөр жазылган жергиликтүү көлөмдө дайыма (а "дүйнөлүк" буйрук берилген башка учурларда). икринка тартипте жүзөгө ашырылат, бул себеп көбү жалпы көйгөй болуп саналат. Тартиби тышкары, бардыгы үчүн, мындан ары бар spawn_id жараяны мындан ары жөн эле, анткени ченемин жеткиликтүү болуп саналат. Мындай жол менен "дүйнөлүк spawn_id" деген сөздөр менен толукталсын.

Сиз multispawning мүмкүнчүлүк иштетүү мүмкүн эмес болсо (б.а., система да тандалган (BSD * колдойт. *), Сурамжылоо (SVR> 2), же барабар нерсе), бир гана көзөмөлдөй алат деп күтүш жараянын бир убакта. Бул учурда, spawn_id коюуга аракет жок, эч бир топко бөлүнгөндүктөн, ал эми сен Exec аркылуу ишти аткарууга тийиш жараяны иштеп жатат. Мындан тышкары, бир эле убакта бир нече жол (бири катары пайдалануучу, анын ичинде) талап ала албай калышат.

Терминал параметрлери ариби боюнча чоң таасир тийгизе алат. Мисалы, бир скрипт өтсө да издеп жазылган болсо, анда ал өтсө да өчүрүлгөн болсо, туура эмес болот. Ушул себептен улам, күчтөр, акылга терминал параметрлерин демейки күтүлөт. Тилекке каршы, бул башка программаларды нерселер жагымсыз болот. Мисалы, Emacs кабыгы, "кадимки" карталарын өзгөрткүсү келет: Newlines ордуна ташуу-кайра Newlines боюнча Newlines картага алуу жана өтсө да өчүрүлгөн. Бул киргизүү линиясын түзөтүүгө Emacs пайдаланууга мүмкүндүк берет. Тилекке каршы, балким, бул жок деп ойлойм күтүүгө болот.

Сиз терминалы параметрлерин, анын демейки жөндөө этибарга албай күтүп деп талап кыла алышат, бирок, мисалы, айлана-чөйрө үчүн скрипттерди жазып жатканда, сен абдан этият болушубуз керек. Катышуучунун учурда, жүзүкаралык жана акырына карата сапта чагылдыруулар сыяктуу нерселерге жараша алыс.

Тизме иш жүзүндө бир аргумент же көп болсо, далилдерди бир тизмесине түпөйүл (Тематикалар күтөт жана өз ара) кабыл алынган буйруктар чечим үчүн Heuristic колдонушат. Heuristic тизме менен, чынында, бир нече камтылган \ ээ н алардын ортосунда Художник эмес белгиден менен болгон бир аргумент эмнени билдирет учурда гана ишке ашпай калат. Бул жетиштүү каларлыктай көрүнөт, бирок аргумент "-nobrace" бир аргумент катары катышкан бир гана аргументи мажбурлоо үчүн колдонсо болот. Бул жаман машина түзүлгөн күтүш код менен колдонулушу мүмкүн. Ошо сыяктуу эле, -brace сыяктуу бир нече мыйзам ченемдүүлүктөрү / иш-аракеттерин туура үчүн бир аргумент мажбурлайт.

BUGS

Бул чындыгында программасын "секс" ( "Smart Exec" же "жөнөтүү-талап" боюнча) деген ат менен азгырып, бирок, жакшы сезим (же жөн гана пуритандык) басымдуу болгон.

кээ бир системалары жөнүндө, номиналдык бөлүнгөндүктөн жатканда, ал баары бир Телетайп, бирок качып пайдалана албаган биз тууралуу арбын даттанат. Бул сиздин системасы жөнүндө эч нерсе билбейт деп күтүш контролдоо Телетайп ээ механизмин бар дегенди билдирет. Сураныч, бул эмне таап, мага бул маалыматты жөнөтөбүз.

ULTRIX 4.1 (Бул жерде акыркы нускалары жок дегенде) 1000000 0 барабар болуп жогоруда танапис эсептейт.

Digital UNIX 4.0A (жана, балким, башка котормолорунда) бөлүп баш тарткан ptys сиз sigchld сигнал машыктыруучусу аныктоого болот. Көбүрөөк маалымат алуу үчүн grantpt бетти карагыла.

Эгер буга чейин башка бирөө тарабынан колдонулган бир Pty бөлүүгө аракет талап ушунчалык Irix 6.0 туура Pty уруксаттарды туура эмес, ал кетет. Irix 6,1 жогорулатуу.

Telnet (гана SunOS 4.1.2 боюнча текшерилет) ЖЫЛ коюлбай калса коёт. Бул темалар боюнча бир көйгөй болуп саналат, жана терминине аныктама жок, CGI ариби менен. Демек, ачык, аны орнотуу керек - кайсы түрү менен, адатта, мааниси жок. Бул жөн эле бир нерсеге аныктала элек! Төмөндөгүлөр, балким, көпчүлүк учурларда жетет.

белгиленген окр (мөөнөттүү) vt100

Tip (гана BSDI BSD ылайык текшерилген / OS 3.1 i386) НомиНАлдЫК жана ҮЙ белгиленген эмес, эгерде коёт. Бул боюнча маселе темалар боюнча жана, CGI бул чөйрө өзгөрмө болгонун аныктоого кудурети жетпейт жазууларында. Ошентип, сен ачык аларды керек - кайсы түрү менен, адатта, мааниси жок. Бул жөн эле бир нерсеге аныктала элек! Төмөндөгүлөр, балким, көпчүлүк учурларда жетет.

окр (Shell) / бин / Sh белгиленген окр (ҮЙ) коюлган / окудум / жергиликтүү / бин

Ptys Кээ бир ишке ядро кийин 10 15 секунда кийин окула чыгарылышты (иш жүзүндө алардын саны ишке ашыруу көз каранды болот) чикирди ыргытканына үчүн арналган иш билэ сүрөттөгүч жаап салды. Ошентип, ушул сыяктуу программаларды күтүлөт

икринка күн уйку 20 күтөт

албай калат. Мунун алдын алуу үчүн, Exec түрткү берген эмес, менен эмес өз ара программаларды дуба. Мындай жагдайларда алмашылып, ал эми, мен иш жүзүндө бир жагдайга туш эч качан чындап ара программанын жыйынтыктоочу чыгуу бул жүрүм-улам жоголгон болот.

Башка жагынан алганда, Cray операторлор ptys кийин дароо кандай окула чыгарылышты ыргытып жараян билэ сүрөттөгүч жаап салды. Мен Крей бул билдирди жана алар жиберүү үстүндө иштеп жатабыз.

Кээде бир кечигүү бир калыпка, мындай Телетайп Interface UArt орнотууларды же дал өзгөрүп жатканда эле жооп ортосунда талап кылынат берүү баштоо үчүн карап чендерди / чекесинен токтотуу. Адатта, ар бир экинчи, же эки уктап талап болуп саналат. А күчтүү ыкмасы аппараттык киргизүү кабыл алууга даяр экендигин билдирди чейин аракет болуп саналат. төмөнкү мисал стратегияларын колдонот:

"Р \ ылдамдыгын 9600" жөнөтүүгө; уйку 1 {күтүү укактысы толду { "\ R" жөнөтүүгө; exp_continue} $ тез}

тузак -code мындай түш сыяктуу, TCL чара кырында отурган кандайдыр бир буйругу менен иштебейт. көйгөй окуя окубастан, TCL асинхрондук окуя жүргүзгүчтөрүнүн кайтып коддору буюм болуп саналат. Ыкм тузак кодексине бир желегин орнотуу болуп саналат. Анан желегин буйругу кийин дароо (башкача айтканда, уйку) текшерет.

expect_background буйрук аргументтерди -timeout капарына албай, жалпы күтүү эч кандай түшүнүк бар.

& # 34; ишарат & # EXPECT 34;

Ал эмес туюмдуу болушу мүмкүн деп күтүш жөнүндө бир жубайлар бар. Бул бөлүмдө сунуштар бир жубайлар менен, бул нерселердин кээ бир маселелерди чечүү үчүн аракет кылат.

Жалпы маселе номиналдык багыттамаларды таануу үчүн кандай күтөт. Бул ар кандай адамдарга жана ар кандай орбиталар менен башкача ылайыкташтырылган болгондуктан, portably rlogin automating бат, билбей туруп, кыйын болушу мүмкүн. Эстүү жыйын колдонуучулар (атап айтканда, аны акырына карата абал боюнча) алардын бат сүрөттөгөн туруктуу сөз айкашы сактоо үчүн айлана өзгөрүлмө EXPECT_PROMPT менен. төмөнкүлөр сыяктуу Code колдонсо болот. EXPECT_PROMPT жок болсо, коду дагы туура эмес бир иш жакшы мүмкүнчүлүк бар.

коюп тез "(% | # | \\ $) $"; # демейки тез кармоо {коюп тез $ окр (EXPECT_PROMPT)} томондогу $ туруу талап

Мен сени, сен көрө күткөн баарын акыры камтыйт моделдерин күткөн жаз сунуштайбыз. Бул бүт нерсени көрүп, бир суроого жооп алуу мүмкүнчүлүгүн берет. Мындан тышкары, Сиз башында жооп болсо, ошондой эле, толугу менен, аларды көрүп алдында суроолорго жооп бере алгыдай болушу мүмкүн, ал эми жооп кайра суроонун ортосунда айтылып пайда болушу мүмкүн. Башка сөз менен айтканда, натыйжада диалог туура, бирок Түшүнүксүз болот.

Көпчүлүк суроо аягында боштук камтыйт. Мисалы, FTP чейин тез арада "е", "т", "б", "деген> 'жана. Бул бат дал үчүн, бул белгилердин ар бири үчүн жооп бериши керек. Ал бош камтыйт үчүн эмес, жалпы ката болуп саналат. ачык-жылы бош кой.

Сиз түрү X * бир колдонот болсо, акыркы нерсеге X-жылдын акырына карата алынган бардык көлөмүн дал келет. Бул сезимдин угулат, бирок ЭЭМдин сөз ылдамдык жараша ар кандай болушу мүмкүн, "акыркы нерсе, тактап айтканда," мен кайра иштетүү, анткени / O ядро ​​жана түзмөк айдоочу тарабынан да бир түшүнүксүз болушу мүмкүн.

Атап айтканда, адамдар көпчүлүк программалар бир учурда чыгаруучу бир жип өндүрө чындыгында кийин программа иштеп чыгуу зор жетиден келген (atomically) көрүп калышат. Андай деп ойлошуп, мурунку пунктта кура- анткени алынган бардык чыгаруу болгон матчында учурда гана болот, жок көрүнөт да, азыркы линиясын акыры дал мүмкүн.

күтүү Сиздин үлгү атайын туура келбесе, мындан ары чыгаруу келе жатканын билүүдөн эч кандай жол жок.

Ал тургай, сап-багытталган Топтолууда жараша туура эмес. Алар Топтолууда түрүнө гана программалар сейрек убада керек эмес, бирок система ашказан линиялары көрүнгөн туш келди жерлерде сындырам деп чейин чыгаруу саптарды сындырып коюшу мүмкүн. Ошентип, оймо жазууда бир калыпка акыркы бир нече каармандарды айтууга мүмкүн болсо, анда эмне үчүн акылдуулукка жатат.

Сиз программанын акыркы өндүрүшүнүн үлгү күтүп жана программа дагы, анын ордуна бир нерсе чыгарат, анда күтүү укактысы толду ачкыч менен аныктоо мүмкүн эмес болуп калат. Себеби күтүү эмес, күтүп турат - анын ордуна бул EOF көрсөтмө алат. Анын ордуна колдонулат. Да, жакшы да колдонушат. деген сап эч качан көчүп деген ушундай болсо, анда эреже өзү түзөтүүгө болбойт.

Newlines адатта кайтып, linefeed тизилиши терминалдык айдоочусу чыгуу качан ташыган айланышат. Демек, сиз да, айталы, printf ( "Күлкү \ nbar") бир үлгү апачык эки линиясы дал келсе, анда үлгү "Күлкү \ р \ nbar" колдонуу керек.

Expect_user аркылуу, пайдалануучу окуп жатканда ушундай эле котормо пайда болот. Бул учурда, кайра басып, ал бир NEWLINE которулушу керек болот. Андан кийин чийки режиминде (Telnet сыяктуу), анын терминал коёт программасы үчүн өтөт күтүш болсо, программа чыныгы кайтарууну талап кылып, бир көйгөй болуп жаткан жок. (Кээ бир программалар, чынында, алар дароо эле кайтарымга Newlines которуп турган деп кечирип жатат, бирок алардын көбү жок.) Тилекке каршы, бир программа чийки режимге өз терминал койду деп билиш үчүн эч кандай жол жок.

Тескерисинче, колго берүүнүн менен Newlines алмаштыруу караганда, чечим которулушуна тоскоолдук турган буйрук "stty чийки", колдонуу болуп саналат. Бул мындан ары бышырылган сап-түзөтүү мүмкүнчүлүктөрдү берет деп билдирет Бирок, баса белгилей кетчү.

өз ара толугу менен бул маселе кийин пайда боло турган, ошондуктан чийки режиминде сиздин терминал белгилейт.

Бул көп учурда скрипттерин күтүш сырөздөрдү (же башка жеке маалыматты) сактоо үчүн пайдалуу. Бул компүтерде сакталган эч ким ага жетүү үчүн сезгич болгондуктан сунушталбайт. Ошентип, өз ара бир жазуудан сырсөздөрү үчүн себеп түзмө-түз, аларды колдонууга караганда кичирээк келет. Ошентсе да, айрым учурларда, мисалы, даярдоо гана мүмкүн болот.

Тилекке каршы, UNIX билэ системасы Аткаруучу бирок окулбай жатат скрипттелген түздөн-түз жол бар. setgid номиналдык ариптерин кыйыр түрдө бул төмөнкүчө тууроочу мүмкүн колдоо системасы:

Адаттагыдай эле скрипттер (жашыруун маалыматтарды камтыйт) күтүлөт түзүү. анын уруксаттар 750 (-rwxr-х ---) жана ишенимдүү тобу, башкача айтканда, аны окууга уруксат тобуна таандык болсун. Зарыл болсо, бул максат үчүн жаңы топту түзөт. Андан а / бин / Sh уруксат 2751 менен жазуу (-rwxr-с - х) түзүү бир топ тарабынан мурдагыдай эле таандык.

Натыйжада эч ким (окуп) ишке ашырылышы мүмкүн деген жазуусу болот. Дуба, ал кол жазма күтүлөт өтөт.

& # 34; ОШОНДОЙ ЭЛЕ & # КӨРҮҮ 34;

TCL (3), libexpect (3)
"Изилдөө күтүлөт: A Automating Interactive үчүн программалар Куралдар TCL негизделген" Дон Libes менен бб 602, ISBN 1-56592-090-2, O'Reilly жана Associates, 1995..
Дон Libes менен: "үмүттөнө өз ара, ошол Uncontrollable Fits айыктырып жүрдү", жайдын өндүрүшү 1990 USENIX Conference, Анахайм, California, 11-15-Май, 1990-жыл.
.Мен Дон Libes тарабынан, 1990-USENIX Large орнотуу системалар башкармасы жыйынына эмгектери, Колорадо Спрингс, Колорадо, 17-19-октябрында, 1990-жылдын "Системаны башкаруу орду автоматташтыруу күтөт колдонуу".
.Мен "TCL: An Кыналган Command Тили:" Жакан Ousterhout менен, кыштын өндүрүшү 1990 USENIX Conference, Washington, DC, Май 22-26, 1990..I "күтөт: Interactive программаларды билүү үчүн скрипттер" Дон Libes менен, эсептөө системалары , Vol. 4, No. 2, Колумбия University Press Journals, November 1991..I "регрессиялык тестирлөө жана Тураа Testing Interactive программалар", Дон Libes, жайкы 1992 USENIX Conference эмгектери боюнча, 135-144-бб., Сан-Антонио, TX, 12-15-июнда 1992..I "Kibitz - бирге бир нече Interactive программаларды туташуу", Дон Libes менен, Программанын - Машыгуу жана тажрыйба, John Wiley & уулдарынын, Батыш Суссекске, Англия, Vol.

23-жыл, № 5, май, 1993..I "TCL өтүнмө боюнча Debugger", Дон Libes, 1993 TCL / Tk семинар сот, Беркли тарабынан, CA, 10-11-июнда, 1993.

AUTHOR

Дон Libes, стандарттары жана технологиялар улуттук институту

ЫРААЗЫЧЫЛЫК

TCL Жакан Ousterhout үчүн рахмат, жана Скотт илхам алуу үчүн Пейсли. үчүн Роб Savoye жардамы менен анын autoconfiguration кодун күтүлөт.

Өнүгүшүнүн көп тарыхы документтер талап. Бул кызыктуу окуу жана ушул ЭЭМ үчүн мындан ары да жардам берет мүмкүн. Мага Ката ондоолор жана башка жардам берип жиберип, ал жерде айтылган адамдар үчүн рахмат.

Күтүш Дизайн жана ишке ашыруу АКШ өкмөтү тарабынан жарым-жартылай төлөнгөн жана коомдук доменде Ошондуктан болот. Бирок жазуучу жана булгоолорду бул программа жана документтерди же алардын бөлүктөрү колдонулат, эгерде насыя алайын дедим эле.