Disgwylir y Linux / Unix Command

Disgwyl yw rhaglen sy'n siarad â rhaglenni rhyngweithiol eraill yn ôl sgript. Yn dilyn y sgript, Disgwyl yn gwybod beth ellir ei ddisgwyl gan raglen a beth ddylai'r ymateb cywir fod. Mae iaith dehongliedig yn darparu strwythurau rheoli canghennog a rheolaeth uchel i gyfarwyddo'r ymgom. Yn ogystal, gall y defnyddiwr gymryd rheolaeth a rhyngweithio'n uniongyrchol pan ddymunir, ac yna dychwelyd rheolaeth i'r sgript.

Mae Expectk yn gymysgedd o Disgwyl a Th. Mae'n ymddwyn yn union fel dymuniad Disgwyl a Tk. Gellir disgwyl hefyd yn uniongyrchol yn C neu C + + heb Tcl.

Daw'r enw "Disgwyl" o'r syniad o anfon / disgwyl dilyniannau poblogaidd gan uucp, kermit a rhaglenni rheoli modem eraill. Fodd bynnag, yn wahanol i uucp, mae Disgwyl wedi'i gyffredinoli fel y gellir ei redeg fel gorchymyn lefel defnyddiwr gydag unrhyw raglen a thasg mewn golwg. Gall Disgwyliad siarad â sawl rhaglen ar yr un pryd.

Yr hyn y gellir ei ddisgwyl

Er enghraifft, dyma rai pethau y disgwylir i'r gorchymyn eu gwneud:

Mae yna amrywiaeth o resymau pam na all y gragen gyflawni'r tasgau hyn. Mae popeth yn bosibl gyda Disgwyl.

Yn gyffredinol, mae Disgwyl yn ddefnyddiol ar gyfer rhedeg unrhyw raglen sy'n gofyn am ryngweithio rhwng y rhaglen a'r defnyddiwr. Y cyfan sydd ei angen yw y gellir nodweddu'r rhyngweithio yn rhaglennol. Gall disgwyl hefyd roi rheolaeth wrth gefn i'r defnyddiwr heb atal y rhaglen yn cael ei reoli. Yn yr un modd, gall y defnyddiwr ddychwelyd rheolaeth i'r sgript ar unrhyw adeg.

Defnydd

Disgwylwch ddarllen cmdfile am restr o orchmynion i'w gweithredu. Disgwylir y gellir ymgeisio'n ymhlyg ar systemau sy'n cefnogi'r #! nodiad trwy farcio'r sgript fel gweithredadwy a gwneud y llinell gyntaf yn y sgript:

#! / usr / local / bin / expect -f

Wrth gwrs, rhaid i'r llwybr ddisgrifio'n fanwl ble mae Disgwyl yn byw. / usr / local / bin yn enghraifft yn unig.

Mae'r baner -c yn rhagflaenu gorchymyn i'w weithredu cyn unrhyw un yn y sgript. Dylai'r gorchymyn gael ei ddyfynnu i rwystro ei dorri gan y gragen. Gellir defnyddio'r opsiwn hwn sawl gwaith. Gellir gweithredu gorchmynion lluosog gydag un -c trwy eu gwahanu â semicolons. Gorchmynion yn cael eu gweithredu yn y drefn y maent yn ymddangos. Wrth ddefnyddio Expectk, nodir yr opsiwn hwn fel -command.

Mae'r faner -d yn galluogi rhywfaint o allbwn diagnostig, sy'n bennaf yn adrodd am weithgaredd mewnol o orchmynion fel disgwyl a rhyngweithio. Mae'r faner hon yr un effaith ag "exp_internal 1" ar ddechrau sgript Disgwyl, ynghyd â'r fersiwn o Expect wedi'i argraffu.

Mae'r baner -D yn galluogi dadleuwr rhyngweithiol. Dylai gwerth cyfanrif ddilyn. Bydd y dadleuydd yn cymryd rheolaeth cyn y weithdrefn Tcl nesaf os yw'r gwerth yn ddim yn sero neu os yw C yn cael ei wasgu neu os yw toriad yn cael ei daro, neu os bydd gorchymyn dadleuydd priodol arall yn ymddangos yn y sgript. Wrth ddefnyddio Expectk, nodir yr opsiwn hwn fel - Debug.

Mae'r fflag -f yn rhagflaenu ffeil i ddarllen gorchmynion. Mae'r faner ei hun yn ddewisol gan mai dim ond defnyddiol yw'r defnyddiwr! nodiant, fel y gellir darparu dadleuon eraill ar y llinell orchymyn. Wrth ddefnyddio Expectk, nodir yr opsiwn hwn fel -file.

Yn ddiofyn, darllenir y ffeil gorchymyn i'r cof a'i weithredu yn ei gyfanrwydd. Mae'n achlysurol yn ddymunol darllen ffeiliau un llinell ar y tro. Er mwyn gorfodi ffeiliau mympwyol gael eu trin fel hyn, defnyddiwch y faner -b. Wrth ddefnyddio Expectk, mae'r opsiwn hwn wedi'i bennu fel - gwnewch yn siŵr.

Os yw'r llinyn "-" yn cael ei gyflenwi fel enw ffeil, darllenir mewnbwn safonol yn lle hynny. Defnyddiwch "./-" i ddarllen o ffeil a enwir mewn gwirionedd "-".

Mae'r baner -i yn achosi Disgwyl i chi ofyn am orchmynion yn rhyngweithiol yn hytrach na'u darllen o ffeil. Caiff yr hyrwyddiad ei derfynu trwy'r gorchymyn gadael neu ar EOF. Tybir y faner -i os nad yw ffeil gorchymyn na -c yn cael ei ddefnyddio. Wrth ddefnyddio Expectk, mae'r opsiwn hwn yn cael ei bennu fel - deniadol.

- gellir ei ddefnyddio i ddileu diwedd yr opsiynau. Mae hyn yn ddefnyddiol os ydych chi am basio dadl tebyg i'ch opsiwn heb ei ddehongli gan Expect. Gellir gwneud hyn yn ddefnyddiol yn y #! lein i atal unrhyw ddehongliad flaglike trwy Ddisgwyl. Er enghraifft, bydd y canlynol yn gadael y dadleuon gwreiddiol gan gynnwys yr enw sgript yn yr argv variable.

#! / usr / lleol / bin / disgwyl -

Sylwch fod yn rhaid i'r confensiynau getopt (3) a execve (2) arferol gael eu gweld wrth ychwanegu dadleuon i'r #! llinell.

Daw'r ffeil $ exp_library / expect.rc yn awtomatig os yw'n bresennol, oni bai bod y -N flag yn cael ei ddefnyddio. (Wrth ddefnyddio Expectk, nodir yr opsiwn hwn fel -NORC.) Yn syth ar ôl hyn, ceir y ffeil ~ / .expect.rc yn awtomatig, oni bai bod y faner -n yn cael ei ddefnyddio. Os yw'r newidyn amgylchedd DOTDIR wedi'i ddiffinio, caiff ei drin fel cyfeiriadur a darllenir .expect.rc oddi yno. Wrth ddefnyddio Expectk, nodir yr opsiwn hwn fel -norc. Mae'r ffynhonnell hon yn digwydd dim ond ar ôl gweithredu unrhyw fandiau -c.

-v yn achosi Disgwyl i argraffu ei rif fersiwn a'i ymadael. Mae'r baner cyfatebol yn Expectk, sy'n defnyddio enwau hir baner, yn gwrthrych.

Caiff args opsiynol eu hadeiladu i restr a'u storio yn y newidyn a enwir argv ac. dadleuir argc i hyd argv.

Diffinnir Argv0 i fod yn enw'r sgript neu'r ddeuaidd os na ddefnyddir unrhyw sgript. Er enghraifft, mae'r canlynol yn argraffu enw'r sgript a'r tri dadl gyntaf:

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

Gorchmynion

Disgwyliwch ddefnyddio Iaith Reoli Offeryn. Mae Tcl yn darparu llif rheoli (os, ar gyfer, egwyl), gwerthusiad mynegiant a sawl nodwedd arall megis adferiad a diffiniad y weithdrefn. Mae'r gorchmynion a ddefnyddir yma ond heb eu diffinio (set, os, exec) yn orchmynion Tcl. Disgwylir yn cefnogi gorchmynion ychwanegol. Oni nodir fel arall, bydd gorchmynion yn dychwelyd y llinyn gwag.

Rhestrir y gorchmynion yn nhrefn yr wyddor fel y gellir eu lleoli yn gyflym. Fodd bynnag, efallai y bydd defnyddwyr newydd yn ei chael hi'n haws dechrau trwy ddarllen y disgrifiadau o silio, anfon, disgwyl a rhyngweithio, yn y drefn honno.

close [-slave] [-onexec 0 | 1] [-i spawn_id]

yn cau'r cysylltiad â'r broses gyfredol. Bydd y rhan fwyaf o raglenni rhyngweithiol yn canfod EOF ar eu stdin ac allanfa; felly mae cau fel arfer yn dioddef i ladd y broses hefyd. Mae'r baner -i yn datgan y broses i gau sy'n cyfateb i'r spawn_id a enwir.

Bydd y ddau yn disgwyl ac yn rhyngweithio yn canfod pan fydd y broses bresennol yn dod i ben ac yn ymhlyg yn cau, ond os byddwch chi'n lladd y broses drwy ddweud "exec kill $ pid", mae angen i chi alw'n fanwl yn agos .

Mae'r baner-Hysbysiad yn pennu a yw'r iddi silio wedi'i gau mewn unrhyw brosesau newydd sy'n cael eu silu neu os yw'r broses yn cael ei orchuddio. I adael iddi silio ar agor, defnyddiwch y gwerth 0. Mae gwerth integreiddio di-sero yn gorfodi'r swnio'n cau mewn unrhyw brosesau newydd.

Mae'r faner -slave yn cau'r gaethweision sy'n gysylltiedig â'r iddi silio. Pan fydd y cysylltiad ar gau, mae'r gaethweision wedi'i gau yn awtomatig hefyd os yw'n dal i fod ar agor.

Ni waeth a yw'r cysylltiad ar gau yn ymhlyg neu'n benodol, dylech ffonio aros i glirio slot y broses cnewyllyn cyfatebol. Nid yw'r gorchymyn cau yn galw am aros gan nad oes sicrwydd y bydd cau cysylltiad proses yn achosi iddo adael.

debug [[-now] 0 | 1]

yn rheoli dadleuydd Tcl sy'n eich galluogi i gamu trwy ddatganiadau a gosod setiau torri.

Heb unrhyw ddadleuon, dychwelir 1 os nad yw'r dadleuydd yn rhedeg, fel arall mae 0 yn cael ei ddychwelyd.

Gyda 1 ddadl, dechreuodd y dadleuwr. Gyda dadl 0, mae'r dadleuydd yn cael ei stopio. Os rhagwelir y ddadl gan y flag -now, dechreuir y dadleuwr ar unwaith. Fel arall, dechreuir y dadleuydd gyda'r datganiad Tcl nesaf.

Nid yw'r gorchymyn debug yn newid unrhyw drapiau. Cymharwch hyn i ddechrau Disgwyl gyda'r flag -D.

Mae'r gorchymyn datgysylltu yn datgysylltu proses forked o'r derfynell . Mae'n parhau i redeg yn y cefndir. Rhoddir y broses i'w grŵp prosesu ei hun. Ailgyfeirir I / O Safonol i / dev / null .

Mae'r darn canlynol yn defnyddio datgysylltu i barhau i redeg y sgript yn y cefndir.

os yw {[fork]! = 0} yn gadael datgysylltiad. . .

Mae'r sgript ganlynol yn darllen cyfrinair ac yn rhedeg rhaglen bob awr sy'n gofyn am gyfrinair bob tro y caiff ei redeg. Mae'r sgript yn cyflenwi'r cyfrinair fel mai dim ond unwaith y mae'n rhaid i chi ei deipio.

send_user "cyfrinair? \" expect_user -re "(. *) \ n" ar gyfer {} 1 {} {os {[fork]! = 0} {cysgu 3600; parhau} datgysylltu spawn priv_prog disgwyl Cyfrinair: anfon "$ expect_out ( 1, llinyn) \ r ". . . allan}

Mantais i ddefnyddio datgysylltu dros nodwedd y broses graeanu asynchronous (&) yw bod Disgwyliad yn gallu arbed paramedrau'r terfynell cyn ei datgysylltu ac wedyn eu cymhwyso i ptys newydd. Gyda &, Nid yw Disgwylir yn cael cyfle i ddarllen paramedrau'r derfynell ers i'r derfynell gael ei datgysylltu eisoes erbyn yr amser y Disgwylir yn derbyn rheolaeth.

allan [-opts] [statws]

yn achosi Disgwyl i ymadael neu baratoi fel arall i wneud hynny.

Mae'r baner -onexit yn achosi i'r ddadl nesaf gael ei defnyddio fel trinwr allanfa. Heb ddadl, dychwelir y trosglwyddwr allanfa bresennol.

Mae'r baner -noexit yn achosi Disgwylwch baratoi i ymadael, ond peidiwch â rhwystro rheolaeth ddychwelyd mewn gwirionedd i'r system weithredu. Mae'r defnyddiwr allanfa wedi'i ddiffinio gan ddefnyddiwr yn cael ei rhedeg yn ogystal â thrinwyr mewnol Expect's own. Ni ddylid gweithredu gorchmynion Disgwyl pellach. Mae hyn yn ddefnyddiol os ydych chi'n rhedeg Disgwylwch gydag estyniadau Tcl eraill. Mae'r cyfieithydd cyfredol (a'r prif ffenestr os yn yr amgylchedd Tk) yn parhau fel y gall estyniadau Tcl eraill lanhau. Os yw galw Disgwyl yn cael ei alw eto (ond gallai hyn ddigwydd), ni chaiff y rhai sy'n trin.

Ar ôl dod i ben, mae pob cysylltiad â phrosesau wedi'u silio ar gau. Bydd cau yn cael eu canfod fel EOF trwy brosesau wedi'u silio. nid yw ymadael yn cymryd unrhyw gamau eraill y tu hwnt i'r hyn y mae'r weithdrefn _exit (2) arferol yn ei wneud. Felly, mae'n bosibl y bydd prosesau wedi'u silio nad ydynt yn gwirio am EOF yn parhau i redeg. (Mae amrywiaeth o amodau yn bwysig i benderfynu, er enghraifft, yr hyn sy'n arwyddion y bydd proses wedi'i spai yn cael ei hanfon, ond mae'r rhain yn ddibynnol ar y system, a ddogfennir fel arfer o dan ymadael (3).) Bydd prosesau wedi'u swnio'n barhaus i'w rhedeg yn cael eu hetifeddu gan gychwyn.

Mae statws (neu 0 os nad yw wedi'i bennu) yn cael ei ddychwelyd fel statws ymadael Disgwyl . mae ymadael yn cael ei weithredu'n ymhlyg mewn gwirionedd os daw diwedd y sgript.

exp_continue [-continue_timer]
Mae'r gorchymyn terfynol yn caniatáu iddo ddisgwyl ei hun i barhau i weithredu yn hytrach na dychwelyd fel y byddai fel arfer. Trwy derfynu rhagosodedig, ailosod y amserydd amserlen. Mae'r baner -continue_timer yn atal yr amserydd rhag cael ei ail-ddechrau. (Gweler disgwyl i gael mwy o wybodaeth.)

exp_internal [-f ffeil] gwerth
yn achosi gorchmynion pellach i anfon gwybodaeth ddiagnostig yn fewnol i Disgwyl i stderr os yw gwerth yn ddim yn sero. Mae'r allbwn hwn yn anabl os yw gwerth yn 0. Mae'r wybodaeth ddiagnostig yn cynnwys pob cymeriad a dderbynnir, a phob ymdrech a wneir i gyd-fynd â'r allbwn cyfredol yn erbyn y patrymau.

Os yw'r ffeil dewisol yn cael ei chyflenwi, mae'r holl allbwn arferol a dadfeddygol yn cael ei ysgrifennu i'r ffeil honno (waeth beth yw gwerth y gwerth ). Mae unrhyw ffeil allbwn diagnostig flaenorol ar gau.

Mae'r faner-yn-achos yn achosi dadleuon i ddychwelyd disgrifiad o'r dadleuon anhysbys diweddaraf a roddwyd.

exp_open [args] [-i spawn_id]
yn dychwelyd dynodwr ffeil Tcl sy'n cyfateb i'r iddi silyn gwreiddiol. Yna gellir defnyddio'r dynodydd ffeil fel pe bai'n agor gan orchymyn agored Tcl. (Ni ddylid defnyddio'r enw silio mwyach. Ni ddylid gweithredu arswydiad.

Mae'r faner -leaveopen yn gadael yr idyn silio ar agor i gael mynediad trwy orchmynion Disgwyl. Rhaid i aros gael ei weithredu ar yr id silyn.

exp_pid [-i spawn_id]
yn dychwelyd id y broses sy'n cyfateb i'r broses sydd wedi'i seilio ar hyn o bryd. Os yw'r faner -i yn cael ei ddefnyddio, dychwelir y pid yn cyfateb i un o'r iddi silwn a roddir.

exp_send
yn alias i'w hanfon .

exp_send_error
yn alias am send_error .

exp_send_log
yn alias ar gyfer send_log .

exp_send_tty
yn alias am send_tty .

exp_send_user
yn alias ar gyfer send_user .

exp_version [[-exit] fersiwn]
yn ddefnyddiol i sicrhau bod y sgript yn gydnaws â'r fersiwn bresennol o Disgwyl.

Heb unrhyw ddadleuon, dychwelir y fersiwn cyfredol o Expect . Gall y fersiwn hon wedyn gael ei amgodio yn eich sgript. Os ydych chi'n gwybod nad ydych yn defnyddio nodweddion fersiynau diweddar, gallwch chi nodi fersiwn gynharach.

Mae'r fersiynau'n cynnwys tri rhif wedi'u gwahanu gan dotiau. Y cyntaf yw'r prif rif. Bydd sgriptiau a ysgrifennwyd ar gyfer fersiynau o Disgwyl gyda rhif mawr gwahanol bron yn sicr yn gweithio. mae exp_version yn dychwelyd gwall os nad yw'r niferoedd mawr yn cyfateb.

Ail yw'r mân rif. Gall sgriptiau sy'n cael eu hysgrifennu ar gyfer fersiwn gyda llai o fân na'r fersiwn gyfredol ddibynnu ar ryw nodwedd newydd ac efallai na fyddant yn rhedeg. mae exp_version yn dychwelyd gwall os yw'r niferoedd mawr yn cyfateb, ond mae'r nifer llai o sgript yn fwy na'r hyn a ddisgwylir .

Trydydd yw nifer nad yw'n chwarae rhan yn y gymhariaeth fersiwn. Fodd bynnag, caiff ei gynyddu pan fydd y dosbarthiad Meddalwedd Disgwylir yn cael ei newid mewn unrhyw ffordd, megis trwy ddogfennaeth ychwanegol neu optimeiddio. Caiff ei ailosod i 0 ar bob fersiwn newydd fach.

Gyda'r flag -exit , Disgwylwch brintio gwall ac allan os yw'r fersiwn yn ddi-ddydd.

Disgwyl [[-opts] pat1 body1] ... [-opts] patn [bodyn]
yn aros nes bod un o'r patrymau yn cyfateb i allbwn proses wedi'i spai, mae cyfnod amser penodedig wedi mynd heibio, neu gellir gweld ffeil diwedd. Os yw'r corff olaf yn wag, gellir ei hepgor.

Defnyddir patrwm o'r gorchymyn disgwyl_ diweddaraf yn gynhwysol cyn unrhyw batrymau eraill. Defnyddir patrwm o'r gorchymyn disgwyl_after diweddaraf yn gynhwysol ar ôl unrhyw batrymau eraill.

Os bydd y dadleuon i'r datganiad yn disgwyl y cyfan yn gofyn am fwy nag un llinell, gall yr holl ddadleuon gael eu "rhwygo" i mewn i un er mwyn osgoi terfynu pob llinell gyda rhwystr. Yn yr un achos hwn, bydd y cyfnewidiadau Tcl arferol yn digwydd er gwaethaf y braces.

Os mai patrwm yw'r eof keyword, mae'r corff cyfatebol yn cael ei weithredu ar ddiwedd ffeil. Os mai patrwm yw'r amserlen allweddol, caiff y corff cyfatebol ei weithredu ar amserlen. Os na ddefnyddir allweddair am amserlen, gweithredir gweithred nhlyg ymhlyg ar amserlen. Y cyfnod amser rhagosodedig yw 10 eiliad ond gellir ei osod, er enghraifft i 30, gan y gorchymyn "setoutout 30". Gall gwerth-amser anfeidrol gael ei ddynodi gan werth -1. Os mai patrwm yw'r ddiffyg gair allweddol, caiff y corff cyfatebol ei weithredu ar naill ai amserlen neu ben-ffeil.

Os yw patrwm yn cyfateb, yna caiff y corff cyfatebol ei weithredu. yn disgwyl i chi ddychwelyd canlyniad y corff (neu'r llinyn wag os nad oes patrwm yn cyfateb). Os bydd patrymau lluosog yn cyd-fynd, defnyddir yr un sy'n ymddangos gyntaf i ddewis corff.

Bob tro mae allbwn newydd yn cyrraedd, caiff ei gymharu â phob patrwm yn y drefn y maent wedi'u rhestru. Felly, fe allwch chi brofi am absenoldeb cyfatebol trwy wneud y patrwm olaf yn rhywbeth gwarantedig i ymddangos, fel prydlon. Mewn sefyllfaoedd lle nad oes unrhyw brydlon, rhaid i chi ddefnyddio amserlen (yn union fel y byddech chi pe bai'n rhyngweithio â llaw).

Pennir patrymau mewn tair ffordd. Yn anffodus, pennir patrymau fel ag orchymyn cyfatebol llinyn Tcl. (Mae patrymau o'r fath hefyd yn debyg i ymadroddion rheolaidd C-gragen y cyfeirir atynt fel arfer fel patrymau "glob"). Efallai y bydd y baner -gl yn cael ei ddefnyddio i amddiffyn patrymau a allai fel arall gyfateb i ddisgwyl baneri rhag gwneud hynny. Dylid diogelu unrhyw batrwm sy'n dechrau gyda "-" fel hyn. (Mae'r holl llinynnau sy'n cychwyn gyda "-" yn cael eu cadw ar gyfer opsiynau yn y dyfodol.)

Er enghraifft, mae'r darn canlynol yn chwilio am fewngofnodi llwyddiannus. (Noder mai rhagdybiaeth yw rhagfarn yn weithdrefn a ddiffinir mewn mannau eraill yn y sgript.)

yn disgwyl {brysur {yn brysur \ n; exp_continue} wedi methu erthylu "cyfrinair annilys" dileu amserlen erthylu cysylltiedig}

Mae dyfynbrisiau'n angenrheidiol ar y pedwerydd patrwm gan ei bod yn cynnwys gofod, a fyddai fel arall yn gwahanu'r patrwm o'r camau gweithredu. Mae angen i batrymau gyda'r un gweithred (fel y 3ydd a'r 4ydd) restru'r gweithredoedd eto. Gellir osgoi hyn trwy ddefnyddio patrymau regexp-style (gweler isod). Mae mwy o wybodaeth ar ffurfio patrymau arddull glob i'w weld yn y llawlyfr Tcl.

Mae patrymau arddull Regexp yn dilyn y cystrawen a ddiffinnir gan Regexp Tcl (byr ar gyfer "mynegiant rheolaidd"). cyflwynir patrymau regexp gyda'r faner -re . Gellir ailysgrifennu yr enghraifft flaenorol gan ddefnyddio regexp fel:

yn disgwyl {brysur {yn brysur \ n; exp_continue} -re "failed | password invalid" abort timeout abort connected}

Mae'r ddau fath o batrymau yn "unanchored". Mae hyn yn golygu nad oes rhaid i batrymau gydweddu'r llinyn cyfan, ond gall ddechrau a diweddu'r gêm yn unrhyw le yn y llinyn (cyhyd â bod popeth arall yn cyd-fynd). Defnyddiwch ^ i gydweddu â llinyn, a $ i gyd-fynd â'r diwedd. Sylwch, os na fyddwch chi'n aros am ddiwedd llinyn, gall eich ymatebion ddod i ben yn rhwydd yng nghanol y llinyn wrth iddyn nhw gael eu hatgoffa o'r broses wedi'i spai. Tra'n dal i gynhyrchu canlyniadau cywir, gall yr allbwn edrych yn annaturiol. Felly, anogir defnydd o $ os gallwch chi ddisgrifio'r cymeriadau yn union ar ddiwedd llinyn.

Sylwch, mewn llawer o olygyddion, mae'r ^ a $ yn cyd-fynd â dechrau a diwedd llinellau yn y drefn honno. Fodd bynnag, oherwydd nad yw disgwyl yn cael ei gyfeirio at y llinell, mae'r cymeriadau hyn yn cyfateb i ddechrau a diwedd y data (yn hytrach na llinellau) ar hyn o bryd yn y clustog cyfateb disgwyliedig. (Hefyd, gweler y nodyn isod ar "ddiffyg traul y system.")

Mae'r flag -ex yn golygu bod y patrwm yn cael ei gyfateb fel llinyn "union". Nid oes unrhyw ddehongliad o *, ^, ac ati wedi'i wneud (er y mae'n rhaid i'r convention Tcl arferol gael eu harsylwi). Mae patrymau union bob amser yn cael eu datgelu.

Mae'r baner- nocase yn achosi cymeriadau uchaf yr allbwn i'w cymharu fel pe baent yn gymeriadau is. Nid effeithir ar y patrwm.

Wrth ddarllen allbwn, gall mwy na 2000 bytes orfodi "anghofio" yn gynharach bytes. Gellid newid hyn gyda'r swyddogaeth match_max . (Noder y gall gwerthoedd gormodol fawr arafu'r cymysgedd patrwm.) Os yw patlist yn full_buffer , mae'r corff cyfatebol yn cael ei weithredu os yw match_max bytes wedi dod i law ac nid oes unrhyw batrymau eraill wedi cydweddu. P'un a yw'r word_buffer full_buffer ai peidio yn cael ei ddefnyddio ai peidio, mae'r cymeriadau anghofiedig wedi'u hysgrifennu i expect_out (buffer).

Os yw patlist yn yr allweddair null , a chaniateir null (trwy'r gorchymyn remove_nulls ), caiff y corff cyfatebol ei weithredu os yw un ASCII 0 yn cyfatebol. Nid yw'n bosibl cyfateb 0 bytes trwy batrymau glob neu regexp.

Ar ôl cydweddu patrwm (neu eof neu full_buffer), caiff unrhyw allbwn cyfatebol ac allbwn heb ei gymharu o'r blaen ei gadw yn y disgwyl_out variable (buffer) . Mae hyd at 9 o gemau is-bwmper regexp yn cael eu cadw yn y variables expect_out (1, llinyn) trwy expect_out (9, llinyn) . Os defnyddir y faner -indys cyn patrwm, mae'r mynegeion cychwyn a diweddu (ar ffurf sy'n addas ar gyfer lran ) o'r 10 llong yn cael eu storio yn y newidynnau disgwyl_out (X, cychwyn) a disgwyl_out (X, diwedd) lle mae X yn digid, yn cyfateb i safle'r is-orsaf yn y clustog. 0 yn cyfeirio at linynnau sy'n cyfateb i'r patrwm cyfan ac yn cael ei gynhyrchu ar gyfer patrymau glob yn ogystal â phatrymau regexp. Er enghraifft, os yw proses wedi cynhyrchu allbwn o "abcdefgh \ n", canlyniad:

yn disgwyl "cd"

yw fel pe bai'r datganiadau canlynol wedi bodoli:

set set_out (0, string) cd set expect_out (buffer) abcd

a "efgh \ n" wedi'i adael yn y byffer allbwn. Pe bai proses yn cynhyrchu'r allbwn "abbbcabkkkka \ n", canlyniad:

yn disgwyl -indices -re "b (b *). * (k +)"

yw fel pe bai'r datganiadau canlynol wedi bodoli:

set expect_out (0, cychwyn) 1 set expect_out (0, diwedd) 10 set expect_out (0, string) bbbcabkkkk set expect_out (1, cychwyn) 2 set expect_out (1, diwedd) 3 set expect_out (1, string) bb set expect_out (2, cychwyn) 10 set expect_out (2, diwedd) 10 set expect_out (2, string) k set expect_out (buffer) abbbcabkkkk

a "a \ n" yn cael ei adael yn y byffer allbwn. Bydd y patrwm "*" (a -re ". *") Yn fflysio'r byffer allbwn heb ddarllen unrhyw fwy o allbwn o'r broses.

Fel rheol, caiff yr allbwn cyfatebol ei ddileu o fwfferau mewnol Expect. Gellid atal hyn rhag rhagosod patrwm gyda'r baner-trosglwyddo. Mae'r faner hon yn arbennig o ddefnyddiol wrth arbrofi (a gellir ei gylchredeg i "-not" er hwylustod tra'n arbrofi).

Mae'r iddi silio sy'n gysylltiedig â'r allbwn cyfatebol (neu eof neu full_buffer) yn cael ei storio yn expect_out (spawn_id) .

Mae'r baner- amserlen yn golygu bod y presennol yn disgwyl i chi ddefnyddio'r gwerth canlynol fel amserlen yn hytrach na defnyddio gwerth y newidyn amserlen.

Yn anffodus, mae patrymau yn cyfatebol yn erbyn allbwn o'r broses gyfredol, fodd bynnag, mae'r baner -i yn datgan y bydd yr allbwn o'r rhestr spawn_id a enwir yn cael ei gyfateb yn erbyn unrhyw batrymau canlynol (hyd at y nesaf -i ). Dylai'r rhestr spawn_id naill ai fod yn rhestr gwahanu o gofod gwag o spawn_ids neu newidyn sy'n cyfeirio at restr o'r spawn_ids.

Er enghraifft, mae'r enghraifft ganlynol yn aros am "gysylltiedig" o'r broses gyfredol, neu "brysur", "methu" neu "gyfrinair annilys" o'r spawn_id a enwir gan $ proc2.

Disgwyl {-i $ proc2 prysur {yn brysur \ n; exp_continue} -re "failed | password invalid" abort timeout abort connected}

Gellir defnyddio gwerth yr amrywiol variable byd-eang any_spawn_id i gydweddu patrymau i unrhyw spawn_ids sy'n cael eu henwi gyda'r holl baneri -i eraill yn y gorchymyn presennol yn disgwyl gorchymyn. Mae'r spawn_id o faner -i heb unrhyw batrwm cysylltiedig (hy, a ddilynir ar unwaith gan arall -i ) ar gael i unrhyw batrymau eraill yn yr un modd yn disgwyl y gorchymyn sy'n gysylltiedig ag any_spawn_id.

Efallai y bydd y faner -i hefyd yn enw newidydd byd-eang, ac os felly, caiff y newidyn ei ddarllen ar gyfer rhestr o ids silio. Mae'r newidyn yn cael ei ail-ddarllen pryd bynnag y bydd yn newid. Mae hyn yn darparu ffordd o newid y ffynhonnell I / O tra bod y gorchymyn yn cael ei weithredu. Gelwir y rhain yn cael eu galw fel hyn yn "anuniongyrchol".

Mae camau fel torri a pharhau yn achosi strwythurau rheoli (hy, ar gyfer , proc ) ymddwyn yn y ffordd arferol. Mae'r gorchymyn terfynol yn caniatáu iddo ddisgwyl ei hun i barhau i weithredu yn hytrach na dychwelyd fel y byddai fel arfer.

Mae hyn yn ddefnyddiol ar gyfer osgoi dolenni penodol neu yn ailadrodd yn disgwyl datganiadau. Mae'r enghraifft ganlynol yn rhan o ddarn i awtomeiddio rlogin. Mae'r exp_continue yn osgoi gorfod ysgrifennu ail ddisgwyliad datganiad (i edrych am yr anifail eto) os yw'r rlogin yn ysgogi cyfrinair.

Disgwyl {Cyfrinair: {stty -echo send_user ') (ar gyfer $ defnyddiwr) ar $ host: "expect_user -re" (. *) \ n "send_user" \ n "anfon" $ expect_out (1, string) \ r "stty echo exp_continue} anghywir \ send_user "cyfrinair neu gyfrif annilys \ n" exit} amserlen {send_user "cysylltiad â $ host wedi'i amseru \ n" exit} eof {send_user \ "cysylltiad i host wedi methu: $ expect_out (buffer)" exit} - re $ prompt}

Er enghraifft, gallai'r darn canlynol fod o gymorth i ganllaw defnyddiwr ryngweithio sydd eisoes wedi'i awtomeiddio'n llwyr. Yn yr achos hwn, caiff y derfynell ei roi mewn modd crai. Os yw'r defnyddiwr yn pwyso "+", mae newidyn wedi'i gynyddu. Os yw "p" yn cael ei wasgu, anfonir sawl ffurflen i'r broses, efallai ei roi mewn rhyw ffordd, ac mae "i" yn rhoi'r defnyddiwr i ryngweithio â'r broses, gan ddwyn i ffwrdd rheolaeth o'r sgript yn effeithiol. Ym mhob achos, mae'r exp_continue yn caniatáu i'r presennol ddisgwyl parhau i baru patrwm ar ôl gweithredu'r gweithredu presennol.

stty raw -echo expect_after {-i $ user_spawn_id "p" {anfon "\ r \ r \ r"; exp_continue} "+" {incr foo; exp_continue} "i" {rhyngweithio; exp_continue} allanfa "rhoi'r gorau iddi"}

Yn ddiofyn, expxontinue ail-osod yr amserydd amserlen. Ni chaiff yr amserydd ei ail-gychwyn, os gelwir expeliad gyda'r flag -continue_timer .

disgwyl_after [expect_args]
yn gweithio'n union i'r disgwyl_ cyn hynny, ac eithrio, os gall patrymau o'r ddau ddisgwyl a disgwyl_fwrdd gyfateb, defnyddir y patrwm disgwyliedig . Gweler y gorchymyn disgwyl_before am ragor o wybodaeth.

disgwyl_background [expect_args]
yn cymryd yr un dadleuon â disgwyl , fodd bynnag mae'n dychwelyd yn syth. Caiff patrymau eu profi pryd bynnag y bydd mewnbwn newydd yn cyrraedd. Mae amserlen y patrwm a'r diofyn yn ddiystyr i ddisgwyl y ddaear ac yn cael eu dileu yn dawel. Fel arall, mae'r gorchymyn disgwyl_background yn defnyddio patrymau disgwyl_before a expect_after yn union fel y disgwylir .

Pan fydd gweithrediadau disgwyl_background yn cael eu gwerthuso, mae prosesu cefndir ar gyfer yr un peth silio wedi'i atal. Dadlwyd prosesu cefndir pan fydd y camau'n cwblhau. Er bod prosesu cefndir wedi'i rwystro, mae'n bosibl gwneud (blaendir) yn disgwyl ar yr un peth silio.

Nid yw'n bosib gweithredu disgwyliad tra bydd disgwyl_background wedi'i ddad -blocio. Disgwylir disgwyl_background ar gyfer idyn silio penodol trwy ddatgan disgwyl_background newydd gyda'r un peth silio. Datgan disgwyl_background heb unrhyw batrwm yn dileu'r iddi silio a roddir o'r gallu i gyfateb patrymau yn y cefndir.

expect_before [expect_args]
yn cymryd yr un dadleuon â disgwyl , fodd bynnag mae'n dychwelyd yn syth. Mae parau gweithredu patrwm o'r disgwyliadau diweddaraf yn dilyn yr un peth silio yn cael eu hychwanegu'n fewnbwn i unrhyw un sy'n dilyn yn disgwyl gorchmynion. Os yw patrwm yn cydweddu, caiff ei drin fel petai wedi'i nodi yn y disgwyliad ei hun, a bod y corff cysylltiedig yn cael ei weithredu yng nghyd-destun y gorchymyn disgwyliedig . Os gall patrymau o'r ddau ddisgwyliad ymlaen llaw a disgwyl eu cyfateb, defnyddir patrwm disgwyl_ cyn hynny .

Os na phennir patrwm, ni cheir gwirio'r iddi silio am unrhyw batrymau.

Oni bai bod baner -i wedi ei wahardd , disgwylir i batrymau gyfateb yn erbyn yr iddi silio a ddiffiniwyd ar yr adeg y gweithredwyd y gorchymyn disgwyl_before (nid pan fo'i batrwm wedi'i gyfateb).

Mae'r baner-enw yn achosi disgwyl_ cyn dychwelyd y manylebau cyfredol o ba batrymau y bydd yn cyfateb iddynt. Yn ddiofyn, mae'n adrodd ar yr iddyn silio cyfredol. Gellir rhoi manyleb iddyn nhw hidlo dewisol er gwybodaeth ar yr iddi spawn hwnnw. Er enghraifft

expect_before -info -i $ proc

Ar y mwyafrif, gellir rhoi manyleb iddyn nhw. Mae'r faner -indirect yn atal arwyddion silio uniongyrchol sy'n deillio o fanylebau anuniongyrchol yn unig.

Yn hytrach na manyleb adnabod silio, bydd y faner "-all" yn achosi "-info" i adrodd ar yr holl eiriau silio.

Gellir ailddefnyddio allbwn y faner-enw fel y ddadl i ddisgwyl_ cyn hynny.

expect_tty [expect_args]
fel disgwyl ond mae'n darllen cymeriadau o / dev / tty (hy keystrokes oddi wrth y defnyddiwr). Yn anffodus, mae darllen yn cael ei berfformio mewn modd wedi'i goginio. Felly, mae'n rhaid i linellau ddod i ben gyda dychweliad er mwyn disgwyl eu gweld. Gellid newid hyn trwy stty (gweler y gorchymyn stty isod).

disgwyl_user [expect_args]
fel disgwyl ond mae'n darllen cymeriadau o stdin (hy keystrokes gan y defnyddiwr). Yn anffodus, mae darllen yn cael ei berfformio mewn modd wedi'i goginio. Felly, mae'n rhaid i linellau ddod i ben gyda dychweliad er mwyn disgwyl eu gweld. Gellid newid hyn trwy stty (gweler y gorchymyn stty isod).

fforc
yn creu proses newydd. Mae'r broses newydd yn union gopi o'r broses Disgwyl bresennol. Ar lwyddiant, mae ffor yn dychwelyd 0 i'r broses newydd (plentyn) ac yn dychwelyd ID y broses o'r broses plant i'r rhiant broses . Ar fethiant (yn anaml oherwydd diffyg adnoddau, ee, cyfnewid gofod, cof), dychwelir ffor -1 i'r broses riant, ac ni chodir unrhyw broses plant.

Mae prosesau fforch yn gadael trwy'r gorchymyn gadael , yn union fel y broses wreiddiol. Caniateir i brosesau ffug ysgrifennu at y ffeiliau log. Os na fyddwch yn analluogi dadgwyddo neu logio yn y rhan fwyaf o'r prosesau, gall y canlyniad fod yn ddryslyd.

Efallai y bydd rhai darllenwyr ac awduron lluosog yn dryslyd rhai gweithrediadau pty, hyd yn oed o bryd i'w gilydd. Felly, mae'n ddiogel i fforch cyn prosesau silio.

rhyngweithio [string1 body1] ... [string [bodyn]]
yn rhoi rheolaeth ar y broses gyfredol i'r defnyddiwr, fel bod negeseuon allweddol yn cael eu hanfon i'r broses gyfredol, a dychwelir stdout a stderr y broses gyfredol.

Gellir pennu parau corff llinyn fel dadleuon, ac os felly, caiff y corff ei weithredu pan fydd y llinyn cyfatebol yn cael ei gofnodi. (Yn ddiofyn, ni anfonir y llinyn at y broses gyfredol.) Tybir y gorchymyn dehongli , os yw'r corff terfynol ar goll.

Os bydd y dadleuon i'r datganiad rhyngweithiol cyfan yn gofyn am fwy nag un llinell, gall yr holl ddadleuon gael eu "braced" i un er mwyn osgoi terfynu pob llinell gyda rhwystr. Yn yr un achos hwn, bydd y cyfnewidiadau Tcl arferol yn digwydd er gwaethaf y braces.

Er enghraifft, mae'r gorchymyn canlynol yn rhedeg rhyngweithio â'r parau corff-llinyn canlynol a ddiffinnir: Pan fydd Z yn cael ei wasgu, Disgwylir ei atal. (Mae'r faner ffenestri yn adfer y dulliau terfynol.) Pan fydd C yn cael ei wasgu, mae'r defnyddiwr yn gweld "ti wedi teipio rheolaeth-A" a bod y broses yn cael ei anfon A ^. Pan fydd $ yn cael ei wasgu, mae'r defnyddiwr yn gweld y dyddiad. Pan fydd C yn cael ei wasgu, Disgwyl allanfeydd. Os cofnodir "foo", mae'r defnyddiwr yn gweld "bar". Pan fo ~ ~ yn cael ei wasgu, mae'r cyfieithydd Disgwyl yn rhedeg yn rhyngweithiol.

set CTRLZ \ 032 rhyngweithio {-reset $ CTRLZ {exec kill -STOP [pid]} \ 001 {send_user "chi chi wedi teipio rheolaeth-A \ n"; anfon "\ 001"} $ {send_user "Mae'r dyddiad yn [fformat y cloc [eiliadau cloc]]."} \ 003 exit foo {send_user "bar"} ~~}

Mewn parau corff-llinyn, cyfyngir y llinynnau yn y drefn y maent wedi'u rhestru fel dadleuon. Ni chaiff tiwtiau sy'n cyd-fynd yn rhannol eu hanfon at y broses gyfredol yn rhagweld y bydd y gweddill yn dod. Os bydd cymeriadau wedyn yn cael eu cofnodi fel na all fod yn gêm mwyach, dim ond rhan y llinyn fydd yn cael ei anfon at y broses na all arwain at gêm arall. Felly, gall llinynnau sy'n amnewid rhannau o gemau rhannol gydweddu'n hwyrach, os bydd y llinynnau gwreiddiol a oedd yn ceisio bod yn cydweddu'n methu yn y pen draw.

Yn anffodus, mae cydweddu llinynnau yn union heb unrhyw gardiau gwyllt . (Mewn cyferbyniad, mae'r disgwyl yn defnyddio dyfeisiau arddull glob yn ddiofyn.) Gellir defnyddio'r flag -ex i amddiffyn patrymau a allai fel arall gydweddu â baneri rhyngweithiol rhag gwneud hynny. Dylid diogelu unrhyw batrwm sy'n dechrau gyda "-" fel hyn. (Mae'r holl llinynnau sy'n cychwyn gyda "-" yn cael eu cadw ar gyfer opsiynau yn y dyfodol.)

Mae'r flag yn rhoi'r llinyn i gael ei ddehongli fel patrwm regexp-style. Yn yr achos hwn, mae storiau cyfatebol yn cael eu storio yn y rhyngweithiol variable_out yn yr un modd â'r ffordd y disgwyliwn i siopau ei allbwn yn y disgwyl variable. Mae'r baner -indices yn cael ei gefnogi yn yr un modd.

Mae'r patrwm eof yn cyflwyno gweithred sy'n cael ei weithredu ar ddiwedd ffeil. Efallai y bydd patrwm eof ar wahân hefyd yn dilyn y faner- ddefnydd, ac yn yr achos hwnnw caiff ei gyfateb os yw eof yn cael ei ganfod wrth ysgrifennu allbwn. Mae'r gweithredu eof rhagosodedig yn "ddychwelyd", fel bod rhyngweithio yn dychwelyd yn syml ar unrhyw EOF.

Mae'r amserlen patrwm yn cyflwyno amserlen (mewn eiliadau) a chamau sy'n cael eu gweithredu ar ôl i unrhyw gymeriadau gael eu darllen am amser penodol. Mae'r patrwm amserlen yn berthnasol i'r broses a bennwyd fwyaf diweddar. Nid oes amserlen ddiffygiol. Nid yw'r "amserlen" amrywiol (a ddefnyddir gan ddisgwyl y gorchymyn) yn effeithio ar yr amserlen hon.

Er enghraifft, gellid defnyddio'r datganiad canlynol i ddefnyddwyr awtomatig sydd heb deipio rhywbeth am awr ond sy'n dal i gael negeseuon system yn aml:

rhyngweithio -input $ user_spawn_id timeout 3600 return -output \ $ spawn_id

Os yw'r patrwm yn yr allweddair null , a chaniateir null (trwy'r gorchymyn remove_nulls ), caiff y corff cyfatebol ei weithredu os yw un ASCII 0 yn cyfatebol. Nid yw'n bosibl cyfateb 0 bytes trwy batrymau glob neu regexp.

Mae blaenoriaethu patrwm gyda'r flag -iwrite yn achosi'r rhyngweithiad variable_out (spawn_id) i'w osod i'r spawn_id a oedd yn cyfateb i'r patrwm (neu eof).

Mae camau fel torri a pharhau yn achosi strwythurau rheoli (hy, ar gyfer , proc ) ymddwyn yn y ffordd arferol. Fodd bynnag, mae canlyniadau dychwelyd yn rhyngweithio i ddychwelyd i'w galwr, tra bod achosion inter_return yn rhyngweithio i achosi dychwelyd yn ei alw. Er enghraifft, os yw "proc foo" o'r enw rhyngweithiol, ac yna'n gweithredu'r rhyngweithiad gweithredu, byddai proc foo yn dychwelyd. (Mae hyn yn golygu, os bydd dehonglydd rhyngweithio galwadau rhyngweithiol yn deipio yn achosi i'r rhyngweithiad barhau, tra bydd inter_return yn achosi'r rhyngweithio i ddychwelyd i'r galwr.)

Yn ystod rhyngweithiad , defnyddir y dull crai fel y gellir trosglwyddo pob cymeriad i'r broses gyfredol. Os nad yw'r broses gyfredol yn dal signalau rheoli swyddi, bydd yn stopio os anfonir signal stopio (yn ddiffygiol ^ Z). I ei ailgychwyn, anfonwch signal parhaus (fel "kill -CONT"). Os ydych chi wir eisiau anfon SIGSTOP i broses o'r fath (gan ^ Z), ystyriwch silio csh yn gyntaf ac yna rhedeg eich rhaglen. Ar y llaw arall, os ydych am anfon SIGSTOP i Ddisgwyl ei hun, dehonglydd galw cyntaf (efallai trwy ddefnyddio cymeriad dianc), yna pwyswch ^ Z.

Gellir defnyddio parau corff llinyn fel llaw fer er mwyn osgoi gorfod mynd i'r cyfieithydd a gweithredu gorchmynion yn rhyngweithiol. Defnyddir y dull terfynol blaenorol tra bod corff pâr llinyn-corff yn cael ei weithredu.

Ar gyfer cyflymder, gweithredoedd yn gweithredu yn y modd crai yn ddiofyn. Mae'r baner- reswm yn ailsefydlu'r derfynell i'r modd y bu'n rhaid ei wneud cyn y rhoddwyd rhyngweithiad (yn ddieithriad, modd wedi'i goginio). Sylwch y gellir colli cymeriadau a gofnodir pan fydd y modd yn cael ei newid (nodwedd anffodus o'r gyrrwr terfynell ar rai systemau). Yr unig reswm dros ddefnyddio -reset yw os yw'ch gweithred yn dibynnu ar redeg yn y modd wedi'i goginio.

Mae'r baner -echo yn anfon cymeriadau sy'n cydweddu'r patrwm canlynol yn ôl i'r broses a gynhyrchodd wrth i bob cymeriad ddarllen. Gall hyn fod yn ddefnyddiol pan fydd angen i'r defnyddiwr weld adborth o batrymau sydd wedi'u teipio'n rhannol.

Os yw patrwm yn cael ei adleisio ond yn y pen draw yn methu â chydweddu, caiff y cymeriadau eu hanfon at y broses sydd wedi'i spai. Os bydd y broses wedi'i spai wedyn yn eu hatgoffa, bydd y defnyddiwr yn gweld y cymeriadau ddwywaith. -echo mae'n debyg mai dim ond mewn sefyllfaoedd y mae'r defnyddiwr yn annhebygol o beidio â chwblhau'r patrwm yn briodol. Er enghraifft, mae'r detholiad canlynol yn dod o rftp, y sgript ad-frasol, lle mae'r defnyddiwr yn cael ei annog i fynd i ~ g, ~ p, neu ~ l, i gael, rhoi, neu restru'r cyfeiriadur presennol yn ail-ddyfodol. Mae'r rhain mor bell i ffwrdd o'r gorchmynion ftp arferol, nad yw'r defnyddiwr yn debygol o deipio ~ unrhyw beth arall yn dilyn, ac eithrio'n anghywir, ac yn yr achos hwnnw, mae'n debyg y byddant yn anwybyddu'r canlyniad beth bynnag.

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

Mae'r baner -nobuffer yn anfon cymeriadau sy'n cydweddu'r patrwm canlynol i'r broses allbwn wrth i'r cymeriadau gael eu darllen.

Mae hyn yn ddefnyddiol pan fyddwch chi'n dymuno gadael i raglen adleisio'r patrwm. Er enghraifft, gellid defnyddio'r canlynol i fonitro lle mae person yn deialu (modem arddull Hayes). Bob tro "gwelir" atd "y logiau sgript gweddill y llinell.

proc lognumber {} {interact -nobuffer -re "return" yn gosod "$ log" [fformat cloc [eiliadau cloc]]: dialed $ interact_out (1, string) "} rhyngweithio -nobuffer" atd "lognumber

Yn ystod rhyngweithio , anwybyddir defnydd blaenorol o log_user . Yn benodol, bydd rhyngweithio yn gorfodi ei allbwn i'w logio (wedi'i anfon at yr allbwn safonol) gan ei fod yn rhagdybio nad yw'r defnyddiwr yn dymuno rhyngweithio'n ddall.

Mae'r faner -o yn achosi unrhyw barau corff allweddol canlynol i'w cymhwyso i allbwn y broses gyfredol. Gall hyn fod yn ddefnyddiol, er enghraifft, wrth ddelio â lluoedd sy'n anfon cymeriadau diangen yn ystod sesiwn telnet.

Yn ddiffygiol, mae'r rhyngweithio yn disgwyl i'r defnyddiwr fod yn ysgrifennu stdin a darllen stdout y broses Disgwyl ei hun. Mae'r baner -u (ar gyfer "defnyddiwr") yn golygu bod rhyngweithiad yn edrych ar gyfer y defnyddiwr fel y broses a enwir gan ei ddadl (y mae'n rhaid iddi fod wedi'i seilio arno).

Mae hyn yn caniatáu i ddau broses heb gysylltiad gael eu cydgysylltu heb ddefnyddio dolen benodol. Er mwyn cynorthwyo i ddadfeddiannu, Disgwyl i ddiagnosteg bob amser fynd i stderr (neu stdout ar gyfer gwybodaeth logio a dadfeddio penodol). Am yr un rheswm, bydd y gorchymyn dehongli yn darllen yn rhyngweithiol o stdin.

Er enghraifft, mae'r darn canlynol yn creu proses mewngofnodi. Yna mae'n dials y defnyddiwr (heb ei ddangos), ac yn olaf cysylltu'r ddau gyda'i gilydd. Wrth gwrs, gall unrhyw broses gael ei roi yn lle mewngofnodi. Byddai gragen, er enghraifft, yn caniatáu i'r defnyddiwr weithio heb gyflenwi cyfrif a chyfrinair.

mewngofnodi mewngofnodi set $ spawn_id swnio modem tipio # deialu yn ôl at ddefnyddiwr # cysylltu defnyddiwr i fewngofnodi rhyngweithio -u $ mewngofnodi

I anfon allbwn i brosesau lluosog, rhestrwch bob rhestr adnabod silio a gynhyrchir gan flag -output . Gall mewnbwn ar gyfer grŵp o ids silio allbwn gael ei bennu gan restr iddi silio a gynhyrchir gan baner-enw. (Mae'n bosibl y bydd y ddau gyfrifiad a chyfrifnod yn cymryd rhestrau yn yr un ffurflen â'r faner -i yn y gorchymyn disgwyliedig , ac eithrio nad yw any_spawn_id yn ystyrlon wrth ryngweithio .) Mae'r holl fandiau a thaennau canlynol (neu batrymau) yn berthnasol i'r mewnbwn hwn hyd nes y bydd arall - nodyn mewnbwn yn ymddangos. Os na welir ychwanegiad , mae -print yn awgrymu "-input $ user_spawn_id -output". (Yn yr un modd, gyda phatrymau nad oes ganddynt -gynnwys .) Os yw un- enw wedi'i phenodi, mae'n goresgyn $ user_spawn_id. Os nodir ail- atodiad , mae'n goresgyn $ spawn_id. Gellir nodi baneri ychwanegol ychwanegol.

Y ddau broses fewnbynnu awgrymedig nad oeddent yn cael eu hallbynnau a nodwyd fel $ spawn_id a $ user_spawn_id (yn y cefn). Os yw baner- inbwn yn ymddangos heb unrhyw fanddiffyniad , caiff y cymeriadau o'r broses honno eu datgelu.

Mae'r baner -i yn cyflwyno ailosodiad ar gyfer y spawn_id cyfredol pan na ddefnyddir unrhyw fandiau cyffwrdd neu -pynnig arall. Mae baner -i yn awgrymu baner -o.

Mae'n bosib newid y prosesau sy'n cael eu rhyngweithio â defnyddio idsyn silio anuniongyrchol. (Disgrifir ids sy'n seinio anuniongyrchol yn yr adran ar ddisgwyliad gorchymyn.) Gellir pennu idsyn seinio anuniongyrchol gyda'r baneri -i, -u, -input, neu -pynnyrch.

cyfieithydd [args]
yn achosi i'r defnyddiwr gael ei ysgogi'n rhyngweithiol ar gyfer gorchmynion Disgwyl a Tcl. Mae canlyniad pob gorchymyn wedi'i argraffu.

Mae camau fel torri a pharhau yn achosi strwythurau rheoli (hy, ar gyfer , proc ) ymddwyn yn y ffordd arferol. Fodd bynnag, dychwelwch yn achosi'r cyfieithydd i ddychwelyd at ei alw, tra bod inter_return yn achosi cyfieithydd i achosi dychwelyd yn ei alw. Er enghraifft, pe bai "proc foo" yn cael ei alw'n ddehonglydd a oedd wedyn wedi gweithredu'r rhyngweithiad , byddai proc foo yn dychwelyd. Mae unrhyw orchymyn arall yn achosi cyfieithydd i barhau i ysgogi gorchmynion newydd.

Yn ddiofyn, mae'r prydlon yn cynnwys dau gyfan. Mae'r cyfanrif cyntaf yn disgrifio dyfnder y stack gwerthuso (hy, sawl gwaith y cafodd Tcl_Eval ei alw). Yr ail gyfanrif yw dynodydd hanes Tcl. Gellir pennu'r prydlon trwy ddiffinio gweithdrefn o'r enw "prompt1" y mae ei werth dychwelyd yn brydlon nesaf. Os oes gan ddatganiad dyfyniadau, parens, braces neu fracedi agored, rhoddir prydlon eilaidd (yn ôl y ddiffyg "+>" ar linell newydd. Gellir gosod yr ysbryd eilaidd trwy ddiffinio gweithdrefn o'r enw "prompt2".

Yn ystod y cyfieithydd , defnyddir y modd wedi'i goginio, hyd yn oed os oedd ei alwad yn defnyddio dull crai.

Os bydd stdin ar gau, bydd dehonglydd yn dychwelyd oni bai bod y faner- ddyn yn cael ei ddefnyddio, ac os felly bydd y ddadl ddilynol yn cael ei ddefnyddio.

log_file [args] [[-a] ffeil]
Os darperir enw ffeil, bydd log_file yn cofnodi trawsgrifiad o'r sesiwn (gan ddechrau ar y pwynt hwnnw) yn y ffeil. Bydd log_file yn rhoi'r gorau i gofnodi os na roddir dadl. Mae unrhyw ffeil log flaenorol ar gau.

Yn lle enw ffeil, gellir darparu dynodwr ffeil Tcl trwy ddefnyddio'r baneri -open neu -leaveopen . Mae hyn yn debyg i'r gorchymyn silio . (Gweler seilio am fwy o wybodaeth.)

Allbwn yr allbwn faner i gael ei logio a gafodd ei atal gan y gorchymyn log_user .

Yn ddiffygiol, mae'r gorchymyn log_file yn cymeradwyo hen ffeiliau yn hytrach na'u twyllo, er hwylustod gallu troi i ffwrdd ac ar sawl gwaith mewn un sesiwn. I dorri ffeiliau, defnyddiwch y flag -noappend .

Mae'r faner-enw yn achosi log_file i ddychwelyd disgrifiad o'r dadleuon diweddaraf nad ydynt yn ymwneud â gwybodaeth.

log_user -info | 0 | 1
Yn anffodus, mae'r negeseuon anfon / disgwyl yn cael ei logio i stdout (a ffeil log os yw'n agored). Mae'r logio i stdout yn anabl gan y gorchymyn "log_user 0" ac wedi'i ail-osod gan "log_user 1". Nid yw newid y ffeil log yn newid.

Mae'r faner-enw yn achosi log_user i ddychwelyd disgrifiad o'r dadleuon diweddaraf nad ydynt yn ymwneud â gwybodaeth.

match_max [-d] [-i spawn_id] [maint]
yn diffinio maint y byffer (mewn bytes) a ddefnyddir yn fewnol gan ddisgwyl . Heb ddadl maint , dychwelir y maint presennol.

Gyda'r flag -d , gosodir y maint rhagosodedig. (Y rhagosodiad cychwynnol yw 2000.) Gyda'r faner -i , gosodir y maint ar gyfer yr enw spawn a enwir, fel arall fe'i gosodir ar gyfer y broses gyfredol.

overlay [- # spawn_id] [- # spawn_id] [...] rhaglen [args]
yn rhedeg " args rhaglen " yn lle'r rhaglen Disgwyl bresennol, sy'n dod i ben. Mae dadl gysylltiad moel yn gorfodi cysylltnod o flaen yr enw gorchymyn fel pe bai'n gregen mewngofnodi. Mae'r holl spawn_ids ar gau ac eithrio'r rhai a enwir fel dadleuon. Caiff y rhain eu mapio at y dynodwyr ffeiliau a enwir.

Mae Spawn_ids yn cael eu mapio i adnabodyddion ffeiliau ar gyfer y rhaglen newydd i etifeddu. Er enghraifft, mae'r llinell ganlynol yn rhedeg gwyddbwyll ac yn caniatáu iddo gael ei reoli gan y broses gyfredol - dywedwch, feistr gwyddbwyll.

overlay -0 $ spawn_id -1 $ spawn_id -2 $ spawn_id gwyddbwyll

Mae hyn yn fwy effeithlon na "rhyngweithio -u", fodd bynnag, mae'n aberthu'r gallu i wneud rhyngweithio wedi'i raglennu gan nad yw'r broses Disgwyl bellach yn rheoli.

Sylwch na ddarperir terfynell reoli. Felly, os byddwch yn datgysylltu neu adennill mewnbwn safonol, ni fydd rhaglenni sy'n rheoli swyddi (cregyn, mewngofnodi, ac ati) yn gweithio'n iawn.

cydraddoldeb [-d] [-i spawn_id] [gwerth]
yn diffinio a ddylid cadw cydraddoldeb neu ei dynnu oddi ar allbwn prosesau wedi'u silio. Os yw gwerth yn sero, caiff cydraddoldeb ei ddileu, fel arall nid yw wedi'i dynnu'n ôl. Heb ddadl werth , dychwelir y gwerth cyfredol.

Gyda'r flag -d , gosodir y gwerth cydraddoldeb diofyn. (Y rhagosodiad cyntaf yw 1, hy, nid yw cydraddoldeb yn cael ei ddileu.) Gyda'r faner -i , gosodir y gwerth cydraddoldeb ar gyfer yr enw spawn a enwir, fel arall fe'i gosodir ar gyfer y broses gyfredol.

remove_nulls [-d] [-i spawn_id] [gwerth]
yn diffinio a yw nulls yn cael eu cadw neu eu tynnu oddi wrth allbwn prosesau wedi'u silio cyn cydweddu patrwm neu storio yn y variable expect_out neu interact_out . Os yw gwerth yn 1, caiff nulls eu tynnu. Os yw gwerth yn 0, ni chaiff nulls eu dileu. Heb ddadl werth , dychwelir y gwerth cyfredol.

Gyda'r flag -d , gosodir y gwerth diofyn. (Y rhagosodiad cyntaf yw 1, hy, mae nulls yn cael eu tynnu.) Gyda'r flag -i , gosodir y gwerth ar gyfer yr enw spawn a enwir, fel arall fe'i gosodir ar gyfer y broses gyfredol.

P'un a yw nulls yn cael eu dileu ai peidio, bydd Disgwyliad yn cofnodi null bytes i'r log a stdout.

anfon [-flags] llinyn
Yn anfon llinyn at y broses gyfredol. Er enghraifft, y gorchymyn

anfon "hello world \ r"

yn anfon y cymeriadau, helloworld i'r broses gyfredol. (Mae Tcl yn cynnwys gorchymyn printf -like (a elwir yn fformat ) a all greu llwybrau cymhleth anghyffredin.)

Anfonir erthyglau yn syth er na fydd rhaglenni gyda mewnbwn bwffelau llinell yn darllen y cymeriadau nes bod cymeriad dychwelyd yn cael ei anfon. Dynodir cymeriad dychwelyd "\ r".

Mae'r - faner yn gorfodi'r ddadl nesaf gael ei ddehongli fel llinyn yn hytrach na baner. Gall unrhyw llinyn gael ei ragfynegi gan "-" p'un a yw'n ymddangos fel baner mewn gwirionedd ai peidio. Mae hyn yn darparu mecanwaith dibynadwy i bennu lllinynnau amrywiol heb gael eu cludo gan y rhai sy'n edrych fel baneri'n ddamweiniol. (Mae'r holl llinynnau sy'n cychwyn gyda "-" yn cael eu cadw ar gyfer opsiynau yn y dyfodol.)

Mae'r baner -i yn datgan y dylid anfon y llinyn at y spawn_id a enwir. Os yw'r spawn_id yn user_spawn_id , ac mae'r derfynell mewn modd crai, mae llinellau newydd yn y llinyn yn cael eu cyfieithu i ddilyniannau newydd-ddychwelyd fel eu bod yn ymddangos fel pe bai'r terfynell mewn modd wedi'i goginio. Mae'r baner yn analluoga'r cyfieithiad hwn.

Mae'r baner yn anfon nodau niferoedd (0 bytes). Yn ddiofyn, anfonir un null. Gall cyfanrif ddilyn y nod i ddangos faint o rifau i'w anfon.

Mae'r baner ffres yn creu cyflwr torri. Mae hyn yn gwneud synnwyr yn unig os yw'r iddi silio yn cyfeirio at ddyfais tty a agorwyd trwy "spawn -open". Os ydych wedi silio proses fel tip, dylech ddefnyddio confensiwn tipyn ar gyfer creu seibiant.

Mae'r allbwn baner -s yn cael eu hanfon yn "araf", gan osgoi'r sefyllfa gyffredin lle mae cyfrifiadur yn allweddi mewn byffer fewnbwn a gynlluniwyd ar gyfer dynol na fyddai byth yn alltipio'r un clustog . Mae'r allbwn hwn yn cael ei reoli gan werth y "send_slow" amrywiol sy'n cymryd rhestr dau elfen. Mae'r elfen gyntaf yn gyfanrif sy'n disgrifio nifer y bytes i'w hanfon atomig. Yr ail elfen yw rhif go iawn sy'n disgrifio'r nifer o eiliadau y mae'n rhaid gwahanu'r atomig y mae'n rhaid eu hanfon. Er enghraifft, byddai "set send_slow {10 .001}" yn gorfodi "anfon -s" i anfon teclynnau gyda 1 millisecond rhwng pob 10 nod a anfonwyd.

Yr allbwn baner -h i gael ei anfon (rhywfaint) fel dynol yn teipio mewn gwirionedd. Mae oedi tebyg i bobl yn ymddangos rhwng y cymeriadau. (Mae'r algorithm yn seiliedig ar ddosbarthiad Weibull, gydag addasiadau sy'n addas ar gyfer y cais penodol hwn.) Mae'r allbwn hwn yn cael ei reoli gan werth y "send_human" amrywiol sy'n cymryd rhestr pum elfen. Y ddwy elfen gyntaf yw amser rhyngbrifeddol cyfartalog cymeriadau mewn eiliadau. Defnyddir y cyntaf yn ddiofyn. Defnyddir yr ail ar derfynau geiriau, er mwyn efelychu'r seibiannau cynnil sy'n digwydd yn achlysurol mewn trawsnewidiadau o'r fath. Mae'r trydydd paramedr yn fesur o amrywiad lle mae .1 yn eithaf amrywiol, mae 1 yn rhesymol amrywiol, ac mae 10 yn eithaf annibynadwy. Mae'r eithafion yn 0 i anfeidredd. Y ddau paramedr olaf, yn y drefn honno, yw amser rhyngbrifeddol isafswm ac uchafswm. Defnyddir y lleiafswm a'r uchafswm diwethaf a "clip" yr amser olaf. Gall y cyfartaledd pennaf fod yn eithaf gwahanol i'r cyfartaledd a roddir os yw'r gwerthoedd clir o leiaf a phosibl yn ddigon.

Er enghraifft, mae'r gorchymyn canlynol yn efelychu tywysydd cyflym a chyson:

set send_human {.1 .3 1 .05 2} anfon -h "Dwi'n newynog. Gadewch i ni ginio."

er y gallai'r canlynol fod yn fwy addas ar ôl gorffeniad:

set send_human {.4 .4 .2 .5 100} anfon -h "Noson Lash Party Party!"

Sylwch nad yw gwallau wedi eu symbylu, er y gallwch chi osod sefyllfaoedd cywiro gwallau eich hun trwy ymgorffori camgymeriadau a chywiriadau mewn dadl anfon.

Mae'r baneri ar gyfer anfon cymeriadau niferoedd, ar gyfer anfon egwyliau, am orfodi allbwn araf ac ar gyfer allbwn arddull dynol yn eithriadol. Dim ond yr un a bennir ddiwethaf fydd yn cael ei ddefnyddio. Ar ben hynny, ni ellir nodi unrhyw ddadl llinyn gyda'r baneri am anfon nodau neu egwyl nodau.

Mae'n syniad da roi'r gorau i'r anfon cyntaf i broses trwy ddisgwyl . Disgwylir y bydd yn aros i'r broses ddechrau, tra na all ei anfon . Yn arbennig, os yw'r anfon cyntaf yn dod i ben cyn i'r broses ddechrau rhedeg, rydych chi'n rhedeg y perygl o anwybyddu'ch data. Mewn sefyllfaoedd lle nad yw rhaglenni rhyngweithiol yn cynnig unrhyw brydlon cychwynnol, gallwch chi roi'r gorau i'w anfon oedi wrth:

# Er mwyn osgoi rhoi darganfyddwyr ar sut i dorri i mewn, # nid yw'r system hon yn annog cyfrinair allanol. # Arhoswch am 5 eiliad ar gyfer exec i gwblhau spawn telnet very.secure.gov cysgu 5 anfon cyfrinair \ r

mae exp_send yn alias i'w hanfon. Os ydych chi'n defnyddio Expectk neu rywfaint arall o Ddisgwyl yn yr amgylchedd Tk, diffinnir anfon gan Tk at ddiben hollol wahanol. darperir exp_send ar gyfer cydweddoldeb rhwng amgylcheddau. Darperir aliasau tebyg ar gyfer gorchmynion anfon eraill Disgwyl arall.

send_error [-flags] string
fel anfon , heblaw bod yr allbwn yn cael ei anfon i stderr yn hytrach na'r broses gyfredol.

send_log [-] llinyn
fel anfon , heblaw bod y llinyn yn cael ei anfon i'r ffeil log yn unig (gweler log_file .) Mae'r dadleuon yn cael eu hanwybyddu os nad oes ffeil log ar agor.

send_tty [-flags] string
fel anfon , heblaw bod yr allbwn yn cael ei anfon at / dev / tty yn hytrach na'r broses gyfredol.

send_user [-flags] string
fel anfon , heblaw bod yr allbwn yn cael ei anfon i stdout yn hytrach na'r broses gyfredol.

eiliadau cysgu
yn achosi'r sgript i gysgu am y nifer o eiliadau penodol. Gall eiliad fod yn rif degol. Mae ymyriadau (a digwyddiadau Tk os ydych yn defnyddio Expectk) yn cael eu prosesu tra Disgwylwch gysgu.

seilio [args] rhaglen [args]
yn creu proses newydd sy'n rhedeg " args rhaglen ". Mae ei stdin, stdout a stderr yn gysylltiedig â Disgwyl, fel y gellir eu darllen a'u hysgrifennu gan orchmynion Disgwyl eraill. Mae'r cysylltiad wedi'i dorri'n agos neu os yw'r broses ei hun yn cau unrhyw un o'r dynodwyr ffeiliau.

Pan ddechreuir proses trwy silio , caiff y spawn_id amrywiol ei ddisgrifio yn cyfeirio at y broses honno. Ystyrir y broses a ddisgrifiwyd gan spawn_id yn "y broses gyfredol ". Mae'n bosibl y caiff spawn_id ei ddarllen neu ei ysgrifennu, gan ddarparu rheolaeth swyddi yn effeithiol.

Mae user_spawn_id yn newid byd-eang sy'n cynnwys disgrifydd sy'n cyfeirio at y defnyddiwr. Er enghraifft, pan fydd spawn_id wedi'i osod i'r gwerth hwn, disgwyliwch ymddwyn fel expect_user .

.I error_spawn_id yw newid byd-eang sy'n cynnwys disgrifydd sy'n cyfeirio at y gwall safonol. Er enghraifft, pan fydd spawn_id wedi'i osod i'r gwerth hwn, anfonwch ymddwyn fel send_error .

Mae tty_spawn_id yn newid byd-eang sy'n cynnwys disgrifydd sy'n cyfeirio at / dev / tty. Os nad yw / dev / tty yn bodoli (fel mewn cron, ar, neu sgript batch), yna nid yw tty_spawn_id wedi'i ddiffinio. Gellir profi hyn fel:

os yw {[info vars tty_spawn_id]} {# / dev / tty exists} arall {# / dev / tty does not exist # mae'n debyg mewn cron, swp, neu ar script}

silwn yn dychwelyd id y broses UNIX. Os na chaiff unrhyw broses ei spai, dychwelir 0. Mae'r spawn_out amrywiol (caethweision, enw) wedi'i osod i enw'r ddyfais caethweision pty.

Yn anffodus, mae silio yn adleisio enw'r gorchymyn a dadleuon. Mae'r baner -noecho yn atal seidio rhag gwneud hyn.

Mae'r baner-consol yn achosi allbwn consol i gael ei ailgyfeirio i'r broses wedi'i spai. Nid yw hyn yn cael ei gefnogi ar bob system.

Yn fewnol, mae silio yn defnyddio pty, wedi'i gychwyn yr un ffordd â thiw'r defnyddiwr. Caiff hyn ei gychwyn ymhellach fel bod pob lleoliad yn "ddiangen" (yn ôl stty (1)). Os yw'r stty_init newidyn wedi'i ddiffinio, caiff ei ddehongli yn arddull dadleuon stty fel cyfluniad pellach. Er enghraifft, bydd "set stty_init raw" yn achosi terfynellau prosesau pellach wedi eu silio i ddechrau yn y modd crai. -tipiau peidio â thopio'r cychwynnol ar sail tty'r defnyddiwr. -nottyinit sgipio'r cychwyniad "sane".

Fel arfer, nid oes digon o amser i'w wneud i seilio . Os ydych chi'n sylwi'n swnio'n cymryd cryn dipyn o amser, mae'n debyg y bydd yn dod ar draws ptys sydd wedi'u gosod. Mae nifer o brofion yn cael eu rhedeg ar ptys er mwyn osgoi rhwymedigaethau â phrosesau errant. (Mae'r rhain yn cymryd 10 eiliad fesul pty wedi'i ffonio.) Rhedeg Disgwylir gyda'r opsiwn -d yn dangos os Disgwylir bod sawl ptys yn dod o hyd i rywun arall. Os na allwch ladd y prosesau y mae'r ptys hyn ynghlwm wrthynt, efallai mai dim ond ailgychwyn eich unig droi.

Os na ellir seilio'r rhaglen yn llwyddiannus oherwydd bod exec (2) yn methu (ee pan nad yw'r rhaglen yn bodoli), bydd neges rhybudd yn cael ei ddychwelyd gan y rhyngweithiad nesaf neu ddisgwyl ei orchymyn fel petai'r rhaglen wedi rhedeg a chynhyrchu'r neges gwall fel allbwn. Mae'r ymddygiad hwn yn ganlyniad naturiol i weithredu silio . Yn fewnol, pori silio, ac ar ôl hynny, nid oes gan y broses sbonio unrhyw ffordd o gyfathrebu â'r broses Ddisgwyl wreiddiol ac eithrio trwy gyfathrebu drwy'r spawn_id.

Mae'r faner -open yn peri bod y ddadl nesaf yn cael ei ddehongli fel dynodwr ffeil Tcl (hy, wedi'i ddychwelyd trwy agor ). Yna gellir defnyddio'r iddi silio fel pe bai'n broses wedi'i spai. (Ni ddylid defnyddio'r dynodydd ffeil mwyach.) Mae hyn yn eich galluogi i drin dyfeisiau, ffeiliau a phiblinellau amrwd fel prosesau wedi'u silio heb ddefnyddio pty. Mae 0 yn cael ei ddychwelyd i nodi nad oes proses gysylltiedig. Pan fydd y cysylltiad â'r broses wedi'i spai ar gau, felly mae dynodwr ffeil Tcl. Mae'r faner -leaveopen yn debyg i -open ac eithrio bod -leaveopen yn achosi i'r dynodwr ffeil gael ei adael ar agor hyd yn oed ar ôl i'r iddi silio gau.

Mae'r ffenestr -achos yn achosi'r ffaith bod pty yn cael ei hagor ond ni chafodd unrhyw broses ei chreu. Mae 0 yn cael ei ddychwelyd i nodi nad oes proses gysylltiedig. Mae Spawn_id wedi'i osod fel arfer.

Mae'r spawn_out amrywiol (caethweision, fd) wedi'i osod i adnabodydd ffeil sy'n cyfateb i'r caethwas pty. Gellir ei gau gan ddefnyddio "close -sveve".

Mae enw'r faner-signal yn dangos arwydd i'w anwybyddu yn y broses wedi'i spai. Fel arall, mae signalau yn cael yr ymddygiad rhagosodedig. Caiff arwyddion eu henwi fel yn y gorchymyn trap , ac eithrio bod pob signal yn gofyn am faner ar wahân.

lefel strace
yn achosi argraffiadau dilynol i'w hargraffu cyn eu cyflawni. (Mae newidynnau gorchymyn gorchymyn Tcl's trace.) Mae lefel yn dangos pa mor bell i lawr yn y stack alw i olrhain. Er enghraifft, mae'r gorchymyn canlynol yn rhedeg Disgwyl wrth olrhain y 4 lefel gyntaf o alwadau, ond nid yn is na hynny.

disgwyl -c "strace 4" script.exp

Mae'r faner- ffug yn achosi strace i ddychwelyd disgrifiad o'r dadleuon diweddaraf nad ydynt yn ymwneud â gwybodaeth.

args stty
yn newid dulliau terfynol yn yr un modd â'r gorchymyn stty allanol.

Yn ddiffygiol, mae mynediad i'r derfynell reoli. Gellir dod o hyd i derfynellau eraill trwy atodi "Gofynion am ei statws yn ôl fel canlyniad y gorchymyn. Os na ofynnir am statws a bod mynediad i'r derfynell reoli, dychwelir statws blaenorol y priodoleddau crai ac adfer mewn ffurf a all fod yn ddiweddarach a ddefnyddir gan y gorchymyn.

Er enghraifft, mae'r dadleuon yn amrwd neu wedi'i goginio yn rhoi'r derfynell i mewn i ddull crai. Mae'r dadleuon - rhowch neu goginio'r derfynell i mewn i'r modd wedi'i goginio. Mae'r dadleuon yn adleisio a rhowch y derfynell i adleisio a dim noecho yn y drefn honno.

Mae'r enghraifft ganlynol yn dangos sut i anwybyddu dros dro ailadeiladu dros dro. Gellid defnyddio hyn mewn sgriptiau fel arall-awtomatig i osgoi sefydlu cyfrineiriau ynddynt. (Gwelwch fwy o drafodaeth ar hyn o dan HINTS EXPECT isod.)

stty -echo send_user "Cyfrinair:" expect_user -re "(. *) \ n" gosod cyfrinair $ expect_out (1, string) stty echo

args system
yn rhoi args i sh (1) fel mewnbwn, yn union fel petai wedi ei deipio fel gorchymyn o derfynell. Disgwylwch aros nes bydd y gragen yn dod i ben. Mae'r statws dychwelyd o sh yn cael ei drin yr un modd ag y mae Exec yn delio â'i statws dychwelyd.

Mewn cyferbyniad â exec sy'n ailgyfeirio stdin a stdout i'r sgript, nid yw'r system yn ailgyfeirio (heblaw'r hyn a nodir gan y llinyn ei hun). Felly, mae'n bosibl defnyddio rhaglenni sy'n gorfod siarad yn uniongyrchol â / dev / tty. Am yr un rheswm, nid yw canlyniadau'r system yn cael eu cofnodi yn y log.

amserlen [args]
yn dychwelyd amserlen. Heb unrhyw ddadleuon, dychwelir nifer yr eiliadau ers y cyfnod.

Mae'r banerformform yn cyflwyno llinyn a ddychwelir ond gyda dirprwyon yn cael eu gwneud yn ôl rheolau POSIX ar gyfer strftime. Er enghraifft, mae enw cryno yn ystod yr wythnos (%, Sat) yn disodli% a. Mae eraill yn:

% enw cryno yn ystod yr wythnos% Enw llawn yn ystod yr wythnos% b enw mis cryno% B enw mis llawn% c dyddiad-amser fel yn: Dydd Mercher 6 11:45:56 1993% d diwrnod y mis (01-31% H awr (00-23)% I awr (01-12)% j diwrnod (001-366)% m mis (01-12)% M munud (00-59)% p am neu pm% S eiliad (00-61) % u diwrnod (1-7, dydd Llun yw diwrnod cyntaf yr wythnos)% U wythnos (00-53, dydd Sul cyntaf diwrnod cyntaf yr wythnos un)% V wythnos (01-53, arddull ISO 8601)% w diwrnod (0- 6)% Yr wythnos W (00-53, dydd Llun cyntaf yw diwrnod cyntaf yr wythnos un)% x dyddiad-amser fel yn: Dydd Mercher Hyd 6 1993% X amser fel: 23:59:59% y flwyddyn (00-99) % Y flwyddyn fel ag y mae: 1993% Z amser (neu ddim byd os na ellir ei bennu) %% ar arwydd canran y cant

Mae% manylebau eraill heb eu diffinio. Bydd cymeriadau eraill yn cael eu pasio heb eu twyllo. Dim ond y locale C sy'n cael ei gefnogi.

Mae'r faner -seconds yn cyflwyno nifer o eiliadau ers i'r cyfnod gael ei ddefnyddio fel ffynhonnell i fformatio. Fel arall, defnyddir yr amser presennol.

Mae'r baner -gmt yn gorfodi allbwn amserlen i ddefnyddio'r maes amser GMT . Gyda dim baner, defnyddir y man amser lleol.

trap [arwyddion] arwyddion]
yn achosi'r gorchymyn a roddir i gael ei weithredu ar ôl derbyn unrhyw un o'r signalau a roddir. Mae'r gorchymyn yn cael ei weithredu yn y cwmpas byd-eang. Os yw'r gorchymyn yn absennol, dychwelir y weithred signal. Os mai gorchymyn yw'r llinyn SIG_IGN, mae'r arwyddion yn cael eu hanwybyddu. Os mai gorchymyn yw'r llinyn SIG_DFL, mae'r signal yn arwain at ddiofyn y system. mae signalau naill ai'n un signal neu restr o signalau. Gellir nodi arwyddion yn rhifol neu'n symbolaidd fel y signal (3). Gall y rhagddodiad "SIG" gael ei hepgor.

Heb unrhyw ddadleuon (neu'r ddadl - nifer), mae trap yn dychwelyd rhif signal yr orchymyn trap sy'n cael ei weithredu ar hyn o bryd.

Mae'r baner -code yn defnyddio cod dychwelyd y gorchymyn yn lle pa bynnag god oedd Tcl ar fin ei ddychwelyd pan ddechreuodd y gorchymyn redeg yn wreiddiol.

Mae'r baner -pwrdd yn golygu bod y gorchymyn yn cael ei werthuso gan ddefnyddio'r cyfieithydd sy'n weithredol ar yr adeg y dechreuodd y gorchymyn yn rhedeg yn hytrach na phryd y cafodd y trap ei ddatgan.

Mae'r baner enwau yn achosi'r gorchymyn trap i ddychwelyd enw'r arwydd y gorchymyn trap sy'n cael ei weithredu ar hyn o bryd.

Mae'r faner -max yn achosi'r gorchymyn trap i ddychwelyd y rhif signal mwyaf y gellir ei osod.

Er enghraifft, bydd y gorchymyn "trap {send_user" Ouch! "} SIGINT" yn argraffu "Ouch!" bob tro y mae'r defnyddiwr yn pwysleisio ^ C.

Yn ddiffygiol, SIGINT (y gellir ei greu fel arfer trwy wasgu ^ C) a SIGTERM achos Disgwyl i ymadael. Mae hyn oherwydd y trap canlynol, wedi'i greu yn ddiofyn pan fydd Disgwyl yn dechrau.

ymadael allan {SIGINT SIGTERM}

Os ydych chi'n defnyddio'r flag -D i ddechrau'r dadleuwr, caiff SIGINT ei ailddiffinio i gychwyn y dadleuwr rhyngweithiol. Mae hyn oherwydd y trap canlynol:

trap {exp_debug 1} SIGINT

Gellir newid y trap dadleuwr trwy osod y newidyn amgylchedd EXPECT_DEBUG_INIT i orchymyn trap newydd.

Gallwch, wrth gwrs, orchymyn y ddau hyn trwy ychwanegu gorchmynion trap i'ch sgript. Yn benodol, os oes gennych chi "SIGINT gadael" eich trap, bydd hyn yn gorchymyn y trap dadleuol. Mae hyn yn ddefnyddiol os ydych chi am atal defnyddwyr rhag dod i'r dadleuwr o gwbl.

Os ydych am ddiffinio eich trap eich hun ar SIGINT ond dal i dynnu at y dadleuwr pan fydd yn rhedeg, defnyddiwch:

os {! [exp_debug]} {trap mystuff SIGINT}

Fel arall, gallwch fynd i'r ddeuwrydd gan ddefnyddio rhyw signal arall.

ni fydd trap yn gadael i chi anwybyddu'r camau ar gyfer SIGALRM gan fod hyn yn cael ei ddefnyddio yn fewnol i Ddisgwyl . Mae'r gorchymyn datgysylltu yn gosod SIGALRM i SIG_IGN (anwybyddwch). Gallwch ail-alluogi hyn cyhyd â'ch analluogi yn ystod gorchmynion silio dilynol.

Gweler y signal (3) am ragor o wybodaeth.

aros [args]
oedi hyd nes y bydd proses wedi'i spai (neu'r broses bresennol os nad oes un wedi'i enwi) yn dod i ben.

mae aros fel arfer yn dychwelyd rhestr o bedair integer. Y cyfanrif cyntaf yw cais y broses a oedd yn aros. Yr ail gyfanrif yw'r iddi silyn cyfatebol. Y trydydd cyfanrif yw -1 os digwydd gwall system weithredol, neu 0 fel arall. Os oedd y trydydd cyfanrif yn 0, y pedwerydd cyfanrif yw'r statws a ddychwelwyd gan y broses wedi'i spai. Os oedd y trydydd cyfanrif yn -1, y pedwerydd cyfanrif yw gwerth errno a osodwyd gan y system weithredu. Mae'r errorCode amrywioldeb byd-eang wedi'i osod hefyd.

Gall elfennau ychwanegol ymddangos ar ddiwedd y gwerth dychwelyd o aros . Mae pumed elfen ddewisol yn nodi dosbarth o wybodaeth. Ar hyn o bryd, yr unig werth posibl ar gyfer yr elfen hon yw CHILDKILLED, ac yn yr achos hwn y ddau wert nesaf yw'r enw signal C-arddull a disgrifiad testunol byr.

Mae'r baner -i yn datgan y broses i aros yn cyfatebol i'r spawn_id a enwir (NID yw'r broses broses ). Y tu mewn i drinwr SIGCHLD, mae'n bosib aros am unrhyw broses wedi'i spai trwy ddefnyddio'r spawn id -1.

Mae'r faner -nowait yn achosi'r aros i ddychwelyd yn syth gyda'r arwydd o arosiad llwyddiannus. Pan fydd y broses yn dod i ben (yn ddiweddarach), bydd yn diflannu'n awtomatig heb yr angen am aros penodol.

Gellir defnyddio'r gorchymyn aros hefyd yn aros am broses forked gan ddefnyddio'r dadleuon "-i -1". Yn wahanol i'w ddefnydd gyda phrosesau wedi'u spai, gellir gweithredu'r gorchymyn hwn ar unrhyw adeg. Nid oes rheolaeth dros ba broses sy'n cael ei fanteisio arno. Fodd bynnag, gellir gwirio'r gwerth dychwelyd ar gyfer id y broses .

LLYFRGELLAU

Disgwyliwch yn awtomatig wybod am ddau lyfrgell adeiledig ar gyfer Sgriptiau Disgwyl. Caiff y rhain eu diffinio gan y cyfeirlyfrau a enwir yn y variables exp_library ac exp_exec_library. Bwriedir i'r ddau gynnwys ffeiliau cyfleustodau y gellir eu defnyddio gan sgriptiau eraill.

exp_library yn cynnwys ffeiliau pensaernïol-annibynnol. exp_exec_library yn cynnwys ffeiliau pensaernïol-ddibynnol. Yn dibynnu ar eich system, gall y ddau gyfeiriad fod yn gwbl wag. Mae bodolaeth y ffeil $ exp_exec_library / cat-buffers yn disgrifio a yw eich bwffi / bin / cat yn ddiofyn.

ARCHWILIO

Mae diffiniad vgrind ar gael ar gyfer sgriptiau Disgwyl 'n bert-argraffu. Gan dybio bod y diffiniad vgrind a gyflenwir gyda'r dosbarthiad Disgwyl wedi'i osod yn gywir, gallwch ei ddefnyddio fel:

ffeil fideo-edrych

ENGHREIFFTIAU

Nid yw llawer yn amlwg sut i roi popeth at ei gilydd y mae'r dudalen dyn yn ei ddisgrifio. Rwy'n eich annog i ddarllen a cheisio'r enghreifftiau yn y cyfeirlyfr enghreifftiol o'r Dosbarthiad Disgwyl . Mae rhai ohonynt yn rhaglenni go iawn. Mae eraill yn syml o enghreifftiau o dechnegau penodol, ac wrth gwrs, mae cwpl yn unig yn gyflym. Mae gan ffeil INSTALL drosolwg cyflym o'r rhaglenni hyn.

Mae'r papurau Disgwyliedig (gweler GWELER HEFYD) hefyd yn ddefnyddiol. Er bod rhai papurau'n defnyddio cystrawen sy'n cyfateb i fersiynau cynharach o Disgwyl, mae'r rhesymau sy'n cyd-fynd yn dal yn ddilys ac yn mynd i lawer mwy o fanylder na'r dudalen hon.

CAVEATS

Gall estyniadau lygru gydag enwau gorchymyn Disgwyl. Er enghraifft, diffinnir anfon gan Tk at ddiben hollol wahanol. Am y rheswm hwn, mae'r rhan fwyaf o'r gorchmynion Disgwyl hefyd ar gael fel "exp_XXXX". Nid yw gorchmynion a newidynnau sy'n dechrau gydag "exp", "inter", "spawn", a "timeout" yn cynnwys aliasau. Defnyddiwch yr enwau gorchymyn estynedig os oes angen y cydymdeimlad hwn arnoch rhwng amgylcheddau.

Disgwylir yn cymryd golwg eithaf rhyddfrydol o gwmpasu. Yn benodol, ceisir newidynnau sy'n cael eu darllen gan orchmynion sy'n benodol i'r rhaglen Disgwyliad yn gyntaf o'r cwmpas lleol, ac os na chawsant eu darganfod, yn y cwmpas byd-eang. Er enghraifft, mae hyn yn gwahardd yr angen i osod "amserlen byd-eang" ym mhob gweithdrefn rydych chi'n ei ysgrifennu sy'n ei ddisgwyl . Ar y llaw arall, mae newidynnau a ysgrifennir bob amser yn y cwmpas lleol (oni bai fod gorchymyn "byd-eang" wedi'i gyhoeddi). Y broblem fwyaf cyffredin y mae hyn yn ei achosi yw pan gaiff silio ei weithredu mewn gweithdrefn. Y tu allan i'r weithdrefn, nid yw spawn_id yn bodoli mwyach, felly nid yw'r broses wedi'i spai bellach yn hygyrch yn syml oherwydd cwmpasu. Ychwanegu "spawn_id byd-eang" i weithdrefn o'r fath.

Os na allwch alluogi'r gallu aml-wylio (hy, nid yw'ch system yn cefnogi dim dewis (BSD *. *), Arolwg (SVR> 2), nac yn rhywbeth cyfatebol), bydd Disgwyl yn gallu rheoli un broses yn unig ar y tro. Yn yr achos hwn, peidiwch â cheisio gosod spawn_id , ac ni ddylech chi weithredu prosesau trwy exec tra bod proses wedi'i spai yn rhedeg. At hynny, ni fyddwch yn gallu disgwyl o sawl proses (gan gynnwys y defnyddiwr fel un) ar yr un pryd.

Gall paramedrau terfynol gael effaith fawr ar sgriptiau. Er enghraifft, os ysgrifennir sgript i chwilio am adleisio, bydd yn camymddwyn os caiff ei adleisio ei ddiffodd. Am y rheswm hwn, Disgwylir i orfodi paramedrau terfynol sydyn yn ddiofyn. Yn anffodus, gall hyn wneud pethau'n annymunol ar gyfer rhaglenni eraill. Er enghraifft, mae'r gragen emacs eisiau newid y mapiau "arferol": mae llinellau newydd yn cael eu mapio i linellau newydd yn hytrach na llinell newydd newydd, ac mae adleisio'n anabl. Mae hyn yn caniatáu i un ddefnyddio emacs i olygu'r llinell fewnbwn. Yn anffodus, ni all Disgwyl dyfalu hyn.

Gallwch ofyn bod Disgwylwch yn anwybyddu'r gosodiad diofyn o baramedrau terfynol, ond yna mae'n rhaid i chi fod yn ofalus iawn wrth ysgrifennu sgriptiau ar gyfer amgylcheddau o'r fath. Yn achos emacs, osgoi dibynnu ar bethau fel adleisio a mapio diwedd-lein.

Mae'r gorchmynion sy'n derbyn dadleuon a dderbynnir mewn un rhestr (yn disgwyl amrywiadau a rhyngweithio ) yn defnyddio heuristig i benderfynu a yw'r rhestr mewn gwirionedd yn un ddadl neu lawer. Gall yr heuristig fethu yn unig yn yr achos pan fydd y rhestr mewn gwirionedd yn cynrychioli dadl sengl sydd â nifer o fewnosodiadau \ n â chymeriadau nad ydynt yn gofod gwyn rhyngddynt. Mae hyn yn ymddangos yn annhebygol iawn, fodd bynnag, gellir defnyddio'r ddadl "-nobrace" i orfodi un ddadl i'w drin fel un ddadl. Gellid defnyddio hyn â chod Disgwylir a gynhyrchir gan beiriant. Yn yr un modd, mae brainc yn golygu un ddadl i'w drin fel patrymau / gweithredoedd lluosog.

BUGS

Roedd yn demtasiwn iawn i enwi'r rhaglen "rhyw" (ar gyfer naill ai "Smart EXec" neu "Send-Expect"), ond ymdeimlad da (neu efallai dim ond Piwritaniaeth).

Ar rai systemau, pan gânt gragen, mae'n cwyno am beidio â chael mynediad i'r tty ond mae'n rhedeg beth bynnag. Mae hyn yn golygu bod gan eich system fecanwaith ar gyfer ennill y tyt rheoli nad yw Disgwyl yn gwybod amdano. Darganfyddwch beth ydyw, ac anfonwch yr wybodaeth hon yn ôl ataf.

Mae Ultrix 4.1 (o leiaf y fersiynau diweddaraf o gwmpas yma) yn ystyried amserouts o fwy na 1000000 i fod yn gyfwerth â 0.

Mae UNIX 4.0A Digidol (a fersiynau eraill mae'n debyg) yn gwrthod dyrannu ptys os ydych chi'n diffinio trinydd SIGCHLD. Gweler y dudalen grantpt am ragor o wybodaeth.

Nid yw IRIX 6.0 yn trin caniatâd pty yn gywir felly, os yw Disgwyl yn ceisio dyrannu pty a ddefnyddiwyd gan rywun arall, mae'n methu. Uwchraddio i IRIX 6.1.

Mae Telnet (wedi'i wirio o dan SunOS 4.1.2) yn hongian os na chaiff TERM ei osod. Mae hwn yn broblem o dan cron, ar ac mewn sgriptiau cgi, nad ydynt yn diffinio TERM. Felly, rhaid i chi ei osod yn benodol - i ba fath sydd fel arfer yn amherthnasol. Mae'n rhaid iddo gael ei osod i rywbeth yn unig! Mae'n debyg y bydd y canlynol yn dioddef ar gyfer y rhan fwyaf o achosion.

set env (TERM) vt100

Mae Tip (wedi'i wirio yn unig o dan BSDI BSD / OS 3.1 i386) yn hongian os nad yw SHELL a HOME yn cael eu gosod. Mae hwn yn broblem o dan cron , ar sgriptiau cgi ac mewn cip , nad ydynt yn diffinio'r newidynnau amgylcheddol hyn. Felly, rhaid i chi eu gosod yn benodol - i ba fath sydd fel rheol yn amherthnasol. Mae'n rhaid iddo gael ei osod i rywbeth yn unig! Mae'n debyg y bydd y canlynol yn dioddef ar gyfer y rhan fwyaf o achosion.

set env (SHELL) / bin / sh set env (HOME) / usr / local / bin

Mae rhai gweithrediadau ptys wedi'u cynllunio fel bod y cnewyllyn yn taflu unrhyw allbwn nas darllenwyd ar ôl 10 i 15 eiliad (mae'r nifer gwirioneddol yn weithredol-ddibynnol) ar ôl i'r broses gau y disgrifydd ffeil. Felly Rhagwelwch raglenni fel

Seibiant cysgu dyddiad 20 yn disgwyl

yn methu. Er mwyn osgoi hyn, gwahodd rhaglenni nad ydynt yn rhyngweithiol gyda chynhyrchu yn hytrach na silio . Er bod sefyllfaoedd o'r fath yn debyg, yn ymarferol, nid wyf erioed wedi wynebu sefyllfa lle byddai allbwn terfynol rhaglen wirioneddol ryngweithiol yn cael ei golli oherwydd yr ymddygiad hwn.

Ar y llaw arall, mae cray UNICOS ptys yn taflu unrhyw allbwn nas darllenwyd yn syth ar ôl i'r broses gau y disgrifydd ffeil. Rwyf wedi adrodd hyn i Cray ac maen nhw'n gweithio ar brawf.

Weithiau mae angen oedi rhwng ymateb prydlon ac ymateb, megis pan fydd rhyngwyneb tty yn newid gosodiadau UART neu gyfateb cyfraddau baud trwy chwilio am ddarnau cychwyn / stopio. Fel rheol, mae gofyn i hyn i gyd yw cysgu am ail neu ddau. Techneg fwy cadarn yw ailddechrau nes bod y caledwedd yn barod i dderbyn mewnbwn. Mae'r enghraifft ganlynol yn defnyddio'r ddwy strategaeth:

anfon "cyflymder 9600 \ r"; cysgu 1 yn disgwyl {amserout {send "\ r"; exp_continue} $ prompt}

ni fydd cod trap yn gweithio gydag unrhyw orchymyn sy'n eistedd yn dolen digwyddiad Tcl, fel cwsg. Y broblem yw, yn y dolen ddigwyddiad, fod Tcl yn datgelu codau dychwelyd gan weithwyr async. Y rheswm yw gosod baner yn y cod trap. Yna gwiriwch y faner yn syth ar ôl y gorchymyn (hy, cysgu).

Mae'r gorchymyn disgwyl_background yn anwybyddu - dadleuon amserlen ac nid oes ganddo gysyniad o amserlenni yn gyffredinol.

& # 34; HYFFORDDAU EITHRIO & # 34;

Mae ychydig o bethau yn ymwneud â Disgwyl na all fod yn anweladwy. Mae'r adran hon yn ceisio mynd i'r afael â rhai o'r pethau hyn gyda dau awgrym.

Mae cyffredin yn disgwyl problem yw sut i adnabod ymosodiadau cregyn. Gan fod y rhain yn cael eu haddasu yn wahanol gan wahanol bobl a chregyn gwahanol, gall fod yn anodd awtomeiddio rlogin yn borthus heb wybod y prydlon. Confensiwn rhesymol yw bod defnyddwyr yn storio mynegiant rheolaidd yn disgrifio eu prydlon (yn enwedig, y diwedd) yn y newidyn amgylchedd EXPECT_PROMPT. Gellir defnyddio cod fel y canlynol. Os nad yw EXPECT_PROMPT yn bodoli, mae gan y cod gyfle da i weithredu'n gywir.

set prompt "(% | # | \\ $) $"; # daliad prydlon rhagosodedig {set $ env prompt (EXPECT_PROMPT)} yn disgwyl -re $ prompt

Yr wyf yn eich annog i ysgrifennu yn disgwyl patrymau sy'n cynnwys diwedd yr hyn bynnag y disgwyliwch ei weld. Mae hyn yn osgoi'r posibilrwydd o ateb cwestiwn cyn gweld y peth cyfan. Yn ogystal, er y gallech chi ateb cwestiynau'n dda cyn eu gweld yn gyfan gwbl, os atebwch yn gynnar, efallai y bydd eich ateb yn ymddangos yn ôl yng nghanol y cwestiwn. Mewn geiriau eraill, bydd y ddeialog sy'n deillio o hyn yn gywir ond edrychwch yn sgramblo.

Mae'r rhan fwyaf o awgrymiadau yn cynnwys cymeriad gofod ar y diwedd. Er enghraifft, yr ysgogiad o ftp yw 'f', 't', 'p', '>' a. I gyd-fynd â'r prydlon hwn, rhaid i chi gyfrif am bob un o'r cymeriadau hyn. Mae'n gamgymeriad cyffredin i beidio â chynnwys y gwag. Rhowch y gwag yn benodol.

Os ydych chi'n defnyddio patrwm o'r ffurflen X *, bydd * yn cydweddu'r holl allbwn a dderbynnir o ddiwedd X i'r peth olaf a dderbyniwyd. Mae hyn yn synhwyrol ond gall fod braidd yn ddryslyd oherwydd gall yr ymadrodd "y peth olaf a dderbyniwyd" amrywio yn dibynnu ar gyflymder y cyfrifiadur a phrosesu I / O gan y cnewyllyn a'r gyrrwr dyfais.

Yn benodol, mae pobl yn tueddu i weld allbwn y rhaglen yn cyrraedd darnau enfawr (atomig) pan fydd y rhan fwyaf o raglenni yn cynhyrchu allbwn un llinell ar y tro. Gan dybio mai dyma'r achos, ni all * yn y patrwm y paragraff blaenorol ond gydweddu â diwedd y llinell bresennol er ei bod yn ymddangos bod mwy, oherwydd ar adeg y gêm oedd yr holl allbwn a dderbyniwyd.

yn disgwyl nad oes unrhyw ffordd o wybod bod allbwn pellach yn dod oni bai fod eich patrwm yn cyfrif amdano'n benodol.

Hyd yn oed yn dibynnu ar fwfferu llinell-oriented yn annoeth. Yn anaml y mae rhaglenni'n gwneud addewidion am y math o fyrffwr maen nhw'n ei wneud, ond gall anhwylderau'r system dorri llinellau allbwn er mwyn i'r llinellau dorri mewn mannau ar hap ymddangos. Felly, os gallwch chi fynegi'r ychydig gymeriadau olaf o brydlon wrth ysgrifennu patrymau, mae'n ddoeth gwneud hynny.

Os ydych chi'n aros am batrwm yn allbwn olaf rhaglen ac mae'r rhaglen yn allyrru rhywbeth arall yn lle hynny, ni fyddwch yn gallu canfod hynny gyda'r allweddair amserlen . Y rheswm yw na fydd disgwyl na fydd amserlen - yn lle hynny bydd yn cael syniad eof . Defnyddiwch hynny yn lle hynny. Hyd yn oed yn well, defnyddiwch y ddau. Felly, os yw'r llinell honno'n cael ei symud o gwmpas, ni fydd yn rhaid ichi olygu'r llinell ei hun.

Fel arfer, mae Newlines yn cael eu trosi i ddychwelyd cerbyd, dilyniannau llinell-linell pan fyddant yn allbwn gan y gyrrwr terfynell. Felly, os ydych am batrwm sy'n cydweddu'n benodol â'r ddwy linell, o, dyweder, printf ("foo \ nbar"), dylech ddefnyddio'r patrwm "foo \ r \ nbar".

Mae cyfieithiad tebyg yn digwydd wrth ddarllen gan y defnyddiwr, trwy expect_user . Yn yr achos hwn, pan fyddwch chi'n pwyso'n ôl, caiff ei gyfieithu i linell newydd. Os yw Disgwyl yna'n pasio hynny i raglen sy'n gosod ei derfynell i ddull crai (fel telnet), bydd problem yn digwydd, gan fod y rhaglen yn disgwyl gwir ddychwelyd. (Mae rhai rhaglenni mewn gwirionedd yn maddau gan y byddant yn cyfieithu llinell newydd yn awtomatig i ddychwelyd, ond nid yw'r rhan fwyaf ohonynt.) Yn anffodus, nid oes modd darganfod bod rhaglen yn rhoi ei derfynell i mewn i'r modd crai.

Yn hytrach na disodli'r ffenestri newydd gyda dychweliadau, yr ateb yw defnyddio'r gorchymyn "stty raw", a fydd yn atal y cyfieithiad. Sylwch, fodd bynnag, fod hyn yn golygu na fyddwch chi bellach yn cael y nodweddion golygu llinell wedi'i goginio.

rhyngweithio'n ymhlyg yn gosod eich terfynell i ddull crai fel na fydd y broblem hon yn codi yna.

Mae'n aml yn ddefnyddiol storio cyfrineiriau (neu wybodaeth breifat arall) yn y sgriptiau Disgwyl . Nid yw hyn yn cael ei argymell gan fod unrhyw beth sy'n cael ei storio ar gyfrifiadur yn dueddol o gael mynediad at unrhyw un. Felly, mae annog rhyngweithiol i gyfrineiriau o sgript yn syniad doethach na'u hymgorffori'n llythrennol. Serch hynny, weithiau mae ymgorffori o'r fath yn yr unig bosibilrwydd.

Yn anffodus, nid oes gan y system ffeiliau UNIX ffordd uniongyrchol o greu sgriptiau sy'n weithredadwy ond na ellir eu darllen. Gall systemau sy'n cefnogi sgriptiau cregyn setgid efelychu hyn yn anuniongyrchol fel a ganlyn:

Creu'r sgript Disgwyl (sy'n cynnwys y data cyfrinachol) fel arfer. Gwneud ei ganiatâd yn 750 (-rwxr-x ---) ac yn eiddo i grŵp dibynadwy, hy grŵp sy'n cael ei ddarllen. Os oes angen, creu grŵp newydd at y diben hwn. Nesaf, creu sgript / bin / sh gyda chaniatâd 2751 (-rwxr-s - x) sy'n eiddo i'r un grŵp ag o'r blaen.

Y canlyniad yw sgript a all gael ei weithredu (gan ei ddarllen) gan unrhyw un. Pan gaiff ei galw, mae'n rhedeg y sgript Disgwyl .

& # 34; GWELER HEFYD & # 34;

Tcl (3), libexpect (3)
"Archwilio Ymweliad: Pecyn Cymorth Seiliedig ar Daith ar gyfer Awtomeiddio Rhaglenni Rhyngweithiol" gan Don Libes, t. 602, ISBN 1-56592-090-2, O'Reilly and Associates, 1995.
"Disgwyl: Curing Those Unstrolable Fits of Interactivity" gan Don Libes, Trafodion Cynhadledd USENIX Haf 1990, Anaheim, California, Mehefin 11-15, 1990.
.I "Defnyddio disgwyl i Awtomeiddio Gweinyddu Systemau Tasgau" gan Don Libes, Achosion Cynhadledd Gweinyddu Systemau Gosodiadau USENIX 1990, Colorado Springs, Colorado, Hydref 17-19, 1990.
.I "Tcl: Iaith Reoli Embeddadwy" gan John Ousterhout, Trafodion Cynhadledd USENIX y Gaeaf 1990, Washington, DC, Ionawr 22-26, 1990. Rwy'n disgwyl: Sgriptiau ar gyfer Rheoli Rhaglenni Rhyngweithiol "gan Don Libes, Systemau Cyfrifiadurol , Vol. 4, Rhif 2, Cyfryngau Diweddaraf Prifysgol California, Tachwedd 1991. "Rhaglenni Rhyngweithiol Profi Atchweliad a Phrawf Cydgyfeirio", gan Don Libes, Trafodion Cynhadledd USENIX Haf 1992, tud. 135-144, San Antonio, TX, Mehefin 12-15, 1992 .. "Kibitz - Cysylltu Aml-Raglenni Rhyngweithiol Gyda'n Gilydd", gan Don Libes, Meddalwedd - Ymarfer a Phrofiad, John Wiley & Sons, West Sussex, England, Vol.

23, Rhif 5, Mai, 1993 .. "Yn Ddyledydd ar gyfer Ceisiadau Tcl", gan Don Libes, Achosion Gweithdy Tcl / Tk 1993, Berkeley, CA, Mehefin 10-11, 1993.

AWDUR

Don Libes, Sefydliad Cenedlaethol Safonau a Thechnoleg

CYDNABYDDIAETHAU

Diolch i John Ousterhout ar gyfer Tcl, a Scott Paisley am ysbrydoliaeth. Diolch i Rob Savoye ar gyfer cod awtogweddu Expect.

Mae ffeil HANES yn dogfennu llawer o'r esblygiad sy'n ddisgwyliedig . Mae'n gwneud darllen diddorol a gallai roi mewnwelediad pellach i'r meddalwedd hon. Diolch i'r bobl a grybwyllwyd ynddo a anfonodd atafau i mi a rhoddodd gymorth arall.

Cafodd dyluniad a gweithrediad Disgwyl ei dalu yn rhannol gan lywodraeth yr UD ac felly mae'n gyhoeddus. Serch hynny, byddai'r awdur a'r NIST yn hoffi credyd os defnyddir y rhaglen hon a'r dogfennau neu'r dogn ohonynt.