/ Unix каманднага Linux Чакаць

Чакайце гэта праграма, якая мае зносіны з іншымі інтэрактыўнымі праграмамі па сцэнары. Пасля сцэнар, Expect ведае, што можна чакаць ад праграмы і што правільны адказ павінен быць. Інтэрпрэтаваная мова забяспечвае галінаванне і кантроль высокага ўзроўню структуры, каб накіраваць дыялог. Акрамя таго, карыстальнік можа кантраляваць і ўзаемадзейнічаць непасрэдна пры жаданні, пасля вяртання кіравання ў сцэнар.

Expectk ўяўляе сабой сумесь Чакаць і ТК. Ён паводзіць сябе як Чакаць і жаданне Tk ст. Чакаць таксама можа быць выкарыстаны непасрэдна ў C ці C ++ без Tcl.

Назва «Чакайце» адбываецца ад ідэі адпраўкі / чакаць паслядоўнасці папулярызаваў UUCP, Кермен і іншых праграм кіравання мадэмам. Аднак у адрозненне ад UUCP, Чакаць абагульняецца так, што яна можа працаваць як каманда на ўзроўні карыстальніка з любой праграмай і задачы ў розуме. Чакаць можна пагаварыць з некалькімі праграмамі адначасова.

Што Чакаць можа зрабіць

Напрыклад, вось некаторыя рэчы, якая плануе каманда можа зрабіць:

Ёсць мноства прычын , чаму абалонка не можа выканаць гэтыя задачы. Усё магчыма з Чакаць.

У цэлым, Expect карысна для запуску любой праграмы, якая патрабуе ўзаемадзеяння паміж праграмай і карыстальнікам. Усё, што неабходна, гэта ўзаемадзеянне можна ахарактарызаваць праграмна. Чакайце таксама можа вярнуць кіраванне карыстальнікам без прыпынку праграмы пад кантроль. Акрамя таго, карыстальнік можа вярнуць кіраванне сцэнаром ў любы час.

выкарыстанне

Чакаць чытае cmdfile для спісу каманд для выканання. Чакаць можна спасылацца няяўна на сістэмах, якія падтрымліваюць #! абазначэння, пазначыўшы сцэнар як выкананы файл і зрабіць першы радок у скрыпце:

#! / USR / мясцовыя / бен / чакаць -f

Вядома, гэты шлях павінен дакладна апісаць, дзе Чакаць жыцця. / USR / мясцовыя / бен гэта ўсяго толькі прыклад.

Сцяг -c прадмовы каманды, якая будзе выконвацца да таго, як у сцэнары. Каманда павінна быць указана, каб прадухіліць быць разагнаныя абалонкі. Гэтая опцыя можа быць выкарыстана некалькі разоў. Некалькі каманд могуць быць выкананы з дапамогай аднаго -c, падзяляючы іх кропкай з коскі. Каманды выконваюцца ў парадку іх з'яўлення. Пры выкарыстанні Expectk, гэты параметр вызначаецца як -команда.

Сцяг -d дае некаторы дыягнастычны выходны сігнал, які ў першую чаргу справаздачы аб унутранай актыўнасці такіх каманд, як чакаюць і ўзаемадзейнічаюць паміж сабой. Гэты сцяг мае той жа эфект, як «exp_internal 1» у пачатку ў Expect скрыпт, плюс версія Чакаць друку.

-D сцяг дазваляе інтэрактыўны адладчык. Цэлае значэнне павінна прытрымлівацца. Адладчык будзе ўзяць пад свой кантроль да наступнай працэдуры Tcl, калі значэнне не роўна нулю або калі ^ C націснутая або кропкі супыну, ці іншай адпаведнай каманды адладчыка з'яўляецца ў сцэнары. Пры выкарыстанні Expectk гэты параметр пазначаны як - Debug.

Сцяг -f прадмовы файл з якога варта чытаць каманды. Сам сцяг не з'яўляецца абавязковым, як гэта карысна толькі пры выкарыстанні #! натацыя, так што іншыя аргументы могуць быць пастаўлены ў камандным радку. Пры выкарыстанні Expectk, гэты параметр вызначаецца як -файл.

Па змаўчанні файл каманды счытваецца ў памяць і выкананы ў поўным аб'ёме. Гэта часам пажадана, каб чытаць файлы на адзін радок за адзін раз. Для таго, каб прымусіць адвольныя файлы, якія будуць апрацоўвацца такім чынам, выкарыстоўвайце сцяг -b. Пры выкарыстанні Expectk, гэты параметр вызначаецца як -буфер.

Калі радок «-» пастаўляецца ў выглядзе файла, чытаецца стандартны ўвод замест. Выкарыстоўвайце «./-» для чытання з файла з імем на самай справе "-".

Сцяг -I прычыны чакаць, каб у інтэрактыўным рэжыме запытваць каманды, а не чытаць іх з файла. Навядзенне завяршаецца з дапамогай каманды выхаду або пасля EOF. Сцяг -i мяркуецца, калі выкарыстоўваецца ні камандны файл, ні -с. Пры выкарыстанні Expectk, гэты параметр вызначаецца як -interactive.

- можа быць выкарыстана для абмежавання канца опцый. Гэта карысна, калі вы хочаце перадаць параметр, як аргумент у скрыпт без яго інтэрпрэтуецца Чакаць. Гэта карысна змясціць у #! лініі, каб прадухіліць любую інтэрпрэтацыю flaglike па Чакаць. Напрыклад, наступны будзе пакінуць арыгінальныя аргументы , уключаючы імя скрыпту ў зменнай ARGV.

#! / USR / мясцовыя / бен / чакаць -

Звярніце ўвагу , што звычайна Getopt (3) і execve павінны выконвацца (2) канвенцыі пры даданні аргументы #! лінія.

Файл $ exp_library / expect.rc здабыты аўтаматычна, калі прысутнічае, калі не выкарыстоўваецца сцяг -N. (Пры выкарыстанні Expectk, гэты параметр вызначаецца як -norc.) Адразу ж пасля гэтага, файл ~ / .expect.rc здабыты аўтаматычна, калі не выкарыстоўваецца сцяг -n. Калі зменная DOTDIR асяроддзя вызначана, яна разглядаецца як каталог і .expect.rc счытваецца адтуль. Пры выкарыстанні Expectk, гэты параметр вызначаецца як -norc. Гэта адбываецца толькі Sourcing пасля выканання якіх-небудзь -c сцягоў.

-v прычыны чакаць, вывесці нумар версіі і выйсці. Адпаведны сцяг у Expectk, які выкарыстоўвае доўгія імёны сцягоў, з'яўляецца -версія.

Дадатковыя арги пабудаваныя ў спіс і захоўваюцца ў зменнай з імем ARGV і. ARGC ініцыялізуецца да даўжыні ARGV.

Argv0 вызначаецца як імя сцэнарыя або двайковым, калі не выкарыстоўваюцца скрыпт. Напрыклад, наступныя раздрукоўвае імя сцэнарыя і першых трох аргументаў:

send_user "$ argv0 [lrange $ ARGV 0 2] \ п"

каманды

Чакаць выкарыстоўвае Tool Command Language. Tcl забяспечвае кіраванне патокам (калі ,, перапынак), ацэнку экспрэсіі і некаторыя іншыя функцыі, такія як вызначэнне працэдуры recursionand. Каманды, якія выкарыстоўваюцца тут, але не вызначаны (набор, калі Exec) з'яўляюцца каманды Tcl. Чакаць падтрымлівае дадатковыя каманды. Калі не пазначана іншае, каманды вяртаюць пусты радок.

Каманды пералічаны ў алфавітным парадку, так што яны могуць быць хутка размешчаныя. Тым не менш, новыя карыстальнікі могуць знайсці яго лягчэй пачаць з чытаннем апісання ікры, адпраўце, чакаць, і ўзаемадзейнічае паміж сабой, у такім парадку.

зачыніць [-slave] [-onexec 0 | 1] [-i spawn_id]

закрывае злучэнне з бягучым працэсам . Большасць інтэрактыўных праграм выявяць EOF на іх стандартны ўводзе і выйсці; Такім чынам , блізка , як правіла , дастаткова , каб забіць працэс , а таксама. Сцяг -i аб'яўляе працэс , каб закрыць адпаведнае імя spawn_id.

Абодва чакаюць і ўзаемадзеяння будуць вызначаць , калі бягучы працэс завяршаецца і няяўна рабіць блізка, але калі вы забіваеце працэс , скажам, на «Exec глушэння $ PID», вам неабходна відавочна выклікаць блізка.

-onexec сцяг вызначае , ці з'яўляецца ідэнтыфікатар ікры зачынены ў любых новых спароджаных працэсах або калі працэс накладваюцца. Для таго, каб пакінуць ікру ідэнтыфікатар адкрытым, выкарыстоўвайце значэнне 0. Цэлага колькасці ненулявога значэнне прымушае ікру зачыненая ў любых новых працэсах.

-slave сцяг закрывае падначалены, звязаныя з ідэнтыфікатарам ікры. Калі злучэнне зачыняецца, якое вядуць аўтаматычна закрываецца, а калі яна яшчэ адкрыта.

Незалежна ад таго , ці з'яўляецца злучэнне закрыта няяўна ці відавочна, вы павінны патэлефанаваць чакаць , каб ачысціць адпаведнае ядро працэсу слот. Цесная каманда не называюць чакаць , бо няма ніякай гарантыі , што закрыццё працэсу злучэння прымусіць яго выйсці.

адладкі [[-Зараз] 0 | 1]

кантралюе адладчык Tcl, дазваляючы вам пакрокава заявы і кропку супыну.

Без аргументаў, 1 вяртаецца, калі адладчык не працуе, у адваротным выпадку вяртаецца 0.

З 1 аргументам, адладчык запускаецца. З 0 аргументам, адладчык спыняецца. Калі адзін аргумент папярэднічае -Зараз сцяга, адладчык запускаецца неадкладна. У адваротным выпадку, адладчык запускаецца з наступным аператарам Tcl.

Каманда адладкі не змяняе ніякіх пастак. Параўнайце гэта пачынаючы Чакаць са сцягам -D.

Каманда адключэння адключае раздвоены працэс ад тэрмінала . Ён працягвае працаваць у фонавым рэжыме. Працэс даецца сваю ўласную групу працэсаў. Стандартны ўвод / выснова перанакіроўваецца ў / DEV / нуль .

Наступны фрагмент выкарыстоўвае адлучаць, каб працягнуць выкананне сцэнара ў фонавым рэжыме.

калі {[відэлец]! = 0} выхад адключэння. , ,

Наступны сцэнар чытае пароль, а затым запускае праграму кожную гадзіну, які патрабуе пароль кожны раз, калі ён запускаецца. Скрыпт падае пароль, так што вы павінны ўвесці толькі адзін раз.

send_user "пароль? \" expect_user -re "\ п (. *)" для {} 1 {} {калі {[відэлец] = 0} {сон 3600;} працягнуць раз'яднанне ікру priv_prog чакаць Пароль: адправіць «$ expect_out ( 1, радок) \ г ». , , выхад}

Перавага выкарыстання адключыцца праз абалонку асінхроннай функцыю працэсу (&) з'яўляецца тое, што Чакаць можна захаваць параметры тэрмінала да пачатку адключэння і потым прымяніць іх да новага Ptys. З &, Expect не мае магчымасці прачытаць параметры тэрмінала, паколькі тэрмінал ужо адключаны ад часу Чакаць атрымлівае кантроль.

Выхад [-opts] [статус]

прычыны чакаць, каб выйсці ці іншым чынам падрыхтавацца да гэтага.

-onexit сцяг выклікае наступны аргумент , які будзе выкарыстоўвацца ў якасці апрацоўшчыка выхаду. Без аргументу, бягучы апрацоўшчык выхаду вяртаецца.

Сцяг -noexit прычыны чакаць , каб падрыхтавацца , каб выйсці , але спыняцца фактычна вяртаючы кіраванне аперацыйнай сістэмы. Пэўнага карыстальнік апрацоўшчык выхаду выконваецца гэтак жа, як Чакаць ўласныя ўнутраныя апрацоўшчык. Ніякіх далейшых Чакаць каманды павінны быць выкананы. Гэта карысна, калі вы працуеце Чакайце з іншымі пашырэннямі Tcl. У цяперашні час інтэрпрэтатар (і галоўнае акно, калі ў асяроддзі Tk) застаюцца так, што іншыя пашырэння Tcl можа ачысціць. Калі выхад Чакаць з'яўляецца зноў выклікаецца (аднак гэта можа адбыцца), апрацоўшчыкі ня перазапускаць.

Пры выхадзе, усе злучэнні з спароджанымі працэсамі зачыненыя. Закрыццё будзе выяўлена як EOF з дапамогай спароджаных працэсаў. выхад не прымае ніякіх іншых дзеянняў звыш таго , што нармальны _exit (2) працэдура робіць. Такім чынам, спарадзілі працэсы, якія не правяраюць EOF можа працягваць працаваць. (Разнастайнасць умоў маюць важнае значэнне для вызначэння, напрыклад, што сігналізуе аб спараджаў працэс будзе пасланы, але гэта залежыць ад сістэмы, як правіла, дакументальна пры выхадзе (3).) Spawned працэсы, якія працягваюць працаваць будуць перанятыя ініцыялізацыі.

статус (або 0 , калі не пазначана) вяртаецца як статус завяршэння Чакаць. выхад няяўна выконваецца , калі канец сцэнара будзе дасягнуты.

exp_continue [-continue_timer]
Каманда exp_continue дазваляе разлічваць на сябе , каб працягнуць выкананне , а не вяртанне , як звычайна. Па змаўчанні exp_continue скідае таймер тайм - аўт. -continue_timer сцяг прадухіляе таймер ад перазапуску. (Глядзі чакаць для атрымання дадатковай інфармацыі.)

exp_internal значэнне [-f файл]
выклікае каманды для адпраўкі дыягнастычнай інфармацыі ўнутранага чакаць у далейшым стандартны вывад , калі значэнне не роўна нулю. Гэты выхад будзе адключаны , калі значэнне роўна 0. Дыягнастычная інфармацыя ўключае ў сябе кожны знак атрымаў, і ўсе спробы зрабілі , каб адпавядаць выходнаму току з шаблонамі.

Калі дадатковы файл пастаўляецца, усё нармальна і адладкі выснову запісваецца ў гэты файл (незалежна ад велічыні значэння). Любы папярэдні дыягнастычны выхадны файл зачыняецца.

-info сцяг прымушае exp_internal вярнуць апісанне самых апошніх аргументаў ня-інфо дадзеных.

exp_open [Арг] [-i spawn_id]
вяртае ідэнтыфікатар файла Tcl, які адпавядае першапачатковаму міцэліем ід. Ідэнтыфікатар файла можа быць выкарыстаны , як калі б яно было адкрыта адкрытай камандай на Tcl. (Нерастуе ідэнтыфікатар больш не павінен выкарыстоўвацца. Чаканне не павінна выконвацца.

-leaveopen сцяг пакідае ікру ідэнтыфікатар адкрытым для доступу праз Чакаць каманды. Чакання павінны быць выкананы на ікру ід.

exp_pid [-i spawn_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] версія]
карысна для гарантавання таго, што скрыпт сумяшчальны з бягучай версіяй Чакаць.

Без аргументаў, бягучая версія Чакаць вяртаецца. Гэтая версія можа быць затым кадуюцца ў сцэнары. Калі вы сапраўды ведаеце, што вы не выкарыстоўваеце магчымасці апошніх версій, вы можаце задаць больш раннюю версію.

Версіі складаюцца з трох лічбаў, падзеленых кропкамі. Па-першае гэта асноўны нумар. Сцэнары , напісаныя для версій Чакаць з іншым асноўным нумарам амаль напэўна не працуюць. exp_version вяртае памылку , калі асноўныя лічбы не супадаюць.

Па-другое, нязначная колькасць. Сцэнары, напісаныя для версіі ў лепшым нязначным лікам, чым бягучая версія можа залежаць ад нейкай новай функцыі і не можа працаваць. exp_version вяртае памылку , калі асноўныя нумары супадаюць, але сцэнар нязначнае лік больш , чым бег Expect.

Па-трэцяе гэты лік, якое не гуляе ніякай ролі ў параўнанні версій. Тым ня менш, ён павялічваецца , калі Чакаць распаўсюджвання праграмнага забеспячэння змяняецца якім - небудзь чынам, напрыклад, шляхам дадатковай дакументацыі або аптымізацыі. Ён скідаецца ў 0 пры кожнай новай малой версіі.

З -exit сцягам, Чакаць друкуе паведамленне пра памылку і завяршае працу , калі версія састарэла.

якія плануюць [[-opts] pat1 body1] ... [-opts] patn [bodyn]
чакае, пакуль адзін з шаблонаў не адпавядае выхадных дадзеных спароджанага працэсу, зададзены перыяд часу прайшоў, ці канец файл-бачны. Калі канчатковае цела пуста, ён можа быць апушчаны.

Узоры з апошніх камандаў expect_before няяўна выкарыстоўваюцца перад любымі іншымі ўзорамі. Узоры з апошніх камандаў expect_after няяўна выкарыстоўваюцца пасля любых іншых мадэляў.

Калі аргументы для ўсяго чакаць зацвярджэнне патрабуе больш аднаго радка, усе аргументы могуць быць «упёрся» ў адзін з тым, каб пазбегнуць спынення кожнага радка з дапамогай зваротнай касой рысы. У гэтым адным выпадку, звычайныя замены Tcl будзе адбывацца, нягледзячы на ​​дужкі.

Калі шаблон з'яўляецца ключавым словам ВФА, адпаведны орган выкананы па заканчэнні тэрміну файла. Калі шаблон з'яўляецца ключавым словам тайм - аўту, то адпаведны корпус выкананы па тайм - аўту. Калі не выкарыстоўваецца ключавое слова тайм-аўт, невідавочнае дзеянне нуль выконваецца на тайм-аўт. Перыяд тайм-аўту па змаўчанні складае 10 секунд, але можа быць усталяваны, напрыклад, да 30, з дапамогай каманды "ўстанавіць тайм-аўт 30». Бясконцы час чакання можа быць вызначаны значэннем -1. Калі шаблон з'яўляецца ключавое слова па змаўчанні, адпаведнае цела выконваецца на любым тайм - аўт або з скончаным файла.

Калі шаблон супадае, то адпаведны корпус выкананы. чакаць , вяртае вынік цела (або пусты радок , калі шаблон не знойдзены). У выпадку, калі некалькі шаблонаў супадаюць, адзін з'яўляецца першым выкарыстоўваюцца для выбару цела.

Кожны раз, калі прыходзіць новы выхад, ён параўноўваецца з кожным малюнкам у парадку іх пералічэння. Такім чынам, вы можаце праверыць на адсутнасць матчу, зрабіўшы апошні ўзор нешта гарантавана з'явіцца, напрыклад, у запрашэнні. У сітуацыях , дзе няма ніякіх запытаў, вы павінны выкарыстоўваць тайм - аўт (гэтак жа , як калі б вы ўзаемадзейнічалі ўручную).

Шаблоны вызначаюцца трыма спосабамі. Па змаўчанні шаблоны задаюцца як з дапамогай каманды TCL ў радок адпаведнасці. (Такія мадэлі таксама падобныя на С-абалонкай рэгулярных выразаў , як правіла , згадваецца як «Глобы» мадэлі). -gl сцяг можа можа выкарыстоўвацца для абароны шаблонаў , якія інакш маглі б матч чакаць сцягі ад гэтага. Любы шаблон, які пачынаецца з «-» павінны быць абаронены такім чынам. (Усе радкі, якія пачынаюцца з «-» зарэзерваваны для будучых магчымасцяў.)

Напрыклад, наступны фрагмент выглядае для паспяховага ўваходу ў сістэму. (Звярніце ўвагу , што аборт , як мяркуюць, працэдура пэўныя ў іншым месцы ў сцэнары.)

чакаць {заняты {ставіць заняты \ п; exp_continue} не атрымалася перапыненне «няслушнага пароля» перапыніць тайм-аўт перапыніць звязнае}

Каціроўкі прыпадае на чацвёрты шаблон, так як ён змяшчае прабел, які ў адваротным выпадку аддзяліць ўзор ад дзеяння. Мадэлі з такім жа дзеяннем (напрыклад, 3-й і 4-й) патрабуюць зноў пералічваючы дзеянні. Гэта можа быць пазбегнуць з дапамогай шаблонаў рэгулярных выразаў у стылі (гл. Ніжэй) Больш падрабязная інфармацыя аб фарміраванні мадэляў Glob стылі можна знайсці ў кіраўніцтве па Tcl.

Шаблоны рэгулярных выразаў у стылі варта сінтаксісу рэгулярных выразаў , пэўны на Tcl (скарочана «рэгулярны выраз») каманда. РегВыр мадэль ўводзяцца з -RE сцяга. Папярэдні прыклад можна перапісаць з выкарыстаннем рэгулярных выразаў, як:

чакаць {заняты {ставіць заняты \ п; exp_continue} -rE «не ўдалося | няправільны пароль» перапыніць тайм-аўт перапыніць звязнае}

Абодва тыпу узораў «unanchored». Гэта азначае, што ўзоры не павінны супадаць з усёй радком, але можа пачаць і скончыць матч у любым месцы радка (да таго часу, як і ўсе астатнія матчы). Выкарыстоўвайце ^, каб адпавядаць пачатак радка, і $, каб адпавядаць мэты. Звярніце ўвагу, што калі вы не чакаць канца радка, вы адказвалі могуць лёгка апынуцца ў сярэдзіне радка, як яны пераклікаюцца з спароджанага працэсу. Хоць да гэтага часу вырабляе правільны вынік, выснова можа выглядаць ненатуральна. Такім чынам, выкарыстанне $ рэкамендуецца, калі вы можаце дакладна апісаць сімвалы ў канцы радка.

Звярніце ўвагу, што ў шматлікіх рэдактарах, ^ і $ адпавядаюць пачатку і канцу радка адпаведна. Аднак, паколькі чакаць не лінія арыентаваных, гэтыя сімвалы адпавядаюць пачатку і канцу дадзеных (у адрозненне ад ліній) у цяперашні час у буферы супастаўлення чакаць. (Акрамя таго, глядзіце нататка ніжэй на «сістэмы дыспенсія»).

-ex сцяг выклікае шаблон , каб быць супастаўлены як "дакладнае» радок. Няма тлумачэньне *, ^ і г.д. вырабляецца (хоць па-ранейшаму павінны быць выкананы звычайныя канвенцыі Tcl). Дакладныя мадэлі заўсёды unanchored.

-nocase сцяг выклікае вялікія сімвалы выхаду для параўнання , як калі б яны былі сімвалы ніжняга рэгістра. Шаблон не ўплывае.

Пры чытанні вываду, больш за 2000 байт могуць прымусіць раней байты быць «забытым». Гэта можа быць зменена з дапамогай функцыі match_max. (Звярніце ўвагу , што празмерна вялікія значэння могуць запаволіць шаблон Matcher.) Калі гэта patlist full_buffer, адпаведнае цела выконваецца , калі match_max байт было атрымана , і ніякія іншыя структуры не супадаюць. Ці выкарыстоўваецца ці не full_buffer ключавога слова, забытыя сімвалы запісваюцца ў expect_out (буфер).

Калі patlist з'яўляецца ключавым словам NULL, і обнуляет дазволена ( з дапамогай каманды remove_nulls), якое адпавядае цела выконваецца , калі адзін ASCII 0 падабраны. Гэта не магчыма, каб адпавядаць 0 байт праз Глоба або рэгулярных выразаў шаблонаў.

Пасля ўзгаднення шаблону (або ВФ або full_buffer), любое супадзенне і раней неперасягненай выхад захоўваецца ў зменнай expect_out (буфер). Да 9 рэгулярных выразаў падрадкоў захоўваюцца ў зменных expect_out (1, радок) праз expect_out (9, радок). Калі -indices выкарыстоўваецца сцяг перад малюнкам, пачатковай і канчатковай індэксаў (у форме , прыдатнай для lrange) з 10 радкоў , якія захоўваюцца ў зменных expect_out (Х, пачатак) і expect_out (Х, канец) , дзе Х ўяўляе сабой лічба, адпавядае становішчу падрадка ў буферы. 0 ставіцца да радках, якія адпавядалі ўсяму шаблону, і генеруюцца для мадэляў Глобы, а таксама рэгулярных выразаў шаблонаў. Напрыклад, калі працэс вырабіў выхад «ABCDEFGH \ N», вынік:

чакаць «CD»

як калі б наступныя сцвярджэнні былі выкананы:

ўсталяваць expect_out (0, радок) кд набор expect_out (буфер) ABCD

і «EFGH \ п» застаецца ў выходным буферы. Калі працэс вырабіў выхад «abbbcabkkkka \ п», вынік:

чакаць -indices -rE "(Ь *). * (K +)"

як калі б наступныя сцвярджэнні былі выкананы:

ўсталяваць expect_out (0, старт) 1 камплект expect_out (0, канец) 10 набор expect_out (0, радок) bbbcabkkkk набор expect_out (1, старт) 2 набору expect_out (1, канец) 3 набору expect_out (1, радок) Bb ўсталяваць expect_out (2, старт) 10 набор expect_out (2, 10) канчатковы набор expect_out (2, радок) K ўсталюеце expect_out (буфер) abbbcabkkkk

і «\ п» застаецца ў выходным буферы. Шаблон «*» (і -re «*») будуць чысціць выхадны буфер без чытання больш выхаду з працэсу.

Як правіла, узгоднены выхад адкідаюцца з Чакаць ўнутраныя буферы. Гэта можа быць папярэджана шляхам дадання прэфікса шаблону з сцягам -notransfer. Гэты сцяг асабліва карысны ў эксперыментаваць (і можа быць скарочана да «-не» для зручнасці пры эксперыментаванні).

Ікру ідэнтыфікатар , звязаны з выхадам згоды (або ВФ або full_buffer) захоўваецца ў expect_out (spawn_id).

-timeout сцяг прымушае ток чакаць каманды , каб выкарыстоўваць наступнае значэнне ў якасці тайм - аўту замест таго , каб выкарыстоўваць значэнне зменнай тайм - аўту.

Па змаўчанні, шаблоны супастаўляюцца з выхадам з бягучага працэсу, аднак сцяг -i аб'яўляе выхад з названага спісу spawn_id быць супастаўлены з любымі наступнымі шаблонамі (да наступнага -i). Spawn_id спіс павінен быць альбо прабеламі спіс падзеленых spawn_ids або зменнай са спасылкай на такі спіс spawn_ids.

Напрыклад, у наступным прыкладзе чакае «складны» ад бягучага працэсу, або «заняты», «не ўдалося» або «няправільны пароль» ад spawn_id названага $ proc2.

чакаць {-i $ proc2 заняты {ставіць заняты \ п; exp_continue} -rE «не ўдалося | няправільны пароль» перапыніць тайм-аўт перапыніць звязнае}

Значэнне глабальнай зменнай any_spawn_id можа выкарыстоўвацца для супастаўлення шаблонаў для любых spawn_ids, якія названы з усімі іншымі -i сцягамі ў бягучай камандзе чакаць. Spawn_id ад сцяга -i, без звязанага малюнка (гэта значыць, адразу за адным -i) становяцца даступным для любых іншых мадэляў у тым жа чакаць каманды , звязаныя з any_spawn_id.

Сцяг -i можа таксама назваць глабальныя пераменным ў гэтым выпадку пераменны счытваюцца для спісу грыбніцы ідэнтыфікатараў. Пераменная перачытваць кожны раз, калі яна мяняецца. Гэта забяспечвае спосаб змены крыніцы ўводу / высновы ў той час як каманда ў выкананні. Spawn ідэнтыфікатары, якія прадстаўляюцца такім чынам, называецца «ўскоснымі» ікра ідэнтыфікатарамі.

Такія дзеянні, як структуры кіравання перапынку і па- ранейшаму выклікаюць (напрыклад, для, Proc) паводзіць сябе звычайным чынам. Каманда exp_continue дазваляе разлічваць на сябе , каб працягнуць выкананне , а не вяртанне , як звычайна.

Гэта карысна для пазбягання відавочных цыклаў або неаднаразовага чакаюць заявы. Наступны прыклад з'яўляецца часткай фрагмента для аўтаматызацыі Rlogin. Exp_continue пазбягае таго , каб напісаць другую заяву , чакаць (шукаць падказку зноў) , калі Rlogin запытвае пароль.

чакаць {Пароль: {Запушчаная -echo send_user "пароль (для $ карыстальніка) на $ HOST:" expect_user -rE "(. *) \ п" send_user "\ п" адправіць "$ expect_out (1, радок) \ г" Запушчаная рэха exp_continue} няправільны {send_user «няправільны пароль або ўліковага запісу \ п» выхад} таймаўт {send_user «падключэнне да $ хаста таймаўт \ п» выхад} EOF {send_user \ «падключэнне да вузла не ўдалося: $ expect_out (буфер)» выхаду} - паўторна радок $}

Напрыклад, наступны фрагмент можа дапамагчы карыстачу ўзаемадзейнічаць, якое ўжо цалкам аўтаматызавана. У гэтым выпадку тэрмінал ўведзены ў нестандартным рэжыме. Калі карыстальнік націскае «+», пераменная павялічваецца на адзінку. Калі «р» націснутая, некалькі звароты пасылаецца працэсу, магчыма, каб соваць яго ў пэўным сэнсе, і "я" дазваляе карыстальніку ўзаемадзейнічаць з працэсам, эфектыўна красці прэч кіравання з сцэнара. У кожным выпадку exp_continue дазваляе таку чакаць , каб працягнуць пошук па шаблоне пасля выканання бягучага дзеянні.

Запушчаная сырой -echo expect_after {-i $ user_spawn_id "р" {адправіць "\ г \ г \ г"; exp_continue} "+" {инкр Foo; exp_continue} "я" {ўзаемадзейнічаюць; exp_continue} "кінуць" выхад}

Па змаўчанні exp_continue скідае таймер часу чакання. Таймер ня перазапускаецца, калі exp_continue выклікаецца з -continue_timer сцягам.

expect_after [expect_args]
працуе ідэнтычна expect_before за выключэннем таго, што калі шаблоны ад абодвух чакаюць і expect_after могуць супадаць, выкарыстоўваецца шаблон чакаць. См каманды expect_before для атрымання дадатковай інфармацыі.

expect_background [expect_args]
прымае тыя ж аргументы , як чакаюць, аднак ён неадкладна вяртаецца. Узоры выпрабоўваюцца кожны раз, калі новы ўваход паступае. Тайм - аўт шаблону і па змаўчанні ня мае значэнне для expect_background і адкідаецца. У адваротным выпадку каманда expect_background выкарыстоўвае expect_before і expect_after мадэль гэтак жа , як чакае робіць.

Калі expect_background дзеянняў ацэньваюцца, фонавая апрацоўка для таго ж ідэнтыфікатара ікры блакуецца. Фонавая апрацоўка адмыкнутая, калі дзеянне завяршаецца. Пры апрацоўцы фону блакуецца, можна зрабіць ( на пярэднім плане) чакае таго ж ікру ід.

Гэта не ўяўляецца магчымым выканаць чакаць у той час як expect_background адмыкнутая. expect_background для канкрэтнай ікры ідэнтыфікатара выдаляецца, абвяшчаючы новы expect_background з тым жа ідэнтыфікатарам ікры. Дэклараванне expect_background, без малюнка выдаляе дадзеную ікру ідэнтыфікатар ад здольнасці адпавядаць мадэлям ў фонавым рэжыме.

expect_before [expect_args]
прымае тыя ж аргументы , як чакаюць, аднак ён неадкладна вяртаецца. Пары шаблон-дзеянне ад апошняга expect_before з тым жа ідэнтыфікатарам ікру няяўна дадаецца ў любыя наступныя чакаць каманд. Калі шаблон супадае, яно разглядаецца як калі б яно было паказана ў самой камандзе чакаць, і звязанае з ім цела выконваецца ў кантэксце каманды чакаць. Калі шаблоны ад абодвух expect_before і чакаць , можа адпавядаць, выкарыстоўваецца шаблон expect_before.

Калі не пазначаны шаблон, спараджэнне ідэнтыфікатар не правяраецца для любых мадэляў.

Калі не перавызначанае сцягам -i, шаблоны expect_before супадаюць супраць ікры ідэнтыфікатара , аб якой гаварылася ў той час , якая была выканана каманда expect_before (не тады , калі яе шаблон узгоднены).

У -INFO сцяг прычыны expect_before вярнуць бягучыя спецыфікацыі якія мадэлі ён будзе адпавядаць. Па змаўчанні, ён паведамляе аб бягучым міцэліем ід. Неабавязковы параметр міцэліем ідэнтыфікатара можа быць прадастаўлены для атрымання інфармацыі аб тым міцэліем ід. Напрыклад

expect_before -info -i $ карысць

У большасці адзін міцэліем спецыфікацыі ідэнтыфікатара можа быць прадастаўлена. Сцяг -indirect душыць прамыя Іды ікры, якія прыходзяць толькі ад ўскосных характарыстык.

Замест спецыфікацыі міцэліем ід, сцяг «-вс» прымусіць «-info» паведамляць пра ўсе грыбніца ідэнтыфікатараў.

Выхад -info сцяга можа быць паўторна выкарыстаны ў якасці аргументу expect_before.

expect_tty [expect_args]
, Як чакаюць , але ён чытае сімвалы з / Dev / TTY (г.зн. націск клавіш ад карыстальніка). Па змаўчанні чытання выконваецца ў прыгатаваным рэжыме. Такім чынам, лініі павінны заканчвацца вяртаннем для таго , каб чакаць , каб убачыць іх. Гэта можа быць зменена з дапамогай запушчанага (гл каманды запушчаных ніжэй).

expect_user [expect_args]
, Як чакаюць , але ён чытае сімвалы з стандартнага ўводу (г.зн. націск клавіш ад карыстальніка). Па змаўчанні чытання выконваецца ў прыгатаваным рэжыме. Такім чынам, лініі павінны заканчвацца вяртаннем для таго , каб чакаць , каб убачыць іх. Гэта можа быць зменена з дапамогай запушчанага (гл каманды запушчаных ніжэй).

відэлец
стварае новы працэс . Новы працэс з'яўляецца дакладнай копіяй бягучага Expect працэсу . У выпадку поспеху, відэлец вяртае 0 на новы (дзіця) працэсу і вяртае працэс ідэнтыфікатар даччынага працэсу ў бацькоўскай працэсе . У выпадку няўдачы (нязменна з - за недахопу рэсурсаў, напрыклад, прасторы падпампоўкі памяці), відэлец вяртаецца -1 у бацькоўскай працэсе , і ні адзін дзіця працэс не ствараецца.

Падвоены працэсы выхаду з дапамогай каманды выхаду, гэтак жа , як арыгінальны працэс . Падвоены працэсы могуць пісаць у лог-файлы. Калі вы не адключыць адладку або пратакалявання ў большасці працэсаў, вынік можа збіваць з панталыку.

Некаторыя рэалізацыі могуць быць PTY зблытаць некалькімі чытачамі і пісьменнікамі, нават на імгненне. Такім чынам, бяспечней галінавацца перад нерестового працэсамі.

ўзаемадзейнічаць [string1 body1] ... [stringn [bodyn]]
дае кантроль бягучага працэсу для карыстальніка, так што націск клавішы накіроўваюцца да бягучага працэсу , і стандартны вывад і стандартны паток памылак бягучага працэсу вяртаюцца.

Радок пар-цела могуць быць паказаны ў якасці аргументаў, у гэтым выпадку цела выконваецца, калі адпаведная радок ўводзіцца. (Па змаўчанні радок не адпраўляецца бягучаму працэсу .) Інтэрпрэтатар каманд мяркуецца, калі канчатковае цела адсутнічае.

Калі аргументы усяго заявы InterACT патрабуюць больш аднаго радка, усе аргументы могуць быць «упёрся» ў адзін з тым, каб пазбегнуць спынення кожнага радка з дапамогай зваротнай касой рысы. У гэтым адным выпадку, звычайныя замены Tcl будзе адбывацца, нягледзячы на ​​дужкі.

Напрыклад, наступная выконваецца каманда ўзаемадзейнічае з наступнымі парамі радкоў цела , пэўныя: Калі ^ Z націснутая, Чакаць прыпыняюцца. (The -reset сцяг аднаўляе рэжымы тэрмінала.) Пры ^ А націснутая, карыстальнік бачыць "вы набралі кіравання-A" і працэс пасылаецца ^ A. Калі $ націскам, карыстальнік бачыць дату. Калі ^ C націснутая, Чакаць выхаду. Калі «Foo» ўводзіцца, карыстальнік бачыць «бар». Калі ~~ націскам, то інтэрпрэтатар Чакаць працуе ў інтэрактыўным рэжыме .

набор CTRLZ \ 032 ўзаемадзейнічаюць {-reset $ CTRLZ {Exec забіць -STOP [PID]} \ 001 {send_user "вы набралі кіравання-A \ п"; адправіць "\ 001"} $ {send_user "Дата з'яўляецца [фармат гадзіны [гадзіннік секунды]]."} \ 003 выхаду Foo {send_user "штрых"}} ~~

У парах радкоў цела, радкі супастаўляюцца ў парадку яны пералічаны ў якасці аргументаў. Радкі , якія часткова адпавядаюць не адпраўляюцца бягучага працэсу ў чаканні пакінутай надыходзячым. Калі знакі затым ўводзяцца такім чынам, што не можа больш не быць , магчыма , матч, толькі частка радка будзе адпраўлена ў працэс , які не можа пачаць яшчэ адзін матч. Такім чынам, радкі, якія з'яўляюцца падрадка частковага супадзення могуць адпавядаць пазней, калі зыходныя радкі, якая спрабуе быць матч, у канчатковым рахунку трывае няўдачу.

Па змаўчанні, радок адпаведнасці дакладна, без джокер . (У адрозненне ад гэтага , каманда чакаць выкарыстоўвае шаблоны Glob стылі па змаўчанні) . У -ex сцяг можа быць выкарыстаны для абароны мадэляў , якія маглі б адпавядаць ўзаемадзейнічаць сцягі ад гэтага. Любы шаблон, які пачынаецца з «-» павінны быць абаронены такім чынам. (Усе радкі, якія пачынаюцца з «-» зарэзерваваны для будучых магчымасцяў.)

-re сцяг прымушае радок быць вытлумачана як шаблон рэгулярнага выразы стылю. У гэтым выпадку адпаведныя падрадка захоўваюцца ў зменнай interact_out аналагічна таму, як чакаюць , захоўвае свой выхад у зменнай expect_out. -indices сцяг аналагічна падтрымліваецца.

Ўзор ВФ ўводзіць дзеянне , якое выконваецца па заканчэнні тэрміну файла. Асобны ВФ малюнак можа таксама прытрымлівацца -output сцягу ў гэтым выпадку яно супастаўляецца , калі ВФ выяўляецца ва час запісу выходных дадзеных . Дзеянне ВФ па змаўчанні з'яўляецца «вяртанне», так што ўзаемадзейнічаюць проста вяртаецца на любы EOF.

Тайм - аўт шаблону ўводзіць тайм - аўт (у секундах) і дзеянне , якое выконваецца пасля таго, як ніякія сімвалы не будуць прачытаныя ў працягу зададзенага часу. Шаблон таймаўту прымяняецца да апошняга паказаным працэсу . Там няма тайм-аўту па змаўчанні. Ня Адмысловая зменная «тайм - аўт» (які выкарыстоўваецца камандай чакаць) не ўплывае на гэты тайм - аўт.

Напрыклад, наступная інструкцыя можа быць выкарыстана для autologout карыстальнікаў, якія не набралі нічога на працягу гадзіны, але якія да гэтага часу атрымліваюць частыя сістэмныя паведамленні:

ўзаемадзейнічаць -input $ user_spawn_id таймаўту 3600 вяртанне -output \ $ spawn_id

Калі шаблон з'яўляецца ключавым словам NULL, а нулі дазволеныя ( з дапамогай каманды remove_nulls), якое адпавядае цела выконваецца , калі адзін ASCII - 0 падабраны. Гэта не магчыма, каб адпавядаць 0 байт праз Глоба або рэгулярных выразаў шаблонаў.

У прадмове шаблон са сцягам -iwrite выклікае пераменная interact_out (spawn_id) павінен быць усталяваны ў spawn_id , якія адпавядаюць ўзору (або EOF).

Такія дзеянні, як перапынак і працягнуць структуры кіравання выклікае (напрыклад, для, Proc) паводзіць сябе звычайным чынам. Аднак вярнуць прычыны ўзаемадзейнічаюць , каб вярнуцца да свайго абаненту, у той час як inter_return прычыны ўзаемадзейнічаюць , каб выклікаць вяртанне ў выклікалым. Напрыклад, калі «карысць Foo» завецца ўзаемадзейнічае , якія затым выканала inter_return дзеянні, карысць Foo вернецца. (Гэта азначае , што калі Ўзаемадзейнічаць выклікі інтэрпрэтатара ў інтэрактыўным рэжыме, набраўшы вяртанне прымусіш Ўзаемадзейнічаць працягваць, у той час як inter_return прымусіць ўзаемадзейнічае , каб вярнуцца да свайго абаненту.)

Падчас ўзаемадзейнічаюць паміж сабой , рэжым сыравіну выкарыстоўваецца для таго , каб усе сімвалы могуць быць перададзены ў бягучым працэсе . Калі бягучы працэс ня ўлоўлівае сігналы кіравання заданнямі, ён спыніцца , калі паслаў сігнал супыну (па змаўчанні ^ Z). Для таго, каб перазапусціць яго, адправіць бесперапынны сігнал (напрыклад, з дапамогай «забіць -CONT»). Калі вы сапраўды хочаце адправіць SIGSTOP да такога працэсу (па ^ Z), разгледзім нераст CSH першы і затым запусціць праграму. З іншага боку, калі вы хочаце адправіць SIGSTOP Чакаць сябе, першы інтэрпрэтатар выкліку (магчыма , з дапамогай экрануе сімвала), а затым націсніце ^ Z.

Радок пар-цела можа быць выкарыстана ў якасці кароткага абазначэння для прадухілення таго, каб увайсці ў інтэрпрэтатар і выконваць каманды ў інтэрактыўным рэжыме. Папярэдні рэжым тэрмінала выкарыстоўваюцца ў той час як цела з пары радкоў цела выконваюцца.

Для хуткасці, дзеянні выконваюцца ў нестандартным рэжыме па змаўчанні. -reset сцяг скідае тэрмінал у рэжыме ён меў да ўзаемадзейнічае было выкананы (нязменна, прыгатаваным рэжым). Звярніце ўвагу, што ўведзеныя сімвалы, калі рэжым перамыкаючыся можа быць страчаны (няўдалае асаблівасць драйвера тэрмінала на некаторых сістэмах). Адзіная прычына , каб выкарыстоўваць -reset, калі ваша дзеянне залежыць ад таго, працуе ў прыгатаваным рэжыме.

-echo сцяг пасылае сімвалы , якія адпавядаюць наступнай схеме назад у працэс , які генераваў іх як кожны знак чытаецца. Гэта можа быць карысна, калі карыстальнік павінен бачыць зваротную сувязь з часткова тыпізаваных мадэляў.

Калі шаблон быць рэхам , але ў рэшце рэшт не супадае, то сімвалы адпраўляюцца ў спарадзіла працэс . Калі спараджаў працэс затым паўтарае іх, карыстальнік убачыць сімвалы двойчы. -echo, верагодна , падыходзіць толькі ў тых сітуацыях , калі карыстач ці ледзь не завяршыць карціну. Напрыклад, наступны ўрывак з rftp рэкурсіўны FTP-скрыпт, у якім карыстачу прапаноўваецца ўвесці ~ г, ~ р, ці ~ л, атрымаць, паставіць, ці спіс бягучага каталога рэкурсіўна. Гэта так далёка ад звычайных каманд FTP, што карыстальнік наўрад ці тып ~ варта што-небудзь яшчэ, за выключэннем памылкова, і ў гэтым выпадку, яны, верагодна, проста ігнараваць вынік у любым выпадку.

ўзаемадзейнічаюць {-echo ~ г {1} getcurdirectory -echo ~ л {0} getcurdirectory -echo ~ р {putcurdirectory}}

Сцяг -nobuffer пасылае сімвалы , якія адпавядаюць наступнай схеме да выходнага працэсу , як сімвалы счытваюцца.

Гэта карысна , калі вы хочаце , каб праграма рэха назад шаблону. Напрыклад, наступны можа быць выкарыстаны для кантролю, калі чалавек набірае нумар (у Hayes стылі мадэм). Кожны раз, калі «ATD» разглядаецца сцэнар запісвае астатнюю частку радка.

карысць lognumber {} {ўзаемадзейнічаюць -nobuffer -re "\ г (*)." вяртанне ставіць $ часопіс "[фармат часу [гадзіннік секунд]]: набраны $ interact_out (1, радок)"} ўзаемадзейнічаюць -nobuffer "ATD" lognumber

Падчас ўзаемадзейнічаюць паміж сабой , папярэдняе выкарыстанне log_user ігнаруецца. У прыватнасці, ўзаемадзейнічаюць прымусіць яго выснова быць аўтарызаваны (пасланы ў стандартны вывад) , так як мяркуецца , карыстальнік не жадае ўзаемадзейнічаць з зачыненымі вачыма.

-o сцяг выклікае любыя наступныя пары ключоў цела , якія павінны прымяняцца да выхаду бягучага працэсу . Гэта можа быць карысна, напрыклад, пры працы з хастамі , якія пасылаюць непажаданыя сімвалы падчас телнета сесіі.

Па змаўчанні Ўзаемадзейнічаць чакае карыстальнік будзе пісаць і чытаць стандартны ўвод стандартны вывад аб Expect працэсу самога. Сцяг -u (для «карыстальніка») прымушае ўзаемадзейнічаць шукаць карыстальнік ў якасці працэсу , названага яго аргумент (які павінен быць спарадзіў ідэнтыфікатар).

Гэта дазваляе двум незвязаным працэсам быць злучаныя адзін з адным без выкарыстання яўнага цыклу. Каб дапамагчы ў адладцы, Чакаць дыягностыка заўсёды ідуць у стандартны струмень памылак (ці стандартны вывад для некаторых лесанарыхтовак і адладкавай інфармацыі). Па той жа прычыне, камандны інтэрпрэтатар будзе чытаць у інтэрактыўным рэжыме з стандартнага ўводу.

Напрыклад, наступны фрагмент стварае ўваход працэс . Затым ён набірае нумар карыстальніка (не паказана), і, нарэшце, злучае два разам. Вядома, любы працэс можа быць заменены для ўваходу ў сістэму . Абалонка, напрыклад, дазволіць карыстачу працаваць без прадастаўлення ўліковага запісу і пароль.

міцэліем набор Уваход Увайсці $ spawn_id міцэліем Кончык мадэм # дыск назад на карыстальніка # падлучэння карыстальніка для ўваходу ўзаемадзейнічаць -u $ лагін

Для таго, каб адправіць выснову некалькіх працэсаў, спіс кожнага спіс міцэліем ID папярэднічаецца -output сцяга. Уваход для групы выходных грыбніцы ідэнтыфікатараў можа быць вызначаны з дапамогай спісу ідэнтыфікатараў ікру папярэднічаюцца -input сцяга. (Абодва -input і -output можа прымаць спісы ў той жа форме , як сцяг -i у камандзе чакаць, за выключэнне таго, што any_spawn_id ня мае сэнсу ў ўзаемадзейнічаеце паміж сабой .) Усімі наступнымі сцягамі і радкамі (або мадэль) ужываецца да гэтага ўваходу да іншага - з'яўляецца ўваходны сцяг. Калі не з'яўляецца -input, -output азначае "-input $ user_spawn_id -output". (Сапраўды так жа, з ўзорамі , якія не маюць -input.) Калі паказаны адзін -input, ён перавызначаем $ user_spawn_id. Калі паказаны другі -input, ён перавызначаем $ spawn_id. Дадатковыя сцягі -input могуць быць пазначаныя.

Два разумеем ўвод апрацоўвае па змаўчанні для таго, што іх выхады вызначаны як $ spawn_id і $ user_spawn_id (у зваротным кірунку). Калі -input сцяг з'яўляецца, ня -output сцяга, сімвалы з гэтага працэсу адкідаецца.

Сцяг -i ўводзіць замену бягучага spawn_id , калі не выкарыстоўваюцца ніякія іншыя -input або -output сцягі. Сцяг -I азначае сцяг -o.

Можна змяніць працэсы, якія ўзаемадзейнічалі з дапамогай ўскосных ікры ідэнтыфікатараў. (Ускосная ікра ідэнтыфікатары апісаны ў раздзеле, прысвечанай камандзе чакаць.) Ускосныя ікра ідэнтыфікатары могуць быць вызначаны з дапамогай -i, -u, -input або -output сцягоў.

інтэрпрэтатар [Арг]
прыводзіць да таго , карыстальніку будзе прапанавана ўвесці ў інтэрактыўным рэжыме Чакаць і каманды Tcl. Вынік кожнай каманды друкуецца.

Такія дзеянні, як структуры кіравання перапынку і па- ранейшаму выклікаюць (напрыклад, для, Proc) паводзіць сябе звычайным чынам. Аднак вярнуцца , выклікае інтэрпрэтатар , каб вярнуцца да свайго абаненту, у той час як inter_return выклікае інтэрпрэтатар , каб выклікаць вяртанне ў выклікалым. Напрыклад, калі «карысць Foo» завецца інтэрпрэтатар , які затым выканала inter_return дзеянні, карысць Foo вернецца. Любы іншы інтэрпрэтатар каманд прычыны для працягу запыту на новыя каманды.

Па змаўчанні, запыт ўтрымлівае два цэлых колькасці. Першае чысло апісвае глыбіню стэка ацэнкі (гэта значыць, колькі разоў Tcl_Eval было названа). Другое лік з'яўляецца гісторыя ідэнтыфікатар Tcl. Запыт можа быць усталяваны шляхам вызначэння працэдуры, званай «PROMPT1», значэнне якога вяртанне становіцца наступным радком. Калі аператар мае адкрытыя двукоссі, дужкі, фігурныя дужкі або дужкі, другаснае запрашэнне (па змаўчанні «+>») выдаецца на новы радок. Другаснае запрашэнне можа быць устаноўлена шляхам вызначэння працэдуры, званай «PROMPT2».

Падчас інтэрпрэтатара выкарыстоўваюцца прыгатаваная рэжым, нават калі яго абанент выкарыстоўвае рэжым сырца.

Калі STDIN зачынены, інтэрпрэтатар вернецца , калі не выкарыстоўваецца -eof сцяг, у гэтым выпадку выклікаецца наступны аргумент.

log_file [Арг] [[-a] файл]
Калі імя файла пры ўмове, log_file будзе запісваць стэнаграму сэсіі (пачатак у гэтай кропцы) у файле. log_file спыніць запіс , калі аргумент не зададзены. Любы папярэдні файл часопіса зачынены.

Замест імя файла, ідэнтыфікатар файла Tcl можа быць забяспечаны з дапамогай -open або -leaveopen сцягоў. Гэта падобна на каманду ікры. (Глядзі ікры для атрымання дадатковай інфармацыі.)

-a выхад сцяга сілы павінны ўвайсці , што было задушана з дапамогай каманды log_user.

Па змаўчанні log_file каманды дадае да старых файлаў , а не зачыняць іх, для зручнасці , каб быць у стане адключыць рэгістрацыю і некалькі разоў у адной сесіі. Для ўсячэння файлаў, выкарыстоўвайце сцяг -noappend.

У -INFO сцяг прычыны log_file вярнуць апісанне самых апошніх аргументаў ня-інфо дадзеных.

log_user -info | 0 | 1
Па змаўчанні, пасыл / чакаць дыялог запісваецца на стандартны вывад (і файл_журнал, калі яна адкрыта). Каротажа на стандартны вывад адключаны камандай «log_user 0» і зноў ўключыць на «log_user 1». Уваход у лог-файл не змяняецца.

У -INFO сцяг прычыны log_user вярнуць апісанне самых апошніх аргументаў ня-інфо дадзеных.

match_max [-d] [-i spawn_id] [памер]
вызначае памер буфера (у байтах) , які выкарыстоўваецца ўнутрана чакаць. Пры адсутнасці памеру аргументу, бягучы памер вяртаецца.

З сцягам -d, памер па змаўчанні ўсталяваны. (Пачатковы па змаўчанні 2000.) З сцягам -i, памер усталёўваецца для найменнага ікру ід, у адваротным выпадку ён усталёўваецца для бягучага працэсу .

накладанне [- # spawn_id] [- # spawn_id] [...] праграма [Арг]
выконвае «праграму Арг» замест бягучых Чакаць праграмы, якая сканчаецца. Голы злучок аргумент прымушае злучок перад імем каманды, як калі б гэта былі Увайсці абалонкі. Усе spawn_ids закрыты для тых, хто названы ў якасці аргументаў, акрамя. Яны адлюстроўваюцца на найменных ідэнтыфікатараў файлаў.

Spawn_ids адлюстроўваецца ў файл ідэнтыфікатараў для новай праграмы ў спадчыну. Напрыклад, наступны радок запускае шахматы і дазваляе яму кіраваць бягучых працэсам - скажам, майстрам шахмат.

накладанне -0 $ spawn_id -1 $ spawn_id -2 $ spawn_id шахматы

Гэта больш эфектыўна , чым «ўзаемадзейнічаць -u», тым ня менш, яна прыносіць у ахвяру здольнасць не рабіць запраграмаванае ўзаемадзеянне , так як Чакаць працэс ужо не ў кантролі.

Звярніце ўвагу, што ні адзін які кантралюе тэрмінал не прадугледжаны. Такім чынам, пры адключэнні або перапрызначыць стандартны ўвод, праграмы, якія робяць кіраванне заданнямі (шкарлупіна, лагін і г.д.) не будзе функцыянаваць належным чынам.

цотнасці [-d] [-i spawn_id] [значэнне]
вызначае, ці павінна быць захавана на цотнасці або падзелу з выхаду спароджаных працэсаў. Калі значэнне роўна нулю, то цотнасць распранулі, у адваротным выпадку ён не пазбаўлены. Пры адсутнасці значэння аргументу, бягучае значэнне вяртаецца.

З сцягам -d, значэнне цотнасці па змаўчанні ўсталёўваецца. (Пачатковую па змаўчанні 1, гэта значыць, цотнасць ня падзелу.) З сцягам -i, значэнне цотнасці усталёўваецца для Найменныя ікры ід, у адваротным выпадку ён усталёўваецца для бягучага працэсу .

remove_nulls [-d] [-i spawn_id] [значэнне]
вызначае , будзе ці захаваны або выдалены з высновы спароджаных працэсаў перад супастаўленнем або захоўваць у зменнай expect_out або interact_out шаблон нулёў. Калі значэнне роўна 1, нулі выдаляюцца. Калі значэнне роўна 0, обнуляет не выдаляюцца. Пры адсутнасці значэння аргументу, бягучае значэнне вяртаецца.

З сцягам -d, то значэнне па змаўчанні ўсталёўваецца. (Пачатковую па змаўчанні роўна 1, г.зн. нулі будуць выдаленыя.) З сцягам -i, значэнне ўсталёўваецца для Найменныя ікры ID, у адваротным выпадку яно ўсталёўваецца для бягучага працэсу .

Будзь ці не обнуляет выдаляюцца, Expect будзе запісваць нулявыя байты ў часопіс і стандартны вывад.

адправіць [-flags] радок
Пасылае радок бягучага працэсу . Напрыклад, каманда

паслаць «прывітанне свет \ г»

пасылае сімвалы, HelloWorld да бягучага працэсу . (Tcl ўключае PRINTF -like каманды ( так званы фармат) , які можа будаваць калі заўгодна складаныя радка.)

Сімвалы адпраўляюцца неадкладна, хоць праграмы з лініяй буферам ўводу, не будуць чытаць сімвалы, пакуль сімвал вяртання не будзе адпраўлены. Зваротны сімвал пазначаецца «\ г».

- сцяг прымушае наступны аргумент , які будзе інтэрпрэтавацца як радок , а не сьцяг. Любы радок можа папярэднічаць «-» ці не на самай справе выглядае гэта як сцяг. Гэта забяспечвае надзейны механізм для ўказанні зменных радкоў без спатыкнуўся на тых, якія выпадкова падобныя на сцягі. (Усе радкі, якія пачынаюцца з «-» зарэзерваваны для будучых магчымасцяў.)

Сцяг -i аб'яўляе , што радок будзе адпраўлена ў названым spawn_id. Калі spawn_id з'яўляецца user_spawn_id, і тэрмінал знаходзіцца ў нестандартным рэжыме, новыя радкі ў радку, перакладаецца зваротным новая радок паслядоўнасці , так што яны з'яўляюцца , як быццам тэрмінал знаходзіўся ў прыгатаваным рэжыме. -raw сцяг адключае пераклад.

-null сцяг пасылае нулявыя сімвалы (0 байт). Па змаўчанні, адзін нуль адпраўляецца. Цэлае лік можа прытрымлівацца -null , каб паказаць , колькі обнуляет адправіць.

-break сцяг генеруе ўмова перапынення. Гэта мае сэнс толькі, калі спараджэнне ідэнтыфікатар ставіцца да TTY прыладзе адчынены праз «нераст -open». Калі вы спарадзілі працэс , такія як наканечнік, вы павінны выкарыстоўваць пагадненне TIP для стварэння разрыву.

-s выхаднога сцяга сілы для адпраўкі «павольна», такім чынам , пазбегнуць распаўсюджанай сітуацыі , калі кампутар outtypes уваходнага буфера , які быў распрацаваны для чалавека , які ніколі б не outtype таго ж буфера . Гэты выхад кіруецца значэннем пераменнага «send_slow», які прымае спіс з двух элементаў. Першы элемент ўяўляе сабой цэлы лік, якое апісвае колькасць байт для адпраўкі атамарна. Другі элемент ўяўляе сабой сапраўдны лік, якое апісвае колькасць секунд, з дапамогай якіх атамных пасылае павінны быць падзеленыя. Напрыклад, «усталяваць send_slow {10} 0,001» прымусіць «адправіць -s», каб адправіць радкі з 1 мілісекунды паміж кожныя 10 адпраўленых знакаў.

-h вываду сцяг сілы для адпраўкі (некалькі) , як на самой справе друкаваць чалавек. Чалавек-падобныя затрымкі з'яўляюцца паміж знакамі. (Алгарытм заснаваны на размеркаванне Вейбуллу, са зменамі, каб задаволіць гэта канкрэтнае прымяненне.) Гэтая выснова кантралюецца значэннем пераменнага «send_human», які прымае спіс з пяці элементаў. Першыя два элемента з'яўляецца сярэднім interarrival часу знакаў у секундах. Першы выкарыстоўваецца па змаўчанні. Другі выкарыстоўваецца на слова канчаткаў, каб імітаваць тонкія паўзы, якія часам узнікаюць пры такіх пераходах. Трэці параметр з'яўляецца мерай зменлівасці, дзе 0,1 даволі зменліва, 1 з'яўляецца дастаткова пераменным, а 10 цалкам нязменна. Крайнасці ад 0 да бясконцасці. Апошнія два параметры, адпаведна, мінімальная і максімальная interarrival час. Мінімальны і максімальны выкарыстоўваюцца ў мінулым і «кліп» у апошні раз. Канчатковае сярэдняе можа быць вельмі адрозніваюцца ад зададзенага сярэдняга, калі мінімальныя і максімальных кліп досыць значэнняў.

У якасці прыкладу, наступная каманда эмулюе хуткую і паслядоўную машыністку:

набор send_human {0,1 0,3 1 0,05 2} адправіць -h «Я галодны. Давайце рабіць абед.»

у той час як наступны можа быць больш прыдатным пасля пахмелля:

мноства send_human {0,4 0,4 ​​0,2 0,5 100} адправіць -h «Goodd партыі накінуцца ноччу!»

Звярніце ўвагу, што памылкі не змадэляваныя, хоць вы можаце ўсталяваць выпраўленне памылкі сітуацыі сябе ўбудоўваючы памылкі і выпраўленне ў адпраўленым аргуменце.

Сцягі для адпраўкі нулявых сімвалаў, для адпраўкі перапынкаў, за фарсіраванне павольнага выхаду і выхад чалавечага стылю з'яўляюцца ўзаемавыключальнымі. будзе выкарыстоўвацца толькі адзін пазначаны апошнім. Акрамя таго, ні адзін аргумент радкі не можа быць вызначаны з сцягамі для адпраўкі нулявых сімвалаў або разрываў.

Гэта добрая ідэя , каб папярэднічаць першую адпраўку да працэсу вырабляны чакаць. чакаць , будзе чакаць працэсу , каб пачаць, а адправіць не магу. У прыватнасці, калі першы пасылу завяршаецца да таго , як працэс пачынае працаваць, вы рызыкуеце мець вашыя дадзеныя ігнаруюцца. У сітуацыях , калі інтэрактыўныя праграмы прапануюць не першапачатковы запыт, вы можаце адправіць папярэднічаюць затрымкай , як у:

# Для таго, каб не даць хакераў падказкі аб тым, як ўзламаць, # гэтая сістэма не запытвае знешні пароль. # Пачакайце 5 секунд для Exec, каб завяршыць ікру телнета very.secure.gov сну 5 адправіць пароль \ г

exp_send з'яўляецца псеўданімам для адпраўкі. Калі вы выкарыстоўваеце Expectk ці якой - небудзь іншы варыянт Чакаць у асяроддзі Tk, адправіць вызначаецца Tk для цалкам іншай мэты. exp_send прадугледжана для сумяшчальнасці паміж асяроддзямі. Падобныя псеўданімы прадастаўляюцца для іншых Чакаць іншыя свае каманды пасылу.

SEND_ERROR [-flags] радок
падобна пасылу, за выключэннем таго, што вывад накіроўваецца ў стандартны вывад , а не бягучага працэсу .

send_log [-] радок
падобна пасылу, за выключэннем таго, што радок адпраўляецца толькі ў лог - файл (гл LOG_FILE.) Аргументы ігнаруюцца , калі файл часопіса не адкрыты.

send_tty [-flags] радок
падобна пасылу, за выключэннем таго, што вывад накіроўваюцца ў / Dev / TTY , а не бягучы працэс .

send_user [-flags] радок
падобна пасылу, за выключэннем таго, што вывад накіроўваецца на стандартны вывад , а не бягучага працэсу .

секунды сну
выклікае сцэнар спаць на зададзенае колькасць секунд. Секунды могуць быць дзесятковым лікам. Перапынення (і падзеі Tk калі вы карыстаецеся Expectk) апрацоўваюцца ў той час як Чакаць спіць.

ікра [Арг] праграма [Арг]
стварае новы працэс працуе «праграма Арг». Яго STDIN, STDOUT і STDERR падлучаныя да Чакаць, так што яны могуць быць прачытаныя і запісаны іншымі камандамі чакаць , . Злучэнне парушана блізка або калі працэс сам па сабе закрывае якой - небудзь з ідэнтыфікатараў файлаў.

Калі працэс запускаецца ікру, пераменная spawn_id усталёўваецца ў дэскрыптар са спасылкай на гэты працэс . Працэс апісваецца spawn_id лічыцца «бягучых працэсам ». spawn_id можа быць лічаны або запісаны, фактычна забяспечваючы кіраванне заданнямі.

user_spawn_id ўяўляе сабой глабальную зменную , якая змяшчае дэскрыптар , які адносіцца да карыстача. Напрыклад, калі spawn_id усталёўваецца на гэта значэнне, чакаць паводзіць сябе як expect_user.

.I error_spawn_id ўяўляе сабой глабальныя пераменны , які змяшчае дэскрыптар , які адносіцца да стандартнай памылцы. Напрыклад, калі spawn_id усталёўваецца на гэта значэнне, адпраў паводзіць сябе як SEND_ERROR.

tty_spawn_id ўяўляе сабой глабальныя пераменны , які змяшчае дэскрыптар , які спасылаецца на / распрацоўшчык / тэрмінал. Калі / DEV / тэрмінал не існуе (напрыклад, у хрон, пры або пакетным сцэнары), то tty_spawn_id не вызначаны. Гэта можа быць праверана наступным чынам:

калі {[Інфармацыя пра Вары tty_spawn_id]} {# / DEV / TTY існуе} яшчэ {# / DEV / тэрмінал не існуе #, верагодна, у хрон, партыя, ці ў сцэнары}

міцэліем вяртае UNIX працэс ідэнтыфікатар. Калі няма працэсу не нараджаў, 0 вяртаецца. Пераменная spawn_out (кіраваны, імя) усталёўваецца на імя псевдотерминал кіраванага прылады.

Па змаўчанні, ікра паўтарае імя каманды і аргументы. У -noecho прыпынку сцяга ікра ад рабіць гэта.

-console выхад сцяг выклікае кансоль перанакіраваны на спарадзіла працэс . Гэта не падтрымліваецца на ўсіх сістэмах.

Ўнутрана, міцэліем выкарыстоўвае Pty, ініцыялізуецца гэтак жа, як тэлетайп карыстальніка. Гэта дадаткова ініцыялізаваць так, што ўсе налады «нармальныя» (у адпаведнасці з запушчаным (1)). Калі зменная stty_init вызначана, то яна інтэрпрэтуецца ў стылі аргументаў запушчаных як далейшая канфігурацыя. Напрыклад, «мноства stty_init сырога» выкліча далейшы спарадзіў тэрміналы працэсаў, каб пачаць у нестандартным рэжыме. -nottycopy прапускае ініцыялізацыю заснаваную на тэлетайп карыстальніка. -nottyinit прапускае «разумны» ініцыялізацыі.

Звычайна нераст займае мала часу , каб выканаць. Калі вы заўважылі, ікру прымаць значнае колькасць часу, гэта, верагодна, сутыкаючыся PTYs, якія ўкліньваюцца. Шэраг тэстаў выконваецца на Ptys, каб пазбегнуць заблытвання з вандроўнымі працэсамі. (Гэта зойме 10 секунд на клінаватую PTY.) Running Чакаць з опцыяй -d пакажа , калі чакаць , сустракаецца са шматлікім PTYs ў няцотных станах. Калі вы не можаце забіць працэсы, да якіх прымацаваныя гэтыя PTYs, ваш адзіны выхад можа быць перазагружаны.

Калі праграма не можа быць паспяхова спараджаў , паколькі Exec (2) не атрымоўваецца (напрыклад , калі праграма не існуе), паведамленне пра памылку будзе вернута да наступнага або ўзаемадзейнічаюць паміж сабой каманду чакаць , як калі б праграма была бегчы і спрадусаваў паведамленне пра памылку ў якасці высновы. Такія паводзіны з'яўляецца натуральным следствам рэалізацыі міцэліем. Ўнутры нераст відэльцы, пасля чаго спарадзіў працэс не мае ніякага спосабу мець зносіны з арыгінальным Expect працэсу за выключэннем сувязі праз spawn_id.

-open сцяг выклікае наступны аргумент , які будзе інтэрпрэтавацца як ідэнтыфікатар файла Tcl (гэта значыць, вернуты адкрытым.) Ікра ідэнтыфікатар можа быць выкарыстаны , як калі б ён быў спарадзіў працэс . (Ідэнтыфікатар файла больш не павінен выкарыстоўвацца.) Гэта дазваляе разглядаць сырыя прылады, файлы і трубаправоды, як спароджаныя працэсы без выкарыстання PTY. 0 вяртаецца , каб паказаць не звязаны працэс . Калі злучэнне з пародай працэсам закрыта, так гэта ідэнтыфікатар файла Tcl. -leaveopen сцяг падобны на -о ткройте за выключэннем таго, што -leaveopen выклікае ідэнтыфікатар файла застаецца адкрытым нават пасля таго, як спараджэнне ідэнтыфікатар зачынены.

-pty сцяг выклікае PTY , які будзе адкрыты , але не працэс ня спарадзіў. 0 вяртаецца , каб паказаць не звязаны працэс . Spawn_id усталёўваецца як звычайна.

Пераменная spawn_out (кіраваны, FD) усталёўваецца ў ідэнтыфікатар файла , адпаведнага PTy кіраванага прылады. Ён можа быць зачынены пры дапамозе «закрыць -slave».

У -ignore імёнаў сцягоў сігналу ігнаруюцца ў спараджэнні працэсе . У адваротным выпадку, сігналы атрымаць паводзіны па змаўчанні. Сігналы названыя ў камандзе пасткі, за выключэннем таго, што кожны сігнал патрабуе асобнага сцяга.

ўзровень Трассирование
прычыны, якія будуць надрукаваны перад пакараннем смерцю наступных сцвярджэнняў. (Каманда трасіроўкі Tcl прасочвае зменныя.) Узровень паказвае , наколькі далёка ўніз ў стэку выклікаў для адсочвання. Напрыклад, наступныя выконваецца каманда Чакаць, Прасочваючы першыя 4 ўзроўню выклікаў, але ні ніжэй.

чакаць -c "Трассирование 4" script.exp

У -INFO сцяг прычыны Трассирование вярнуць апісанне самых апошніх аргументаў ня-інфо дадзеных.

запушчаная Арг
змяняе рэжымы тэрмінала падобна камандзе знешняй запушчаных.

Па змаўчанні, тэрмінал кіравання даступны. Іншыя тэрміналы можна атрымаць шлях дадання "Просьба аб прадастаўленні статусу вярнуць яго як вынік каманды. Калі няма статусу не будзе запытаны і кіраўнік тэрмінал даступны папярэдні статус зыходных і рэха атрыбутаў вяртаецца ў форме, якая ў далейшым можа быць выкарыстоўваная каманда.

Напрыклад, аргументы сырымі ці -cooked паставіць тэрмінал у нестандартным рэжыме. Аргументы -raw або вараныя паставіць тэрмінал у падрыхтаваным рэжым. Аргументы рэха і -echo паставіць тэрмінал у рэха і NoEcho рэжыму адпаведна.

У наступным прыкладзе паказана, як часова адключыць рэха. Гэта можа быць выкарыстана ў адваротным выпадку аўтаматычных скрыптоў, каб пазбегнуць ўбудавання пароляў у іх. (Глядзі больш падрабязнае абмеркаванне па гэтым пытанні пад Чакаюцца намёкі ніжэй.)

Запушчаная -echo send_user "Пароль:" "(. *) \ П" expect_user -re ўсталяваць пароль $ expect_out (1, радок) запушчаная рэха

сістэма Арг
дае Арг да ш (1) у якасці ўваходных дадзеных, гэтак жа , як калі б яна была набраныя ў якасці каманды з тэрмінала. Чакаць чакае , пакуль абалонка не завершыцца. Статус вяртання ад ш апрацоўваецца такім жа чынам , што Exec апрацоўвае яго вяртання статусу.

У адрозненні ад EXEC , якая перанакіроўвае стандартны ўвод і стандартны вывад у сцэнар, сістэма не выконвае перанакіравання (акрамя таго, што паказана ў самой радку). Такім чынам, можна выкарыстоўваць праграмы, якія павінны гаварыць непасрэдна / распрацоўшчык / TTY. Па той жа прычыне, вынікі сістэмы не запісваюцца ў часопіс.

часовыя пазнакі [Арг]
вяртае змяняць час. Без аргументаў, колькасць секунд з пачатку эпохі вяртаецца.

Сцяг -format ўводзіць радок , якая вяртаецца , але з зробленых замен ў адпаведнасці з правіламі POSIX для STRFTIME. Напрыклад,% а замяняецца на скарочаны назоў дня тыдня (гэта значыць, Сб). іншыя:

% А скарочаная назва дня тыдня% Поўная назва дня тыдня% B скарочаны назоў месяца% B поўная назва месяца% З даты і часу, як у Ср 6 кастрычніка 1993 11: 45: 56% D дзень месяца (01-31% H гадзіну (00-23)% I гадзіну (01-12)% ы дзень (001-366)% м месяцы (01-12)% M хвілін (00-59)% р раніцы або вечара% S другі (00-61) % U дзень (1-7, панядзелак першы дзень тыдня)% U тыдзень (00-53, першую нядзелю ў першы дзень тыдня адзін)% V тыдзень (01-53, ISO 8601 стыль)% мас дзень (-0- 6)% W тыдзень (00-53, першы панядзелак у першы дзень тыдня адзін)% х даты і часу, як у Ср 6 кастрычніка 1993% час X, як у: 23: 59: 59% ы год (00-99) % Y год, як: 1993% Z гадзінны пояс (або нічога, калі не вызначыць) %% голую знак адсотка

Іншая% спецыфікацыя не вызначана. Іншыя сімвалы будуць перадавацца праз некранутыя. Толькі лакаль C падтрымліваецца.

-seconds сцяг уяўляе колькасць секунд з пачатку эпохі для выкарыстання ў якасці крыніцы , з якога ў фармат. У адваротным выпадку, выкарыстоўваецца бягучы час.

-gmt выхадны сцяг сілы пазнакі часу выкарыстоўваць GMT гадзінны пояс. Пры адсутнасці сцяга, выкарыстоўваецца лакальны гадзінны пояс.

Пастка [[каманда] Сігналы]
прыводзіць да таго , дадзеная каманда павінна быць выканана пры будучыні атрыманні любога з названых сігналаў. Каманда выконваецца ў глабальнай вобласці. Калі каманда адсутнічае, то дзеянне сігналу вяртаецца. Калі каманда з'яўляецца радок SIG_IGN, сігналы ігнаруюцца. Калі каманда з'яўляецца радок SIG_DFL, сігналы прыводзяць да сістэмы па змаўчанні. Сігналы альбо адзін сігнал або спіс сігналаў. Сігналы могуць быць зададзены ў лічбавай форме або сімвалічна ў адпаведнасці з сігналам (3). Прыстаўка «SIG» можа быць апушчана.

Без аргументаў (ці аргумент) -номер, пастка вяртае нумар сігналу каманды пасткі ў цяперашні час выконваецца.

Сцяг -код выкарыстоўвае код звароту каманды замест любога кода Tcl збіраўся вярнуцца , калі каманда першапачаткова працуе.

-interp сцяг прымушае каманду , якая будзе ацэньвацца з дапамогай перакладчыка актыўна ў той час каманда пачала бегаць , а не калі была абвешчаная пастка.

-name сцяг прымушае каманду пасткі , каб вярнуць імя сігналу каманды пасткі ў цяперашні час выконваецца.

-max сцяг прымушае каманду пасткі вярнуць найбольшая колькасць сігналаў , якія могуць быць устаноўлены.

Напрыклад, каманда «пастка {send_user" Ой! "} SIGINT» надрукуе «Ой!» кожны раз, калі карыстальнік націскае ^ C.

Па змаўчанні, SIGINT (якія звычайна могуць быць атрыманы шляхам націску ^ C) і SIGTERM прычына Чакаць выхад. Гэта звязана з наступнага пастцы, створанай па змаўчанні пры Чакаць пачынаецца.

Пастка выхаду {SIGINT SIGTERM}

Калі вы выкарыстоўваеце сцяг -D для запуску адладчыка, SIGINT перавызначаць, каб пачаць інтэрактыўны адладчык. Гэта звязана з наступнага пасткі:

Пастка {1} exp_debug SIGINT

Адладчык пастку можна змяніць, усталяваўшы зменную асяроддзі EXPECT_DEBUG_INIT ў новай камандзе пасткі.

Вы можаце, вядома, перавызначыць абодва з іх проста шляхам дадання каманд пасткі для вашага сцэнара. У прыватнасці, калі ў вас ёсць свой уласны «пастка выхад SIGINT», то гэта будзе перавызначыць адладчык пастку. Гэта карысна, калі вы хочаце забараніць карыстальнікам атрымліваць адладчык наогул.

Калі вы хочаце, каб вызначыць сваю ўласную пастку на SIGINT, але па-ранейшаму пастку адладчык, калі ён працуе, выкарыстоўвайце:

калі {! [exp_debug]} {Пастка MyStuff SIGINT}

У якасці альтэрнатывы, вы можаце пастку адладчыка з дапамогай якога-небудзь іншага сігналу.

Пастка не дазволіць вам адмяніць дзеянне для SIGALRM як гэта выкарыстоўваецца ўнутры Чакаць. Наборы каманд адключэння SIGALRM ў SIG_IGN (ігнараваць). Вы можаце зноў уключыць гэта да тых часоў, як вы вывесці яго са строю падчас наступных каманд грыбніцы.

См сігналу (3) для атрымання дадатковай інфармацыі.

чакаць [Арг]
затрымкі датуль , спароджанага працэсу (або бягучага працэсу , калі ён ня названы) завяршаецца.

чакаць , як правіла , вяртае спіс з чатырох цэлых лікаў. Першае цэлы лік з'яўляецца PID з працэсу , які быў ўсіх, хто чакаў. Другое лік прадстаўлены ет сабой адпаведную ікру ID. Трэцяе лік роўна -1, калі адбылася памылка аперацыйнай сістэмы або 0 у адваротным выпадку. Калі трэцяе цэлы лік 0, чацвёртае лік з'яўляецца статус , які вяртаецца спароджанага працэсу . Калі трэцяе лік было -1, чацвёртае лік з'яўляецца значэннем егто усталяваны ў аперацыйнай сістэме. Глабальная пераменная ERRORCODE таксама высвятляецца.

Дадатковыя элементы могуць з'яўляцца ў канцы вяртаецца значэння чаканні. Дадатковы пяты элемент ідэнтыфікуе клас інфармацыі. У цяперашні час адзіным магчымым значэннем для гэтага элемента CHILDKILLED ў гэтым выпадку наступныя два значэння: імя сігналу С-тыпу і кароткае тэкставае апісанне.

Сцяг -i аб'яўляе працэс чакання , якое адпавядае імя spawn_id (не працэс ід). Ўнутры апрацоўшчыка SIGCHLD, можна чакаць любога спароджанага працэсу , выкарыстоўваючы -1 ікру ID.

-nowait сцяг прымушае чакаць неадкладна вярнуцца з указаннем паспяховага чаканні. Калі працэс выходзіць (пазней), ён аўтаматычна знікне без неабходнасці відавочнага чаканні.

Каманда чакання можа таксама выкарыстоўвацца для чакання раздвоенага працэсу , выкарыстоўваючы аргументы «-i -1». У адрозненне ад яго выкарыстання з спароджаныя працэсамі, гэтая каманда можа быць выканана ў любы час. Там няма ніякага кантролю над якім працэс будзе пажынаць. Тым ня менш, вяртаецца значэнне можа быць праверана для працэсу ід.

БІБЛІЯТЭКІ

Чакаць аўтаматычна ведае два ўбудаваных бібліятэк для сцэнарыяў чакаць ,. Яны вызначаюцца ў каталогах, указаных у зменных exp_library і exp_exec_library. Абодва прызначаныя ўтрымліваць службовыя файлы, якія могуць выкарыстоўвацца іншымі сцэнарамі.

exp_library ўтрымлівае архітэктурна-незалежныя файлы. exp_exec_library ўтрымлівае архітэктурна-залежныя файлы. У залежнасці ад сістэмы, як каталогі могуць быць зусім пустымі. Існаванне файла $ exp_exec_library / котак-буфера, апісвае Ці вашыя / бен / кошка буфераў па змаўчанні.

Даволі-ПЕЧАТЬ

Вызначэнне vgrind даступна для даволі-друку Чакаць сцэнары. Мяркуючы , што вызначэнне vgrind пастаўляным з размеркаваннем Expect правільна ўсталяваны, вы можаце выкарыстоўваць яго як:

vgrind -lexpect файл

прыклады

Гэта многія з іх ня павінна быць відавочна , як паставіць усе разам , што чалавек старонка апісвае. Я заклікаю вас чытаць і апрабаваць прыклады ў каталогу прыкладаў размеркавання Expect. Некаторыя з іх з'яўляюцца рэальнымі праграмамі. Іншыя проста ілюструюць некаторыя метады, і, вядома ж, пара проста хутка пісакі. INSTALL файл змяшчае кароткі агляд гэтых праграм.

У Чакаць працы (гл ГЛЯДЗІЦЕ ТАКСАМА) таксама карысныя. У той час як некаторыя дакументы выкарыстоўваюць сінтаксіс, адпаведныя больш раннія версіі Чакаць, прыкладаемая Абгрунтаванні ўсё яшчэ сапраўдная і ісці ў значна больш падрабязна, чым гэтым чалавеку старонка.

ПЕРАСЦЯРОГІ

Пашырэння могуць сутыкнуцца з Чакаць Імёны каманд. Напрыклад, адправіць вызначаецца Tk для цалкам іншай мэты. Па гэтай прычыне, большасць каманд чакаць , таксама даступныя як «exp_XXXX». Каманды і зменныя, якія пачынаюцца з «ехр», «Інтэр», «ікру» і «тайм-аўт» не маюць псеўданімы. Выкарыстоўвайце пашыраныя імёны каманд, калі вам патрэбна гэтая сумяшчальнасць паміж асяроддзямі.

Чакаць прымае даволі ліберальны погляд агляднага. У прыватнасці, зменныя счытвае каманды , спецыфічныя для праграмы Expect будзе шукаць першы з лакальнай вобласці, і калі ён не знойдзены, у глабальным маштабе. Напрыклад, гэта пазбаўляе ад неабходнасці размяшчаць «глабальны тайм - аўт» у кожнай працэдуры вы пішаце , што выкарыстоўвае чакаць. З іншага боку, пераменны, напісаныя заўсёды ў лакальнай вобласці бачнасці (калі каманда «глабальная" не выдаваліся). Самы распаўсюджаная праблема гэта выклікае, калі міцэліем выконваецца ў парадку. Па-за працэдуры не spawn_id больш не існуе, таму спараджаў працэс больш не даступны проста з вобласці бачнасці. Дадаць «глабальны spawn_id» для такой працэдуры.

Калі вы не можаце ўключыць магчымасць multispawning (г.зн. ваша сістэма ня падтрымлівае ні выбару (BSD *. *), Апытаньне (SVR> 2), ні чаго - небудзь падобнага), спадзявайцеся толькі будзе ў стане кантраляваць адзіны працэс , у той час. У гэтым выпадку, не спрабуйце ўсталяваць spawn_id, Вы не павінны выконваць працэсы з дапамогай Exec а спараджаў працэс запушчаны. Акрамя таго, вы не будзеце мець магчымасць чакаць ад некалькіх працэсаў ( у тым ліку карыстальнікаў , як адзін) , у той жа час.

Тэрмінальныя зьвестак можа мець вялікі ўплыў на сцэнары. Напрыклад, калі сцэнар напісаны шукаць рэха, ён будзе сваволіць, калі Паўтараючы выключаны. Па гэтай прычыне, Чакаць сілы разважных параметры тэрмінала па змаўчанні. На жаль, гэта можа зрабіць рэчы непрыемнымі для іншых праграм. У якасці прыкладу, абалонка Emacs хоча змяніць «звычайных» адлюстравання: новыя радкі атрымаць пераўтворацца ў сімвалы новага радка замест вяртання карэткі сімвал новага радка, і паўтараюць за адключаны. Гэта дазваляе выкарыстоўваць Emacs для рэдагавання радкі ўводу. На жаль, Expect не можа адгадаць гэта.

Вы можаце запытаць Чакаць не адмяняе яго наладу параметраў тэрміналаў па змаўчанні, але вы павінны быць вельмі асцярожныя пры напісанні сцэнарыяў для такіх асяроддзяў. У выпадку Emacs, каб пазбегнуць залежнасці ад такіх рэчаў, як рэха і са скончаным лініі адлюстравання.

Каманды , якія прынялі аргументы упёрся ў адным спісе (чакаюць варыянты і ўзаемадзейнічаюць) выкарыстоўваюць эўрыстыкі , каб вырашыць , калі спіс на самой справе адзін аргумент або шмат. Эўрыстычны могуць не толькі ў тым выпадку, калі спіс насамрэч уяўляе сабой адзін аргумент, які мае некалькі ўбудаваных \ п з непробельными сімваламі паміж імі. Гэта, як уяўляецца, досыць малаверагодна, аднак аргумент «-nobrace» можа быць выкарыстаны, каб прымусіць адзін аргумент будзе апрацоўвацца як адзін аргумент. Гэта, верагодна, можа быць выкарыстаны з машынай згенераваных Чакаць кода. Сапраўды гэтак жа, -brace прымушае адзін аргумент, каб быць, як апрацоўваць некалькі шаблонаў / дзеянні.

ПАМЫЛКІ

Гэта было вельмі павабна назваць праграму «сэкс» (або для «Smart EXEC» або «Send-Чакайце»), але здаровы сэнс (ці, магчыма, проста пурытанства) пераважала.

У некаторых сістэмах, калі абалонка спараджаў, ён скардзіцца на не ў стане атрымаць доступ да TTY, але працуе ў любым выпадку. Гэта азначае , што сістэма мае механізм для здабыцця кіраўніка тэрмінала , што Expect не ведае. Калі ласка, даведацца, што гэта такое, і адправіць гэтую інфармацыю назад да мяне.

Ultrix 4,1 (прынамсі, апошнія версіі вакол тут) лічыць таймаўту з вышэй 1000000 быць эквівалентна 0.

Digital UNIX 4.0A (і , магчыма , іншыя версіі) адмаўляецца выдзяляць PTYs калі вызначыць апрацоўшчык SIGCHLD. См grantpt старонкі для атрымання дадатковай інфармацыі.

IRIX 6.0 не апрацоўвае дазволу PTy правільна, так што калі Чакаць спробы вылучыць раней які выкарыстоўваецца PTY кімсьці іншым, ён трывае няўдачу. Абнаўленне да IRIX 6.1.

Telnet (праверана толькі пад SunOS 4.1.2) завісае, калі тэрмін не вызначаны. Гэта праблема пры хрон, на і ў CGI скрыптах, якія не вызначаюць TERM. Такім чынам, вы павінны ўсталяваць яго ў відавочным выглядзе - да якога тыпу, як правіла, не мае значэння. Ён проста павінен быць усталяваны на што-то! Далей, верагодна, дастаткова для большасці выпадкаў.

Набор ENV (ТЭРМІН) VT100

Савет (праверана толькі пад BSDI BSD / OS 3.1 i386) завісае, калі SHELL і HOME не ўстаноўлены. Гэта праблема пры хрон , на і ў CGI скрыптах, якія не вызначаюць гэтыя зменныя асяроддзі. Такім чынам, вы павінны ўсталяваць іх відавочна - да якога тыпу, як правіла, не мае значэння. Ён проста павінен быць усталяваны на што-то! Далей, верагодна, дастаткова для большасці выпадкаў.

ўсталяваць акр (SHELL) / бен / ш мноства ENV (HOME) / USR / мясцовыя / бен

Некаторыя рэалізацыі Ptys распрацаваны такім чынам, што ядро выкідвае непрачытаных выхад пасля 10 да 15 секунд (фактычны лік залежыць ад рэалізацыі) пасля таго , як працэс быў зачынены дэскрыптар файла. Такім чынам , чакаць , такія праграмы, як

міцэліем дата сну 20 чакаюць

пацерпіць няўдачу. Каб пазбегнуць гэтага, выклікаць не-інтэрактыўныя праграмы з Exec , а не ікру. У той час як такія сітуацыі магчымыя, на практыцы я ніколі не сутыкаўся з сітуацыяй, у якой канчатковы вынік сапраўды інтэрактыўнай праграмы будзе страчаны з-за такія паводзіны.

З іншага боку, Cray Unicos Ptys адкідаць непрачытаныя выхад адразу пасля таго , як працэс быў зачынены дэскрыптар файла. Я паведаміў пра гэта Cray і яны працуюць над рашэннем гэтай праблемы.

Часам затрымка неабходная паміж запытам і адказам, напрыклад, калі інтэрфейс тэрмінала змяняе наладу UART або адпаведнасць бод стаўкі шляхам пошуку старту / стоп - біты. Як правіла, усё гэта патрабуе, каб спаць на працягу секунды або два. Больш надзейны метад, каб паспрабаваць зноў, пакуль абсталяванне не гатова да прыёму ўводу. Наступны прыклад выкарыстоўвае абедзве стратэгіі:

адправіць «хуткасць 9600 \ г»; сон 1 чакаць {таймаўту {адправіць «\ г»; exp_continue} $} спрытнюга

пастка -код не будзе працаваць з любой камандай, якая знаходзіцца ў цыкле апрацоўкі падзей на Tcl, такія як сон. Праблема заключаецца ў тым, што ў цыкле апрацоўкі падзей, Tcl, адкідвае коды вяртання з асінхронных апрацоўшчыкаў падзей. Абыйсці гэта можна ўсталяваць сцяг у код пасткі. Затым ўсталюйце сцяг адразу пасля каманды (гэта значыць, сон).

Каманда expect_background ігнаруе -timeout аргументы і не мае ні найменшага паняцця пра час чакання ў цэлым.

& # 34; EXPECT намёкі & # 34;

Ёсць некалькі рэчаў , пра Чакаць , што можа быць не інтуітыўным. У гэтым раздзеле робіцца спроба вырашыць некаторыя з гэтых рэчаў з парай прапаноў.

Звычайны чакаць праблема заключаецца ў тым, як распазнаць падказкі абалонкі. Так як яны настроены па-рознаму па-розных людзі і розныя абалонкі, пераносныя аўтаматызацыі Rlogin можа быць цяжка, не ведаючы падказку. Разумная канвенцыя мець карыстальнік захоўваюць рэгулярны выраз, якія апісваюць іх запрашэнне (у прыватнасці, у канцы яго) у пераменным асяроддзі EXPECT_PROMPT. Падобны код можа быць выкарыстаны. Калі EXPECT_PROMPT не існуе, код па-ранейшаму мае добрыя шанцы працаваць правільна.

ўсталяваць хуткі "(% | # | \\ $) $", # па змаўчанні запрашэння злавіць {ўсталяваць падказку $ ENV (EXPECT_PROMPT)} чакаць -rE $ тэрміновага

Я заклікаю вас , каб напісаць чакаць мадэляў , якія ўключаюць у сябе канец таго , што вы чакаеце ўбачыць. Гэта выключае магчымасць адказу на пытанне перш, чым бачыць усю рэч. Акрамя таго, у той час як вы можаце таксама быць у стане адказаць на пытанні, перш чым убачыць іх цалкам, калі вы адкажаце рана, ваш адказ можа здавацца рэхам у сярэдзіне пытання. Іншымі словамі, у выніку чаго дыялог будзе правільным, але выглядаюць перамяшаныя.

Большасць запрашэнняў ўключаюць прабел у канцы. Напрыклад, запыт з FTP з'яўляецца «е», «т», «р», «>» і. Каб адпавядаць гэтым радку, вы павінны ўлічваць кожны з гэтых знакаў. Гэта распаўсюджаная памылка, не ўключаць прабел. Змесціце нарыхтоўку ў відавочным выглядзе.

Калі вы выкарыстоўваеце шаблон выгляду X *, то * будзе адпавядаць усім выніках, атрыманых ад канца X да апошняй рэчы атрымала. Гэта гучыць інтуітыўна, але можа быць некалькі заблытанымі, таму што фраза "апошняе, што атрымаў» можа мяняцца ў залежнасці ад хуткасці кампутара і апрацоўкі ўводу / высновы і ядром і драйверам прылады.

У прыватнасці, людзі, як правіла, бачаць выхад праграмы прыбывае ў велізарных кавалках (атамарна), калі ў рэчаіснасці большасць праграм вырабляюць выхад на адзін радок за адзін раз. Калі выказаць здагадку, што гэта так, то * ў схеме папярэдняга пункта, можа адпавядаць толькі канец бягучай радкі, нават нягледзячы на ​​тое, здаецца, больш, таму што ў той час матчу, які быў увесь выснову, які быў атрыманы.

чакаць не мае магчымасці даведацца , што далейшы выхад прыходзіць , калі ваш шаблон спецыяльна не тлумачыць яго.

Нават у залежнасці ад лініі-арыентаванай буферызацыі неразумна. Мала таго, што праграмы рэдка даюць абяцанні пра тып буферызацыі яны робяць, але сістэма страваванне можа прывесці да паломкі выходных ліній так, што лініі разарвацца ў, здавалася б, выпадковымі месцы. Такім чынам, калі вы можаце выказаць апошнія некалькі знакаў у радку пры напісанні шаблонаў, мае сэнс зрабіць гэта.

Калі вы чакаеце шаблону ў апошнім выхадзе праграмы , і праграма выдае што - то іншае замест гэтага, вы не будзеце ў стане выявіць , што з тайм - аўтам ключавым словам. Прычына заключаецца ў тым, што чакаць не будзе тайм - аўт - замест гэтага ён атрымае ўказанне ВФ. Выкарыстоўвайце гэта замест гэтага. Яшчэ лепш, калі выкарыстоўваць абодва. Такім чынам, калі гэтая лінія ніколі не перамяшчаецца вакол, вам не давядзецца рэдагаваць саму лінію.

Newlines, як правіла, пераўтворыцца ў зварот карэткі, пераклад радка паслядоўнасці, калі выходная драйверам тэрмінала. Такім чынам, калі вы хочаце шаблон, які відавочна адпавядае дзве лініі, ад, скажам, Е ( "Foo \ NBAR»), вы павінны выкарыстоўваць шаблон «Foo \ г \ NBAR».

Падобны пераклад адбываецца пры чытанні з карыстальнікам, з дапамогай expect_user. У гэтым выпадку пры націску кнопкі вяртання, ён будзе пераведзены на новую радок. Калі чакаць , то праходзіць , што праграма , якая ўсталёўвае свой тэрмінал у нестандартным рэжыме (напрыклад , Telnet), там будзе праблемай, так як праграма чакае сапраўднае вяртанне. (Некаторыя праграмы на самой справе дараваўшы ў тым, што яны будуць аўтаматычна перакладаць пераклады радкоў вяртаецца, але большасць гэтага не робяць.) На жаль, няма ніякага спосабу даведацца, што праграма змясціць свой тэрмінал у нестандартным рэжыме.

Замест таго, каб ўручную замяніць новы радок з зваротамі, рашэнне выкарыстаць каманду "запушчаных сырой», які спыніць пераклад. Аднак варта адзначыць, што гэта азначае, што вы больш не будзеце атрымліваць прыгатаваныя функцыі рэдагавання радка.

ўзаемадзейнічаць няяўна ўсталёўвае свой тэрмінал у нестандартным рэжыме , так гэтая праблема не паўстане тады.

Часта бывае карысна для захоўвання пароляў (ці іншай асабістай інфармацыі) у Чакаць сцэнары. Гэта не рэкамендуецца, так як усе, што захоўваецца на кампутары успрымальны да якога ажыццяўляецца доступ любы жадаючы. Такім чынам, у інтэрактыўным рэжыме падказкі пароляў з сцэнара з'яўляецца разумнейшыя ідэяй, чым ўкладанне іх у літаральным сэнсе. Тым не менш, часам такое ўкладанне з'яўляецца адзінай магчымасцю.

На жаль, файлавая сістэма UNIX не мае прамы шлях стварэння скрыптоў, якія выконваюцца, але нечытэльным. Сістэмы, якія падтрымліваюць setgid скрыпты могуць ўскосна імітаваць гэта наступным чынам:

Стварыце Expect скрыпт (які змяшчае сакрэтныя дадзеныя) , як звычайна. Зрабіць яе дазволу быць 750 (-rwxr-х ---) і належыць групе надзейных, то ёсць група, якая дазволіла прачытаць яго. Пры неабходнасці стварыць новую групу для гэтай мэты. Затым стварыце / бен / ш скрыпт з правамі доступу 2751 (-rwxr-s - х), якія належаць адной і той жа групы, як і раней.

Вынікам з'яўляецца сцэнар, які можа быць выкананы (і чытаць) кім-небудзь. Пры выкліку, ён запускае Expect скрыпт.

& # 34; ТАКСАМА & # 34;

Tcl (3), libexpect (3)
"Вывучэнне Чакаць: Tcl-Based Toolkit А для аўтаматызацыі інтэрактыўных праграм" Дон LIBES, С. 602, ISBN 1-56592-090-2, O'Reilly і Associates 1995 ..
«Чакае: Лячыць Тыя некіравальныя Прыступы інтэрактыўнасць» Дон LIBES, Працы лета 1990 USENIX канферэнцыя, Анахайм, Каліфорнія, 11-15 чэрвеня, 1990.
.I «Выкарыстанне чакаць для аўтаматызацыі задач адміністравання сістэмы» Дон LIBES, Працы 1990 USENIX Вялікіх установак сістэмы адміністравання канферэнцыі, Каларада Спрынгс, штат Каларада, 17-19 кастрычніка 1990 года.
.I «Tcl: УБУДОЎВАЕМЫ Command Language» па Оустерхаете, Працы зімы 1990 USENIX канферэнцыі, Вашынгтон, акруга Калумбія, Студзень 22-26, 1990..I «чакаюць: Сцэнарыі для Упраўлення інтэрактыўных праграм» Дон LIBES, вылічальных сістэмы , Vol. 4, № 2, Каліфарнійскі універсітэт Press Journals, Лістапад 1991..I «рэгрэсіўнае тэставанне і тэставанне Адпаведнасць Інтэрактыўныя праграмы», Дон LIBES, Працы лета 1992 USENIX канферэнцыі, стар. 135-144, Сан-Антоніа, штат Тэхас, 12-15 чэрвеня, 1992..I "ўмешвацца ў чужыя справы - Падлучэнне некалькіх інтэрактыўных праграм разам" Дон LIBES, Праграмнае забеспячэнне - практыка і вопыт, John Wiley & Sons, Заходні Сасэкс, Англія, Vol.

23, № 5, травень, 1993..I "адладчыкам для Tcl прыкладанняў", Дон LIBES, Працы 1993 Tcl / Tk Workshop, Берклі, Каліфорнія, 10-11 чэрвеня 1993 года.

АЎТАР

Дон Либес, Нацыянальны інстытут стандартаў і тэхналогій

БЛАГОДАРНОСТЬ

Дзякуючы Оустерхаут для Tcl, і Скот Paisley для натхнення. Дзякуючы Роб Савой для Чакаць'S автоконфигурирования код.

Гісторыя файлаў дакументаў вялікая частка эвалюцыі чакаць. Гэта робіць цікавае чытанне і можа даць вам больш глыбокае ўяўленне для гэтага праграмнага забеспячэння. Дзякуючы людзям, згаданым ў ім, якія паслалі мяне выпраўляюць памылку і далі іншую дапамогу.

Распрацоўка і ўкараненне Чакаць была аплачана часткова урадам ЗША , і , такім чынам , знаходзіцца ў вольным доступе. Аднак аўтар і NIST хацеў бы крэдыт, калі гэтая праграма і дакументацыя ці частка з іх выкарыстоўваюцца.