Skip to main content

Очекује Линук / Уник наредбе и примере

Anonim

Очекује се програм који говори о другим интерактивним програмима према сценарију. Након сценарија, Екпецт зна шта се од програма може очекивати и какав би требао бити одговарајући одговор. Тумачени језик обезбеђује структуре контроле развода и структуре на високом нивоу за усмеравање дијалога. Осим тога, корисник може преузети контролу и интеракцију директно када то жели, након чега се враћа контрола на скрипту.

Екпецтк је мешавина Екпецт и Тк. Понаша се исто као жеља Очекивања и Тк. Екпецт се такође може користити директно у Ц или Ц ++ без Тцл.

Име "Екпецт" потиче од идеје о слању / оћекивању секвенци које популаризују ууцп, кермит и други програми за контролу модема. Међутим, за разлику од УУЦП-а, Екпецт је генерализован тако да се може покренути као кориснички ниво са било којим програмом и задацима. Очекује се да може разговарати са неколико програма истовремено.

Шта очекујете

На пример, ево неких ствари које команда оцеку мозе да уради:

  • Узмите рачунар да вас позове назад, тако да се можете пријавити без плаћања позива.
  • Покрените игру и ако се не појави оптимална конфигурација, поновите га поново и поново) све док не уради, а затим предајте контролу вама.
  • Покрените фсцк и одговорите на своја питања одговорите "да" или "не" или вратите контролу вама, на основу унапред утврђених критеријума.
  • Повежите се на другу мрежу и аутоматски преузмите пошту тако да се појави као да је првобитно послато вашем локалном систему.
  • Променљиве вредности окружења, тренутни директоријум или било коју врсту информација преко рлогин, телнет, тип, су или цхгрп

Постоји много разлога зашто схелл не може извршити ове задатке. Све су могуће са Екпецт.

Генерално, Екпецт је корисно за покретање било ког програма који захтева интеракцију између програма и корисника. Све што је неопходно је да се интеракција може окарактерисати програмски. Очекује се да може и повратити контролу кориснику без заустављања програма који се контролише. Слично томе, корисник може вратити контролу у скрипту у било ком тренутку.

Употреба

Очекује читање цмдфилеа за листу команди за извршавање. Очекивање се може имплицитно позивати на системе који подржавају #! нотацију маркирањем сценарија као извршне и прављење прве линије у скрипти:

#! / уср / лоцал / бин / екпецт -ф

Наравно, пут мора прецизно описати где се очекује живи. / уср / лоцал / бин је само пример.

Застава -ц претставља команду која се извршава пре било ког у скрипти. Команду треба цитирати како би се спречило разбијање гранате. Ова опција се може користити више пута. Вишеструке команде могу се извршити са једним-ц тако што их раздваја са тачкама и тачкама. Команде се извршавају по редоследу који се појављују. Када користите Екпецтк, ова опција је наведена као -цомманд.

Застава -д омогућава одређени дијагностички излаз, који првенствено приказује унутрашњу активност команди као што су очекивани и интерактивни. Ова застава има исти ефекат као "екп_интернал 1" на почетку Екпецт скрипта, а штампана је и верзија Екпецт.

Застава -Д омогућава интерактивни дебагер. Треба да следи цела вредност. Дебуггер ће преузети контролу пре следеће процедуре Тцл ако је вредност нула или ако притиснете ^ Ц или је прекинута тачку или се у скрипту појављује друга одговарајућа команда за отклањање грешака. Када користите Екпецтк, ова опција је наведена као -Дебуг.

Застава -ф претвара датотеку из које чита команде. Сама застава је опциона јер је корисна само ако користите #! тако да се у командној линији могу набавити и други аргументи. Када користите Екпецтк, ова опција је специфицирана као -филе.

Подразумевано, командна датотека се чита у меморију и извршава у целини. Повремено је пожељно читати датотеке једне линије у исто вријеме. Да бисте применили произвољне фајлове са којима се поступа на овај начин, користите ознаку -б. Када користите Екпецтк, ова опција је наведена као -буффер.

Ако је стринг "-" испоручен као име датотеке, уместо тога се чита стандардни улаз. Користите "./-" за читање из датотеке која је заправо назива "-".

Застава -и узрокује очекивање да интерактивно затраже команде уместо да их читате из датотеке. Пажња се прекида путем команде за излаз или на ЕОФ-у. За -и застава се претпоставља ако се не користи командна датотека нити -ц. Када користите Екпецтк, ова опција је означена као -интерактивна.

- може се користити за ограничавање краја опција. Ово је корисно ако желите да прођете аргумент који се односи на опцију у вашу скрипту, а да га не тумачи Екпецт. Ово се може корисно ставити у #! линија како би се спријечило било какво тумачење попут Екпецт. На пример, следеће ће оставити изворне аргументе укључујући име скрипте у варијабли аргв .

#! / уср / лоцал / бин / екпецт -

Имајте на уму да се уобичајене гетопт (3) и екецве (2) конвенције морају поштовати приликом додавања аргумената на #! лине.

Датотека $ екп_либрари / екпецт.рц се добија аутоматски ако је присутна, осим ако се користи ознака -Н. (Када користите Екпецтк, ова опција је назначена као -НОРЦ.) Одмах после тога, датотека ~ / .екпецт.рц се аутоматски добија, осим ако се не користи ознака -н. Ако је дефинирана променљива окружења ДОТДИР, она се третира као директориј и од ње се чита .екпецт.рц. Када користите Екпецтк, ова опција је наведена као -норц.Овај извор се јавља тек након извршења било којих -ц заставица.

-в узроци Очекујете да одштампате свој број верзије и изађите. Одговарајућа застава у Екпецтк, која користи имена дуга заставице, је -версион.

Опциони аргументи су конструисани у листу и смештени у варијаблу названа аргв и. аргц је иницијализован у дужини аргв.

Аргв0 је дефинисан као име сценарија или бинарног ако се не користи скрипта. На пример, следеће одштампа име скрипте и прве три аргументе:

сенд_усер "$ аргв0 лангреј $ аргв 0 2 н"

Команде

Екпецт користи језик команде алата. Тцл обезбеђује контролни проток (ако, за, паузу), евалуацију израза и неколико других функција, као што је рекурзија и дефиниција процедуре. Команде које се овде користе, али нису дефинисане (сет, ако, екец) су Тцл наредбе. Екпецт подржава додатне команде. Ако није другачије назначено, команде враћају празан низ.

Команде су наведене по абецедном реду тако да се могу брзо лоцирати. Међутим, новим корисницима ће бити лакше почети читањем описа мамаца, слања, очекивања и интеракције у том редоследу.

затвори -славе -онекец 0 | 1 -и спавн_ид

затвара везу са тренутним процесом. Већина интерактивних програма ће открити ЕОФ на њиховом стдину и излазу; тако Близу обично је довољно да убије процес. Застава -и декларише процес затварања који одговара именованом спавн_ид.

И очекивање и интеракција ће открити када тренутни процес излази и имплицитно затвори, али ако убијете процес, рецимо, "екец килл $ пид", морате експлицитно позвати.

Застава -онекец одређује да ли је ид спавн-а затворен у било којем новом процесу или ако је процес прекривен. Да бисте отворили отворени извор, користите вредност 0. Нулта вриједност цијеле вриједности доводи до затварања у сваком новом процесу.

Застава -славе затвара робовласник повезан са ИД-ом спавн-а. Када је веза затворена, робот се аутоматски затвара, ако је и даље отворен.

Без обзира да ли је веза затворена имплицитно или експлицитно, требало би да позовете чекање да бисте избрисали одговарајући слот процесног језгра. Команда за затварање не позива чекање, јер нема гаранције да ће затварање процесне везе проузроковати излазак.

дебуг -нов 0 | 1

контролише Тцл дебуггер који вам омогућава да коригујете изјаве и поставите тачке прекида.

Без аргумената, 1 се враћа ако дебуггер не ради, иначе се враћа 0.

Са 1 аргументом, дебуггер је започео. Са аргументом 0, дебуггер је заустављен. Ако 1 аргументу претходи ознака -нов, дебуггер се покреће одмах. Иначе, дебуггер се започиње са следећом Тцл изразом.

Команда за дебаг не мења никакве замке. Упоредите то да започнете Екпецт са ознаком -Д.

Команда за прекидање искључује процес одвајања са терминала. Наставља се у позадини. Процесу се даје сопствена процесна група. Стандардни И / О се преусмерава на / дев / нулл.

Следећи фрагмент користи дисконект за наставак покретања скрипте у позадини.

ако {форк! = 0} искључите излаз. . .

Следећи скрипта чита лозинку и затим покреће програм сваког сата који захтева лозинку сваки пут када се покрене. Скрипта испоручује лозинку тако да је морате једном укуцати.

сенд_усер "лозинка? " екпецт_усер -ре "(. *) н" за {} 1 {} {ако {форк! = 0} {спавање 3600; настави} искључи спавн прив_прог очекује Лозинка: пошаљи "$ екпецт_оут 1, стринг) р ". . . излаз}

Предност кориштења искључивања преко функције асинхроног процеса (&) схелл-а је да Екпецт може сачувати параметре терминала прије одвојења и касније их примијенити на нове птис. Са &, Екпецт нема шансе да прочита параметре терминала пошто је терминал већ искључен до тренутка када Екпецт прима контролу.

излаз -оптс статус

узрокује излазак или се на други начин припреми за то.

Тхе -онекит флаг узрокује следећи аргумент да се користи као излазни руковалац. Без аргумента, тренутни управљачки програм за излаз се враћа.

Тхе -нема излаза узрокује застава Очекујте да се припреми за излазак, али не престаје да врати контролу над оперативним системом. Покреће се кориснички дефинисан излазни управљач као и сопствени интерни корисници Екпецт-а. Нема даљњих команди Екпецт треба извршити. Ово је корисно ако користите Екпецт са другим Тцл екстензијама. Тренутни тумач (и главни прозор ако је у Тк окружењу) остају тако да се остали Тцл екстензији могу очистити. Ако је Екпецт излаз поново се зове (иако се то може догодити), поновитељи се не понављају.

Након изласка, све везе са покренутим процесима су затворене. Затварање ће бити откривено као ЕОФ по порастим процесима. излаз не предузима никакве друге акције изван нормалног поступка _екит (2). Стога, процеси који не провјеравају ЕОФ могу и даље покренути. (Различити услови су важни за одређивање, на примјер, који сигнали ће бити послани процес, али они су системски зависни, обично документовани под излазом (3).) Постројени процеси који се настављају покренути ће бити наслеђени инитом.

статус (или 0 ако није назначено) се враћа као статус изласка Очекујте . излаз имплицитно се извршава ако се достигне крај скрипте.

екп_цонтинуе -цонтинуе_тимер

Команда екп_цонтинуе омогућава очекујте сам да настави да се извршава, а не да се враћа, како то нормално. Подразумевано екп_цонтинуе ресетује тајмер тајмера. Тхе -цонтинуе_тимер застава спречава поновно покретање тајмера. (Види очекујте за више информација.)

екп_интернал -ф ​​филе вредност

узрокује даљње команде да шаљу дијагностичке информације унутар Очекујте да стдерр ако вредност није нула. Овај излаз је онемогућен ако вредност је 0. Дијагностичке информације укључују сваки примљени карактер и сваки покушај да се подударају са тренутним излазом у односу на обрасце.

Ако је опционо филе испоручује се, сви нормални и дебуггинг излази су уписани у ту датотеку (без обзира на вредност вредност ). Било која претходна дијагностичка излазна датотека је затворена.

Тхе -инфо флаг узрокује екп_интернал да врати опис најновијих аргумената који нису наведени.

екп_опен аргс -и спавн_ид

враћа идентификатор Тцл фајла који одговара оригиналном ИД-у за спавн. Идентификатор датотеке се затим може користити као да је отворио Тцл отворен команда. (Ид не би требало више да се користи чекати не треба извршити.

Тхе -леавеопен застава оставља отворени ИД за приступ преко команди Екпецт. А чекати мора се извршити на ИД-у спавн-а.

екп_пид -и спавн_ид

враћа ид процеса који одговара тренутном процесу. Ако је застава се користи, пид враћен одговара ону од наведеног ид спавн-а.

екп_сенд

је алиас за пошаљи .

екп_сенд_еррор

је алиас за сенд_еррор .

екп_сенд_лог

је алиас за сенд_лог .

екп_сенд_тти

је алиас за сенд_тти .

екп_сенд_усер

је алиас за сенд_усер .

екп_версион -екит верзија

корисно је за осигурање да је скрипт компатибилан са тренутном верзијом Екпецт-а.

Без аргумената, тренутна верзија Очекујте се враћа. Ова верзија се онда може кодирати у вашој скрипти. Ако заправо знате да не користите функције најновијих верзија, можете одредити старију верзију.

Верзије се састоје од три броја раздвојених тачкама. Први је главни број. Скрипте написане за верзије Очекујте са различитим великим бројем готово сигурно неће радити. екп_версион враћа грешку ако се главни бројеви не подударају.

Друго је мали број. Скрипте написане за верзију са већим малим бројем од тренутне верзије могу зависити од неке нове функције и можда неће бити покренута. екп_версион враћа грешку ако се главни бројеви подударају, али мањи број скрипте је већи од броја покренутог Очекујте .

Трећи је број који не учествује у поређењу са верзијом. Међутим, повећава се када Очекујте дистрибуција софтвера се на било који начин мења, на пример помоћу додатне документације или оптимизације. Она се ресетује на 0 по свакој новој мањи верзији.

Са -екит застава, Очекујте штампа грешку и излази ако је верзија застарјела.

очекивати -оптс пат1 боди1 … -оптс патн бодин

чека један од образаца који се подударају са извором пораста процеса, одређени временски период је прошао или се види крај датотеке. Ако је завршно тело празно, може се изоставити.

Паттерни од најновијег екпецт_бефоре команда се имплицитно користи пре било којих других обрасца. Паттерни од најновијег екпецт_афтер команда се имплицитно користи након било којих других обрасца.

Ако су аргументи у целини очекујте израз захтева више од једне линије, сви аргументи могу бити "урезани" у један како би се избегло окончање сваке линије са косом сапом. У овом слуцају, уобицајене Тцл замене це се десити упркос запрекама.

Ако је образац кључна реч еоф , одговарајуће тело се извршава по завршетку датотеке. Ако је образац кључна реч пауза у утакмици , одговарајуће тело се извршава након истека времена. Ако се не користи кључна реч за прекид времена, имплицитна нулта акција се извршава након истека времена. Подразумевани временски период је 10 секунди, али се може поставити, на пример до 30, командом "сет тимеоут 30". Бесконачан тајмт може бити означен вриједношћу -1. Ако је образац кључна реч Уобичајено , одговарајуће тијело се извршава након временског или крајњег фајла.

Ако се образац подудара, онда се извршава одговарајуће тело. очекујте враћа резултат тела (или празног стринга ако се не подудара с њим). У случају да се више обрасца подудара, онај који се први појављује користи се за одабир тела.

Сваки пут када нови излаз стигне, он се упоређује са сваким образцем у редоследу који су наведени. Дакле, можете тестирати за одсуство меча тако што ћете направити последњи образац нешто гарантовано да се појављује, као што је промпт. У ситуацијама када нема упутства, морате користити пауза у утакмици (баш као што бисте ви радили ручно).

Обрасци су наведени на три начина. Подразумевано су обрасци наведени као у Тцл-у стринг матцх команда. (Такви обрасци су такође слични регуларним изразима Ц-схелл обично названим "глоб"). Тхе -гл Застава се може користити за заштиту обрасца који би иначе могли да се подударају очекујте заставе од тога. Било који образац који почиње са "-" треба заштитити на овај начин. (Сви стрингови који почињу са "-" резервисани су за будуће опције.)

На пример, следећи фрагмент тражи успјешно пријављивање. (Напоменути да прекид се претпоставља да је процедура дефинирана на другом месту у сценарију.)

очекујте {буси {ставља заузето н; екп_цонтинуе} није успело прекинути "неважећу лозинку" прекинути прекид временски прекорачења спојен}

Цитати су неопходни на четвртом образцу јер садржи простор, који би иначе одвојио образац из акције.Узорци са истом акцијом (као што су трећи и четврти) захтевају поновно навођење акција. Ово се може избјећи кориштењем шаблона регекп-стиле (види доље). Више информација о формирању глоб стилова можете пронаћи у приручнику Тцл.

Обрасци стила Регекп-а прате синтаксу коју дефинише Тцл регекп (кратак за команду "регулар екпрессион"). регекп шаблони се уносе са заставом -ре . Претходни пример се може преписати помоћу регекп-а као:

очекујте {буси {ставља заузето н; екп_цонтинуе} -ре "неуспјела | неважећа лозинка" прекинут прекид временске везе прекинут повезан}

Обе врсте обрасца су "неисправне". То значи да обрасци не морају да одговарају читавом низу, али могу започети и завршити утакмицу било где у низу (све док се све остало подудара). Користите ^ да се подударају са почетком стринга, а $ да одговара крају. Имајте на уму да, ако не чекате на крај низа, ваши одговори се лако могу завршити у средини низа јер се одражавају из поријеклог процеса. Док још увијек производе исправне резултате, излаз може изгледати неприродно. Стога, кориштење $ подстиче се ако можете тачно описати знакове на крају низа.

Имајте у виду да у многим уредницима, ^ и $ одговарају почетку и крају линија. Међутим, пошто оцекивање није линијско оријентисано, ови знакови одговарају покривању и крају података (за разлику од линија) тренутно у оријентационом баферу. (Такође, погледајте напомену испод о "системској варијацији".)

Тхе -ек флаг узрокује да се образац упарује као "тачан" стринг. Не постоји тумачење *, ^, итд. (Мада се уобичајене Тцл конвенције још увијек морају поштовати). Тачан обрасци су увек неисправни.

Тхе -нокасе флаг узима велике слова излаза да се упореде као да су мала слова. Образац није под утјецајем.

Док читате излаз, више од 2000 бајтова може приморати раније бајтове да буду "заборављени". Ово се може променити помоћу функције матцх_мак . (Имајте на уму да прекомерно велике вредности могу успорити узорке узорка.) Ако патлист је фулл_буффер , одговарајуће тело се извршава ако матцх_мак бајтови су примљени и ниједан други образац није упарен. Без обзира на то фулл_буффер кључна реч се користи, заборављени знакови пишу да очекују (бафер).

Ако патлист је кључна реч нула , и нуллс су дозвољени (преко ремове_нуллс команда), одговарајуће тело се извршава ако се подудара са једним АСЦИИ 0. Није могуће подесити 0 бајтова помоћу глоб или регекп обрасца.

Након усклађивања шаблона (или еоф или фулл_буффер-а), било који одговарајући и претходно неизмирен излаз се чува у варијабли екпецт_оут (буффер) . До 9 регекп подразумева се сачувају у варијаблама екпецт_оут (1, стринг) кроз екпецт_оут (9, стринг) . Ако је -индицес застава се користи пре шаблона, почетног и завршног индекса (у облику погодном за ланчић ) од 10 жица се чувају у варијаблама екпецт_оут (Кс, старт) и екпецт_оут (Кс, крај) где је Кс цифра, одговара позицији супстрина у пуферу. 0 односи се на низове који су одговарали читавом шаблону и генерисани су за шаблоне глоба као и регекп шаблоне. На пример, ако је процес произвео оутпут из "абцдефгх н", резултат је:

очекивати "цд"

је као да су извршене следеће изјаве:

сет екпецт_оут (0, стринг) цд сет екпецт_оут (буффер) абцд

и "ефгх н" оставља у излазном баферу. Ако је процес произвео оутпут "абббцабкккка н", резултат:

очекивати -индицес -ре "б (б *). * (к +)"

је као да су извршене следеће изјаве:

сет ваит_оут (0, старт) 1 сет екпецт_оут (0, енд) 10 сет екпецт_оут (0, стринг) бб сетуп екпецт_оут (1, стринг) бб сетуп екпецт_оут (2, старт) 10 сет екпецт_оут (2, енд) 10 сет екпецт_оут (2, стринг) к сет екпецт_оут (буффер) абббцабкккк

и "а н" је остављено у излазном баферу. Шаблон "*" (и -ре ". *") Ће испразнити излазни бафер без читања више излаза из процеса.

Уобичајено се усклађени излаз одбацује из унутрашњих бафера Екпецт-а. Ово се може спречити префиксом шаблона са -Не преноси застава. Ова застава је нарочито корисна у експериментисању (и може се скратити на "-нот" ради лакшег експериментисања).

Ид спавн повезан са одговарајућим излазом (или еоф или фулл_буффер) је ускладиштен у екпецт_оут (спавн_ид) .

Тхе -пауза у утакмици флаг узрокује да тренутна команда очекује да користи следећу вриједност као временски распоред умјесто да користи вриједност временске варијабле.

Подразумевано, обрасци су упарени са излазом из тренутног процеса, међутим флаг декларира излаз из спавн_ид листе који се подудара са било којим слиједећим обрасцима (до сљедеће ). Листа спавн_ид-а би требало да буде или листа са спавн_идом која је одвојена са белим прозором или варијабла која се односи на такву листу спавн_идова.

На пример, следећи пример чека "повезан" са тренутним процесом, или "заузет", "неуспелим" или "неважећом лозинком" из спавн_ида названог $ проц2.

очекујте {-и $ проц2 заузет {ставља заузето н; екп_цонтинуе} -ре "неуспјела | неважећа лозинка" прекинут прекид временске везе прекинут повезан}

Вредност глобалне варијабле ани_спавн_ид могу се користити за усклађивање образаца са било којим спавн_идс-ом који су именовани са свим осталим заставе у струји очекујте команда. Спавн_ид из а застава без повезаних образаца (тј., одмах следи други ) је доступан било којем другом обрасцу у истом очекујте команда придружена ани_спавн_ид.

Тхе Застава такође може назвати глобалну варијаблу, у том случају се варијабла прочита за листу ИД-ова крештеника. Варијабла се поново прича кад год се промијени. Ово омогућава начин промјене И / О извора док је команда извршена. Спавн идс под овим путем се називају "индиректни" идр.

Акције као што су пауза и Настави узрокују структуре контроле (тј. за , проц ) да се понашају на уобичајени начин. Команда екп_цонтинуе омогућава очекујте сам да настави да се извршава, а не да се враћа, како то нормално.

Ово је корисно за избегавање експлицитних петљи или поновљених очекиваних изјава. Следећи пример је део фрагмента који аутоматизује рлогин. Тхе екп_цонтинуе избегава да напише секунд очекујте изјава (да поново потражите позив) ако рлогин затражи лозинку.

очекујте {Пассворд: {стти -ецхо сенд_усер "лозинка (за $ усер) на $ хосту:" екпецт_усер -ре "(. *) н" сенд_усер " н" пошаљи "$ екпецт_оут (1, стринг) р" стти ецхо екп_цонтинуе} неисправна {сенд_усер "неважећа лозинка или рачун н" екит} веза са временом {сенд_усер "на временски распоред $ хост н" екит} еоф {сенд_усер "веза са хостом није успела: $ екпецт_оут (буффер)" екит} ре $ промпт}

На пример, следећи фрагмент може помоћи кориснику да води интеракцију која је већ потпуно аутоматизована. У овом случају, терминал се ставља у рав моде. Ако корисник притисне "+", варијабла се увећава. Ако је притиснуто "п", неколико повратака се шаљу у процес, можда да га поквари на неки начин, а "и" омогућава кориснику да интерактује са процесом, ефикасно украде контролу из скрипте. У сваком случају, екп_цонтинуе дозвољава струју очекујте да бисте наставили са усклађивањем модела након извршења тренутне акције.

стти рав -ецхо екпецт_афтер {-и $ усер_спавн_ид "п" {пошаљи " р р р"; екп_цонтинуе} "+" {инцр фоо; екп_цонтинуе} "и" {интерацт; екп_цонтинуе} "изађи" излаз}

Подразумевано, екп_цонтинуе ресетује тајмер тајмера. Тајмер се не рестартује, ако је екп_цонтинуе се зове -цонтинуе_тимер застава.

екпецт_афтер екпецт_аргс

ради идентично са екпецт_бефоре осим ако су обрасци обоје очекујте и екпецт_афтер могу да се подударају очекујте образац се користи. Видите екпецт_бефоре наредбу за више информација.

екпецт_бацкгроунд екпецт_аргс

узима исте аргументе као иочекујте , ипак се враћа одмах. Паттернс се тестирају кад год дође нови улаз. Образацпауза у утакмици иУобичајено су бесмисленеекпецт_бацкгроунд и тихо су одбачени. Иначе,екпецт_бацкгроунд команда користиекпецт_бефоре иекпецт_афтер обрасци баш каоочекујте Да.

Кадаекпецт_бацкгроунд акције се процењују, обрада у позадини за исти ид спавн је блокирана. Обрада позадине се деблокира када се акција заврши. Док је обрада позадине блокирана, могуће је направити (форегроунд)очекујте на истом поретку.

Није могуће извршити аночекујте док је анекпецт_бацкгроунд деблокира.екпецт_бацкгроунд за одређени ид спавн-а се брише декларацијом нове екпецт_бацкгроунд-а са истим ИД-ом спавн-а. Декларацијаекпецт_бацкгроунд без шаблона уклања одређени ид спавн-а од могућности усклађивања образаца у позадини.

екпецт_бефоре екпецт_аргс

узима исте аргументе као иочекујте , ипак се враћа одмах. Паттерн-ацтион парови од најновијегекпецт_бефоре са истим ИД-ом за спавн се имплицитно додаје било ком следецемочекујте команде. Ако се образац подудара, третира се као да је наведен уочекујте саму наредбу, а придружено тело се извршава у контекстуочекујте команда. Ако обрасци из обаекпецт_бефоре иочекујте могу да се подударајуекпецт_бефоре образац се користи.

Ако ниједан образац није наведен, ид матрице се не проверава за било који обрасци.

Осим ако га не надмаши а застава,екпецт_бефоре обрасци се подударају са идом дефинисаног у тренутку када јеекпецт_бефоре команда је извршена (а не када се узорак поклапа).

Застава -инфо узрокујеекпецт_бефоре да вратите тренутне спецификације оним обрасцима које ће се подударати. Подразумевано, она извештава о тренутном ИД-у за спавн. Могуће је дати опционо спецификацију ид-а за информацију о том ид-у. На пример

екпецт_бефоре -инфо-и $ проц

Највише се може дати једна спецификација за спавн. Застава-индикатор потискује директне ИД-ове креације које долазе само из индиректних спецификација.

Уместо спецификације ид-а за спавн, ознака "-алл" ће довести "-инфо" да извештава о свим ИД-има спавн-а.

Излаз од ознаке -инфо може се поново користити као аргумент за очекивање_напријед.

екпецт_тти екпецт_аргс

је каоочекујте али чита карактере из / дев / тти (тј. кеистрокес од корисника). По подразумеваној вредности, очитавање се врши у режиму кувања. Стога, линије морају да се заврше са повраткомочекујте да их виде. Ово се може променити путемстти (погледајтестти наредба испод).

екпецт_усер екпецт_аргс

је каоочекујте али чита карактере из стдин-а (нпр. кеистрокес од корисника). По подразумеваној вредности, очитавање се врши у режиму кувања. Стога, линије морају да се заврше са повраткомочекујте да их виде.Ово се може променити путемстти (погледајтестти наредба испод).

вилица

ствара нови процес. Нови процес је тачна копија струјеОчекујте процес. О успеху,вилица враћа 0 у нови процес (дете) и враћа идентификациони процес дететовог процеса у родитељски процес. На неуспјеху (увијек због недостатка ресурса, нпр., Размјене простора, меморије),вилица враћа -1 у родитељски процес, а ниједан детет процес није креиран.

Излазни процеси излазе прекоизлаз команду, баш као и оригиналан процес. Отвореним процесима дозвољено је да пишу датотеке дневника. Ако не онемогућите дебаговање или пријављивање у већини процеса, резултат може бити збуњујући.

Неке имплементације пти могу збунити више читача и писаца, чак и тренутачно. Дакле, најсигурније јевилица пре мртвих процеса.

интеракција стринг1 боди1 … стрингн бодин

даје контролу над тренутним процесом кориснику, тако да се тастери притискају на тренутни процес, а стдоут и стдерр тренутног процеса се враћају.

Пари стринг-стринга могу бити наведени као аргументи, у ком случају се тело извршава када се унесе одговарајући стринг. (Подразумевано, стринг се не шаље тренутном процесу.) Тхепреводиоца наредба се претпоставља, ако недостаје завршно тело.

Ако су аргументи у целиниИнтерактивно израз захтева више од једне линије, сви аргументи могу бити "урезани" у један како би се избегло окончање сваке линије са косом сапом. У овом слуцају, уобицајене Тцл замене це се десити упркос запрекама.

На пример, следећа команда покреће интеракцију са следећим паровима стринг-боди: Када притиснете ^ З,Очекујте је суспендован. (Тхе-ресетовање застава враћа терминалне режиме.) Када притиснете ^ А, корисник види "унели сте контролу-А" и процес се шаље ^ А. Када се притисне $, корисник види датум. Када притиснете ^ Ц,Очекујте излази. Ако се унесе "фоо", корисник види "бар". Када притиснете ~~,Очекујте Интерпретер ради интерактивно.

поставите ЦТРЛЗ 032 интерактивно {-ресет $ ЦТРЛЗ {екец килл -СТОП пид} 001 {сенд_усер "унели сте контролу-А н"; пошаљи " 001"} $ {сенд_усер "Датум је формат сата сат секунди."} 003 излаз фоо {сенд_усер "бар"} ~~}

У паровима тела стрингова, стрингови се подударају у редоследу који су наведени као аргументи. Низови који се делимично подударају не шаљу се у текући процес у очекивању остатка који долазе. Ако се знак унесе тако да више не може бити подударање, само ће део низа бити упућен у процес који не може започети другу утакмицу. Стога, стрингови који су подразумевани делимичног подударања могу се подударати касније, уколико оригинални низови који покушавају да се поклапају коначно не успевају.

Подразумевано је усклађивање стринга тачно без дивљих картица. (Насупрот томе,очекујте команда користи подразумеване шаблоне за глобални стил.) Тхе-ек Застава се може користити за заштиту обрасца који би иначе могли да се подударајуИнтерактивно заставе од тога. Било који образац који почиње са "-" треба заштитити на овај начин. (Сви стрингови који почињу са "-" резервисани су за будуће опције.)

Тхе-ре застава натера стринг да се тумачи као шаблон стилског регекп-а. У том случају, у варијаблу се чувају подразумевани подмени интерацт_оут слично томеочекујте чува свој резултат у варијаблиекпецт_оут . Тхе-индицес Подршка је такође подржана.

Образацеоф уводи акцију која се извршава по завршетку датотеке. Засебанеоф образац такође може да прати- излаз застава у ком случају се поклапа ако се детектује еоф при писању излаза. Подразумеваноеоф акција је "повратак", тако даИнтерактивно једноставно се враћа на било који ЕОФ.

Образацпауза у утакмици уводи временско ограничење (у секундама) и акцију која се извршава након што се у одређеном времену не читају никакви знаци. Тхепауза у утакмици образац се односи на најновији процес. Не постоји подразумевани временски размак. Посебна варијабла "тимеоут" (користи се од странеочекујте команда) нема утицаја на тај временски распоред.

На пример, следећа изјава би се могла користити за аутоматизацију корисника који нису ништа куцали сат времена, али који и даље добијају честе системске поруке:

интерацт -инпут $ усер_спавн_ид тимеоут 3600 ретурн -оутпут $ спавн_ид

Ако је образац кључна речнула , и нуллс су дозвољени (прекоремове_нуллс команда), одговарајуће тело се извршава ако се подудара са једним АСЦИИ 0. Није могуће подесити 0 бајтова помоћу глоб или регекп обрасца.

Пребацивање шаблона са заставом-Ја пишем изазива варијаблу интерацт_оут (спавн_ид) да се подеси на спавн_ид који одговара образцу (или еоф).

Акције као што супауза иНастави узрокују структуре контроле (тј.за , проц ) да се понашају на уобичајени начин. Међутимповратак узрокује интеракцију да се врати на свог позиваоца, докинтер_ретурн узрокеИнтерактивно да узрокује повратак у свом позиваоцу. На пример, ако је "проц фоо" позванИнтерактивно који је затим извршио акцијуинтер_ретурн , проц фоо би се вратио. (То значи да акоИнтерактивно позивепреводиоца интерактивно куцањеповратак ће проузроковати интеракцију за наставак, докинтер_ретурн ће изазвати интеракцију да се врати на свог позиваоца.)

У токуИнтерактивно , рав режим се користи тако да сви знакови могу бити прослеђени тренутном процесу.Ако тренутни процес не прихвата сигнале контроле посла, он ће зауставити ако је послат сигнал за заустављање (подразумевано ^ З). Да га поново покренете, пошаљите сигнал за наставак (на пример "килл -ЦОНТ"). Ако стварно желите да пошаљете СИГСТОП на такав процес (помоћу ^ З), прво размислите о цстирању цсх-а, а затим покрените свој програм. С друге стране, ако желите послати СИГСТОП уОчекујте сами, преводиоци првог позива (можда користећи знак за избјегавање), а затим притисните ^ З.

Парови серијског тела могу се користити као скраћеница за избјегавање уношења интерпретера и извршавања команди интерактивно. Претходни термински режим се користи док се извршава тијело пара-тела.

За брзину, акције се подразумевано извршавају у рав режиму. Тхе-ресетовање флаг ресетује терминал на режим који је имао ранијеИнтерактивно је извршен (увек, куван начин рада). Имајте на уму да се знакови који се уносе када се мод укључује могу изгубити (несретна функција управљачког програма на неким системима). Једини разлог за коришћење-ресетовање је ако ваша акција зависи од покретања у режиму кувања.

Тхе-одјек Застава шаље знакове који одговарају следећем образцу назад процесу који их генерише пошто се сваки читалац чита. Ово може бити корисно када корисник треба да види повратне информације од делимично откуцаних шаблона.

Ако се образац понавља, али се на крају не успе да се подудара, ликови се шаљу на покренут процес. Ако се процес који се развија онда их понавља, корисник ће два пута видети ликове.-одјек вероватно је само прикладан у ситуацијама када корисник вероватно не испуњава образац. На примјер, сљедећи одломак је из рфтп, рекурзивног-фтп скрипта, гдје се кориснику тражи да уђе ~ г, ~ п, или ~ л, да прикаже, ставља или пописује тренутни директориј рекурзивно. Ово су толико далеко од нормалне фтп наредбе, да је мало вероватно да ће корисник уписати ~ а затим ишта друго, осим погрешно, у ком случају ће вјероватно само игнорисати резултат.

интерактивно {-чо ~ г {гетцурдирецтори 1} -чо ~ л {гетцурдирецтори 0} -чо ~ п {путцурдирецтори}}

Тхе-буфер флаг шаљ