Линукс / Unix Command хүлээгдэж байна

Хүлээгдэж буй зүйл нь скриптийн дагуу бусад интерактив хөтөлбөрүүдтэй ярих хөтөлбөр юм. Скриптийн дэс дарааллаар, Хүлээгдэж буй програм нь юу болох, юу зөв болох ёстойг мэдэж байх хэрэгтэй. Хэлний хэл нь харилцан яриа, чиг хандлагыг удирдан чиглүүлэх, өндөр түвшний хяналтын бүтцийг бий болгодог. Үүнээс гадна, хэрэглэгч хүссэн үедээ шууд хяналт тавьж, скрипт руугаа хяналтаа буцааж өгч болно.

Expectk нь Expect and Tk-ийн холимог юм. Энэ нь Expect болон Tk-ийн хүсч буй үйлдэл юм. Түүнчлэн Tcl-ийн тусламжгүйгээр C эсвэл C ++ хэлээр шууд ашиглаж болно.

"Expect" гэсэн нэр нь uucp, kermit болон бусад модемийн хяналтын програмуудаар илгээгдэх / хүлээх дарааллыг мэддэгээс гаралтай. Хэдийгээр uucp-ээс ялгаатай нь Expect нь ерөнхийдөө програмчлагдсан бөгөөд ямар ч програм болон ажиллах зарчмаар хэрэглэгчийн түвшний команд хэлбэрээр ажиллах боломжтой. Хүлээгдэж буй нэгэн зэрэг хэд хэдэн хөтөлбөртэй ярилцаж болно.

Юу хүлээж болох вэ?

Жишээ нь, хүлээх тушаалын хийж болох зарим зүйлүүд байна:

Эдгээр үүргийг гүйцэтгэж чадахгүй байгаа янз бүрийн шалтгаанууд байдаг. Хүлээгдэж буй бүх зүйл боломжтой.

Ер нь, Хүлээгдэж буй програм нь хэрэглэгч болон програм хоёрын хоорондын харилцан үйлчлэлийг шаарддаг програм ажиллуулахад хэрэгтэй юм. Шаардлагатай бүх зүйл нь программчлалд тодорхойлогддог. Хүлээгдэж буй програм нь хяналтыг зогсоохгүйгээр хэрэглэгчид буцааж хянах боломжтой. Үүний нэгэн адилаар хэрэглэгчид скриптэд хэзээ ч хяналт тавьж чадна.

Хэрэглээ

Цааш нь ажиллуулах тушаалуудын жагсаалтанд cmdfile-г уншина уу. Хүлээгдэж буй системүүд нь # -ийг дэмждэг системүүд дээр далд ажиллаж болно. скриптийг гүйцэтгэх боломжтой гэж тэмдэглэх ба эхний мөрийг скриптэд бичиж тэмдэглэнэ:

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

Мэдээжийн хэрэг, зам нь ирээдүйд амьдралыг нарийн тодорхойлох ёстой. / usr / local / bin нь зөвхөн жишээ юм.

-c туг нь скрипт дээр байхаас өмнө ажиллуулах тушаалыг агуулдаг. Тухайн бүрхүүлээр эвдэрч сүйрэхээс сэргийлэхийн тулд командыг иш татаж авна. Энэ сонголтыг олон удаа ашиглаж болно. Олон тооны командуудыг нэг цэгээр хагас цэгүүдийг тусгаарлан гүйцэтгэж болно. Тушаалууд нь харагдах дарааллаар гүйцэтгэгдэнэ. Expectk-г ашиглахдаа энэ тохируулга нь -хүлжээгээр заасан байдаг.

-d туг нь зарим нэг оношлогооны гаралтыг идэвхжүүлдэг бөгөөд энэ нь ихэвчлэн хүлээгдэж, харилцах гэх мэт тушаалуудын дотоод үйл ажиллагааг мэдээлдэг. Энэ туг нь Expect скриптийн эхэнд "exp_internal 1" адилхан үр нөлөөтэй байдаг бөгөөд хүлээгдэж буй хувилбарын хувилбартай ижил байна.

-D туг нь интерактив дибагерийг идэвхжүүлдэг. Бүхэл утгыг дагаж мөрдөх ёстой. Хэрэв debugger нь дараагийн Tcl процедурын өмнө утга нь тэг биш юмуу эсвэл aC дарагдсан эсвэл breakpoint цохилт эсвэл бусад зохих debugger тушаал скрипт дээр байгаа бол хяналтыг авна. Экспеккийг ашиглах үед энэ сонголтыг Debug гэж зааж өгдөг.

-f туг нь тушаалын тушаалуудыг унших файлыг урьдчилан заадаг. # Тэмдгийг хэрэглэх үед энэ нь зөвхөн ашигтай учраас туг өөрөө заавал байх болно. Тэмдэглэгээ, тушаалын мөрнөөс бусад нэмэлт өгөгдлүүдийг өгөх болно. Expectk-ийг ашиглах үед энэ сонголт -file гэж тодорхойлогдоно.

Анхдагчаар тушаалын файлыг санах ойд уншиж, бүхэлдээ гүйцэтгэнэ. Файлуудыг нэг удаад нэг мөр унших нь зүйтэй. Ийм аргаар зохицуулах зорилгоор дурын файлуудыг хүчээр оруулахын тулд -b тугийг хэрэглэнэ. Expectk-ийг ашиглах үед энэ тохируулга нь -buffer гэж тодорхойлогдсон байдаг.

Хэрэв string "-" файлын нэрээр нийлүүлэгдсэн бол стандарт оролт нь уншигдах болно. "-" - г ашиглахын тулд "./" гэж ашиглаарай.

-i туг нь Expect командыг файлаас уншихын оронд коммандыг асууж ажиллуулдаг. Дэмжих нь exit тушаалаар эсвэл EOF дээр дуусгавар болно. Хэрэв тушаалын файл болон -c нь ашиглагдахгүй бол -i тугийг авч үзнэ. Expectk-ийг ашиглах үед энэ тохируулга нь -interactive гэж тодорхойлогдсон байдаг.

- сонголтуудын төгсгөлийг хязгаарлахад ашиглаж болох юм. Хэрвээ та скриптийг сонголтоор тайлбарлахыг хүсч байгаа бол энэ нь ашигтай байдаг. Үүнийг #! Хүлээгдэж буй далбаа шиг тайлбарлахаас урьдчилан сэргийлэхийн тулд мөрөнд. Жишээлбэл, дараахь аргументууд нь хувьсагчийн argv дэх скрипт нэрийг орхин гарах болно.

#! / usr / local / bin / expect -

# Аргументууд нэмэх үед ердийн getopt (3) болон execve (2) консолиуд нь ажиглагдсан байх ёстойг анхаарна уу! шугам.

$ Exp_library / expect.rc файл нь хэрэв байгаа бол -n туг ашиглаагүй л бол автоматаар эх сурвалжийг өгдөг. (Expectk-г ашиглах үед энэ тохируулга нь -NORC гэж тодорхойлогдоно.) Дараа нь тэр даруй ~ / .expect.rc файл нь -n туг ашиглаагүй л бол автоматаар эх сурвалжийг өгдөг. Хэрэв орчны хувьсагч DOTDIR тодорхойлогдсон бол үүнийг лавлах гэж үздэг бөгөөд .expect.rc файлаас уншина. Expectk-г ашиглах үед энэ тохируулга нь -norc гэж тодорхойлогдсон байдаг. Энэ эх үүсвэр нь зөвхөн -c тугуудыг ажиллуулсны дараа л хэрэгждэг.

-v нь хувилбарын дугаар болон гарах хувилбарыг хэвлэнэ. Expectk-д харгалзах тугны урт далбааны нэрийг ашигладаг нь -version юм.

Нэмэлт аргуудыг жагсаалтад оруулж argv нэртэй хувьсагчид хадгалсан байдаг. argc нь argv -ийн уртаар эхэлдэг.

Argv0 нь ямар ч скрипт ашиглаагүй бол скрипт эсвэл хоёртын нэр байх ёстой. Жишээ нь, скриптийн нэр болон эхний гурван нэмэлт өгөгдлүүдийг дараах байдлаар хэвлэнэ:

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

Тушаалууд

Хүлээгдэж буй хэрэгсэл нь Command командыг ашигладаг. Tcl нь хяналтын урсгалын (хэрвээ, эвдрэх, завсарлагатай), үнэлгээний илэрхийлэл болон рекурсион ба процедурын тодорхойлолт гэх мэт хэд хэдэн онцлогуудыг хангадаг. Энд хэрэглэгдэж байгаа тушаалууд нь тодорхойлогдоогүй (хэрэв тохируулсан бол, execex) нь Tcl тушаалууд юм. Хүлээгдэж буй нэмэлт тушаалуудыг дэмждэг. Өөрөөр заагаагүй бол хоосон мөрийг буцаах тушаалууд.

Захирамжууд нь хурдан байрлалтай байхын тулд үсгээр бичигдсэн байдаг. Гэсэн хэдий ч, шинэ хэрэглэгчдэд тухайн захиалгат өгөгдөл, илгээж, хүлээж, харилцан тайлбарлах замаар уншихад хялбар байдаг.

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

Одоогийн үйл явцтай холболтыг хаадаг. Ихэнх интерактив програмууд нь stdin болон гарахад EOF -ийг илрүүлэх болно; Ингэснээр процессийг зогсооход хүрдэг. -i туг нь нэртэй spawn_id тохирохтой хамаатай үйл явцыг зарлах болно.

Хүлээгдэж буй болон харилцан үйлчлэл нь одоогийн процесс гарчихаад, ойртож байгаа үед илрэх болно. Хэрэв та процессийг устгавал, "exec kill $ pid" гэж хэлэхэд та шууд дуудлага хийх хэрэгтэй .

-onexec туг нь ямар нэгэн шинэ үржиж байгаа процессууд дахь уусгуурын id хаалттай эсэх эсвэл процесс хэтэрсэн эсэхийг тодорхойлно. Нөөц id нээлттэй байхын тулд 0 утгыг ашиглаарай. Тэг биш бүхэл тоо нь ямар нэгэн шинэ процессийн үед споныг хаасан байдаг.

Хадгалсан тэмдэг нь спонд id-тэй холбоотой боолыг хаадаг. Холболт хаагдсан үед боол нь нээлттэй байгаа бол автоматаар хаагддаг.

Холболт хаалттай эсвэл шууд илэрхийлэгдэж байгаа эсэхээс үл хамааран та холбогдох цөмийн процессийн талбарыг цэвэрлэхийг хүлээх хэрэгтэй. Close команд нь процессийн холболтыг хаах баталгаа гарахгүй учраас хүлээх хэрэггүй.

дибаг [[-now] 0 | 1]

Та Tcl-ийн дибаг реггерийг хянадаг.

Ямар ч аргументгүй бол дибаг регистр ажиллахгүй бол 1 нь буцаагдах болно, тэгэхгүй бол 0 буцаадаг.

1 аргументтай бол дибаг хийх ажлыг эхлүүлсэн. 0 утгатай бол дибаг хийгч зогсох болно. Хэрэв 1 аргумент нь өмнө нь таних тэмдэгтэй бол debugger даруй эхлэх болно. Үгүй бол, дибаг хийгч нь дараагийн Tcl мэдэгдэлтэй эхлүүлэгдэнэ.

Дебют тушаал нь ямар ч урхинд өөрчлөлт оруулдаггүй. Үүнийг энэ нь -D тугтай хамт эхлэхийг бодоорой.

Хуваах холболт нь терминалаас салаалсан процессийг салгана. Энэ нь үргэлжлүүлэн ажиллаж байна. Процессийг өөрийн процессийн бүлэгт өгдөг. Стандарт I / O нь / dev / null руу чиглүүлэгдэнэ.

Дараах фрагмент нь скриптийг үргэлжлүүлэн ажиллуулахад тасалддаг.

if {[fork]! = 0} exit disconnect. . .

Дараах скрипт нууц үг уншиж дараа нь програм ажиллуулж байх бүрт нууц үг шаардана. Скрипт нь нууц үгээ оруулаад зөвхөн нэг удаа бичих ёстой.

send_user "Нууц үг? \" expect_user -re "(. *) \ n" for {} 1 {} {if {[fork]! = 0} {sleep 3600; continue} 1, тэмдэгт мөр). . . гарах }

Бүрхүүл асинхрон процессыг салгахад ашигладаг давуу тал нь (&) нь Expel нь таслалтын өмнө терминалын параметрүүдийг хадгалж, дараа нь тэдгээрийг шинэ ptys-д хэрэглэж болно. & Prompt; хүлээх мөр нь терминалын параметрүүдийг уншиж чаддаггүй болохоор хүлээгдэж байгаа хугацаа нь терминалыг салгаснаар хяналтыг хүлээж авдаг.

гарах [төл]] [статус]

Хүлээгдэж буй үр дүнг гаргах эсвэл өөрөөр хийхийг бэлддэг.

-onexit туг нь дараагийн аргументийг exit handler болгон ашиглах шалтгаан болдог. Аргументгүй бол одоогийн гарах гар аргыг буцаана.

The -exexit туг нь Expect- г гарахаар бэлдэж байгаа боловч үйлдлийн систем рүү буцаж хяналт тавихаа больсон. Хэрэглэгчийн тодорхойлсон гар аргаар ажиллуулагч нь Expect-ийн өөрийн дотоод илгээгчийг ажиллуулдаг. Цаашид Хүлээгдэж буй тушаалуудыг ажиллуулах шаардлагагүй. Хэрэв та бусад Tcl өргөтгөлтэйгээр Expect ажиллаж байгаа бол энэ нь ашигтай байдаг. Одоогийн хэлмэрч (мөн Tk орчинд байгаа гол цонх) бусад Tcl өргөтгөлүүд цэвэрлэж болох юм. Хүлээгдэж буй гарцыг дахин дуудах (гэхдээ энэ нь тохиолдож болно), илгээгч нь дахин дамжуулалт хийхгүй.

Дахин гарсны дараа үйл явцын бүх холболт хаалттай байна. Уурхайг хаах үйл явцыг EOF болгон илрүүлэх болно. exit нь ердийн _exit (2) процедурын хийснээс өөр ямар ч үйлдэл хийгддэггүй. Тиймээс EOF-ийг шалгахгүй байх процессыг үргэлжлүүлэн ажиллуулж болно. (Янз бүрийн нөхцөл нь жишээлбэл, үржүүлгийн процессыг ямар дохио илгээж болохыг тодорхойлоход чухал байдаг боловч эдгээр нь системийн хамааралтай байдаг, ихэвчлэн exit (3) баримтжуулсан байдаг.) ​​Үргэлжлүүлэн ажиллаж байгаа процессууд init дамжуулагдах болно.

статус (эсвэл 0 утга зааж өгөөгүй бол) хүлээгдэж буй гарах гарцын статусаар буцаана. Скриптийн төгсгөлд хүрсэн тохиолдолд гарц нь далд ажилладаг.

exp_continue [-continue_timer]
Тушаалын exp_continue нь ердийнх шигээ буцаж ирэхээсээ илүүтэйгээр үргэлжлүүлэн ажилласаар байх болно. Анхдагчаар exp_continue timeout таймер сэргээгддэг . The -continue_timer тэмдэг нь тоолуурыг дахин эхлүүлэхээс сэргийлдэг. (Дэлгэрэнгүй мэдээллийг хүлээнэ үү.)

exp_internal [-f файл] утга
хэрэв утга нь тэгээс ялгаатай бол Дотоод Оношлогооны мэдээллийг дотооддоо илгээнэ. Хэрэв утга нь 0 байвал энэ гаралтыг идэвхгүй болгоно. Оношлогооны мэдээлэл нь хүлээж авсан тэмдэгт бүрийг багтаадаг ба одоогийн гаралтыг хэв маягаараа тааруулах оролдлого ордог.

Хэрэв нэмэлт файлыг нийлүүлсэн бол бүх хэвийн болон дибаг хийх гаралтыг тэр файлд (үнэ цэнэээс үл хамааран) бичдэг. Өмнө оношлох гаралтын файлыг хаасан байна.

-info туг exp_internal нь хамгийн сүүлийн үеийн бус аргументуудын тайлбарыг буцаахад хүргэдэг.

exp_open [args] [-i spawn_id]
Эхний үүлний id-тай тохирох Tcl файлын танигчийг буцаана. Файлыг танигчийг Tcl-ийн нээлттэй командаар нээсэн мэт ашиглаж болно. (Spawn ID ашиглахаа больсон байх ёстой.

The -leaveopen туг нь Хайлтын тушаалаар хандахын тулд заомтын id нээлттэй байна. Хүлээлгэх нь үүлний id дээр гүйцэтгэгдэнэ.

exp_pid [-i spawn_id]
Одоогийн үүсгэсэн процессод тохирох процес ID буцаадаг. Хэрэв -i тугийг ашиглаж байгаа бол pid өгөгдсөн өгөгдсөн id-тэй таардаг.

exp_send
нь илгээх нэр юм.

exp_send_error
нь send_error гэсэн нэртэй alias юм.

exp_send_log
нь send_log гэсэн нэртэй байна.

exp_send_tty
нь send_tty гэсэн alias юм.

exp_send_user
нь send_user гэсэн alias юм.

exp_version [[-exit] хувилбар]
скрипт нь хүлээгдэж буй одоогийн хувилбартай нийцэж байгаа эсэхийг баталгаажуулахад ашигтай байдаг.

Ямар ч аргументгүй бол, хүлээгдэж буй одоогийн хувилбар буцаагдах болно. Энэ хувилбар нь таны скриптэд кодчилогдож болно. Хэрэв та сүүлийн үеийн хувилбаруудын шинж чанарыг ашиглаагүй байгаа гэдгээ үнэхээр мэдэж байгаа бол өмнөх хувилбараа зааж өгч болно.

Текст нь цэгүүдээр тусгаарлагдсан гурван тооноос бүрдэнэ. Эхнийх нь гол дугаар юм. Хүлээгдэж буй хувилбарын хувьд бичсэн скриптүүд бараг мэдээж хэрэг ажиллахгүй болно. Үндсэн тоо нь тохирохгүй байвал exp_version нь алдааг буцаадаг.

Хоёр дахь нь бага тоо. Одоогийн хувилбараас илүү бага тоогоор хувилбарын скриптүүд зарим шинэ боломжоос хамаарч болох бөгөөд ажиллахгүй байж магадгүй юм. exp_version нь гол дугаарууд таарч байвал алдааг буцаана, гэхдээ скрипт нь бага тоо нь ажиллаж буй хүлээгдэж буй хэмжээнээс их байна.

Гуравдугаарт хувилбарын харьцуулалтад оролцдоггүй хэсэг. Гэхдээ хүлээгдэж буй програм хангамжийн түгээлтийг нэмэлт баримтжуулалт эсвэл оновчлол гэх мэт ямар нэгэн байдлаар өөрчилсөн тохиолдолд энэ нь нэмэгддэг . Энэ нь шинэ жижиг хувилбар бүр дээр 0-оор тохируулагдана.

-exit тугтай бол хувилбар нь хуучирсан тохиолдолд гарах алдаа, гаралтыг хэвлэнэ.

[[-opts] pat1 body1] ... [-opts] patn [bodyn]
үр дүнгийн аль нэг нь урвуу үйл явцын үр дүнтэй тохирч, тодорхой хугацаа өнгөрөх, эсвэл файлын төгсгөл ирдэг. Хэрвээ эцсийн бие хоосон бол түүнийг орхиогүй болно.

Хамгийн сүүлийн хүснэгтийн хүлээгдэж буй тушаалын загварууд нь бусад ямар ч загвараас шууд ашиглагддаг. Хамгийн сүүлд хүлээгдэж буй тушаалын загвараас өөр ямар ч загвар хэрэглэсний дараа шууд ашиглагддаг.

Хүлээгдэж буй бүх өгөгдөлд өгөх нэмэлт өгөгдлүүд нь нэгээс олон мөрийг шаарддаг бол бүх аргументууд нь мөр бүрийг урагш ослоос сэргээхээс зайлсхийдэг. Энэ тохиолдолд, ердийн Tcl орлуулалтууд нь хаалтанд байгаа хэдий ч тохиолдоно.

Хэрэв загвар нь eof гэсэн түлхүүр үг бол холбогдох байгууллага нь файлын төгсгөлд ажилладаг. Хэрвээ загвар нь хугацаа дууссаны дараа холбогдох байгууллага ажиллаж байна. Хугацаа хэтрэх түлхүүр үг ашиглаагүй бол цаг хугацааны хувьд далд утгатай үйлдлийг гүйцэтгэнэ. Анхдагч хугацаа нь 10 секунд байдаг боловч 30-аас 30-г "timeout 30" гэсэн тушаалаар тохируулж болно. Хязгааргүй хугацаа нь -1 утгаас тогтож болно. Хэрвээ загвар нь түлхүүр үг default бол холбогдох байгууллага нь хугацаа эсвэл файлын төгсгөлд гүйцэтгэгдэнэ.

Хэрэв загвар нь таарч байвал холбогдох байгууллага гүйцэтгэгдэнэ. биений үр дүнг буцаана (эсвэл ямар ч хэв маягийг тохироогүй хоосон мөрийг буцаана) хүлээнэ. Олон янзын хэв маягийн хувьд тохирох тохиолдолд эхний сонголтыг биеийг сонгоход хэрэглэнэ.

Шинэ гаралт бүрт энэ нь жагсаасан дарааллаар нь загвар бүртэй харьцуулагдана. Тиймээс, та урамшуулал гэх мэт баталгаатай сүүлчийн загвар гаргах замаар тэмцээний байхгүйг тест хийж болох юм. Шуурхай байх нөхцөлд та цаг хугацаа зарцуулах ёстой (хэрэв та гараар харилцан үйлдэл хийсэн бол үүнийг хийх ёстой).

Хээ нь гурван аргаар тодорхойлогддог. Анхдагчаар хэв маягийг Tcl-ийн мөрийн хослолтой адилаар зааж өгдөг. (Эдгээр загвар нь C-бүрхүүлийн тогтмол илэрхийлэлтэй төстэй байдаг. Энэ нь ихэвчлэн "glob" гэж нэрлэдэг). Үүнийг хийхийг хүсэхгүй байгаа тугуудыг өөрөөр нь тохируулах загварыг хамгаалахын тулд -gl тугийг ашиглаж болно. "-" тэмдгээр эхэлсэн аливаа загвар ийм аргаар хамгаалагдсан байх ёстой. ("-" эхэлсэн бүх мөрүүд ирээдүйд тохируулагдах болно.)

Жишээ нь, дараах хэсэг нь амжилттай нэвтрэлтийг хайдаг. ( Бөглөсөн нь скриптэд өөр газар тодорхойлсон процедур гэж тооцогддог.)

хүлээх {завгүй {завгүй байна \ n; exp_continue} хүчингүй "хүчингүй нууц үг" цуцлах хугацаа дуусах}

Дөрөв дэх хэв маягийг агуулж байх шаардлагатай. Учир нь энэ нь загвараас салангид зай үлдээдэг. Ижил үйлдэлтэй (3 дахь, 4-р зэрэг) үйлдлийг дахин хийх шаардлагатай. Энэ нь дэг журмын хэв маягийг хэрэглэснээр зайлсхийх боломжтой (доороос үзнэ үү). Бөмбөрцөг загварын хэв маягийг үүсгэх талаарх дэлгэрэнгүй мэдээллийг Tcl гарын авлагын хуудаснаас олж болно.

Regexp загварын хэв маяг нь Tcl-ийн regexp- ээр тодорхойлогдсон синтаксийг дагадаг. Тарваганы хэв маягийг туг барьсан байна. Өмнөх жишээг rpexp гэж бичиж болно:

хүлээх {завгүй {завгүй байна \ n; exp_continue} -re "бүтэлгүйтсэн" хүчин төгөлдөр бус нууц үг "цуцлах хугацаа дууссан байна}

Аль аль төрлийн хэв маягийг "харанхуй" гэж нэрлэдэг. Энэ нь хэв маягийг бүхэл мөртэй тохируулах шаардлагагүй гэсэн үг юм. Гэсэн хэдий ч мөр дууссаны дараа тоглолтын эхлэлийг төгсгөл болгож болно. Мөрийг эхэнд нь тааруулахын тулд ^ ашиглах ба $ төгсгөлд тааруулна. Хэрвээ та тэмдэгт мөр дуусахыг хүлээхгүй бол хариултууд нь үр хөврөлийн процессын давтамжтай давхцаж байгаа тул мөрний дунд үлдэх болно гэдгийг анхаараарай. Зөв үр дүнг гаргаж ирэхэд гаралт нь байгалийн бус юм. Тэгэхээр тэмдэгт мөрийн төгсгөлд тэмдэгтүүдийг яг тодорхойлж чадаж байвал $ ашиглахыг зөвлөж байна.

Олон редакторуудад ^ ба $ нь мөрийн эхлэл болон төгсгөлийг тааруулна. Гэхдээ, хүлээгдэж буй шугам нь чиглүүлээгүй учраас эдгээр тэмдэгтүүд нь хүлээгдэж буй тохирох буферд байгаа өгөгдлийг эхлэл болон төгсгөлтэй (шугамнаас эсрэгээр) тааруулдаг. (Мөн, "ходоодны хямрал" гэсэн тэмдэглэлийг доороос үзнэ үү.)

-ex туг нь "яг" тэмдэгт мөртэй тохирох загварыг үүсгэдэг. *, ^, Гэх мэт тайлбарууд хийгдээгүй (хэдийгээр ердийн Tcl конвенцууд хэвээр байх ёстой). Тохиромжтой загварууд нь байнгын бус байдаг.

Оролтын тэмдэгт нь гаралтын том үсгүүдийг үүсгэхийн тулд тэдгээрийн жижиг үсгүүд шиг байна. Загвар нь нөлөөлөлд өртөөгүй.

Гаралтыг унших явцад 2000 байтаас өмнөх байтыг хүчээр "мартсан" болно. Үүнийг match_max функцээр өөрчилж болно. (Хэтэрхий том утгууд нь хэвлэгчийг удаашруулж болно гэдгийг санаарай.) Хэрэв patand бол full_buffer бол тохирох биеийг тохируулсан бол match_max байт хүлээн авагдсан бөгөөд өөр ямар ч загвар таарахгүй байна. Full_buffer түлхүүр үгийг ашигладаг эсэхээс үл хамааран мартагдсан тэмдэгтүүдийг expect_out (буфер) гэж бичдэг.

Хэрэв patty гэдэг нь null гэсэн түлхүүр үг бөгөөд nulls зөвшөөрөгдөх ( remove_nulls гэсэн тушаалаар), ганц ASCII 0 таарч байвал харгалзах биеийг ажиллуулдаг. 0-н байтыг glob эсвэл regexp patterns-аар тохируулах боломжгүй байна.

Загварыг (эсвэл eof эсвэл full_buffer) тохирсоны дараа ямар ч тохирох болон өмнө нь тохироогүй гаралт variable expect_out (buffer) хадгалагдсан байдаг. 9 хүртэлх призабсийн субьектийн таарцууд нь хүлээгдэж буй хувьсагчид хүлээгдэж буй тоо (1, мөр) expect_out (9, мөр) хүртэл дамжин хадгалагдана . Хэрэв мөрийн тэмдгийг загвараас өмнө хэрэглэвэл 10 мөрийн эхлэх ба дуусах индексүүд ( lrange-д тохирох хэлбэрээр) хүлээгдэж буй хувьсагчид expect_out (X, эхлэх) болон expect_out (X, төгсгөл) X нь цифр нь буффер дэх дэд серверийн байрлалтай таардаг. 0 нь бүхэлд нь хэв маягаар тохирсон мөрүүдийг, бөмбөрцгийн хэв маягийн хувьд, түүнчлэн дэг журмын хэв маягийг бий болгодог. Жишээлбэл, хэрэв үйл явц "abcdefgh \ n" -н үр дүн гарсны дараа дараах үр дүн гарна:

"cd" гэж найдаж байна

Дараах мэдэгдлүүдийг гүйцэтгэсэн мэт байна:

expect_out (0, string) cd set expect_out (буфер) abcd

ба "efgh \ n" нь гаралтын буферт үлдээдэг. Хэрэв үйл явц "abbbcabkkkka \ n" гаралтыг үйлдвэрлэсэн бол дараах үр дүн гарна:

(b *). * (k +) "

Дараах мэдэгдлүүдийг гүйцэтгэсэн мэт байна:

expect_out (0, эхлэл) 1 set expect_out (0, string) bbbcabkkkk expect_out (1, start) 2 set expect_out (1, end) 3 set expect_out (1, string) bb set expect_out (2, эхлэл) 10 set expect_out (2, end) 10 set expect_out (2, string) k set expect_out (buffer) abbbcabkkkk

ба "a \ n" нь гаралтын буферт үлдээдэг. "*" (Ба -re ". *" Загвар) нь гаралтын буферийг процессоос гаралгүйгээр ямар ч нэмэлт өгөгдлийг устгана.

Ердийн үед тохирсон гаралтыг Expect-ийн дотоод буферуудаас хасах болно. Үүнийг- шилжүүлгийн тугтай загварыг угтвараас сэргийлж болно. Энэ туг нь туршилт хийхэд ялангуяа ашигтай байдаг (мөн туршилт хийхэд "-гүй" гэсэн товчлолыг ашиглаж болно).

Тохирох гаралтыг (эсвэл eof эсвэл full_buffer) холбоотой өгөгдөлийн сан нь expect_out (spawn_id) дотор хадгалагдана.

Timeout-ийн туг нь одоогийн тушаалын мөрөнд timeout хувьсагчийн утгыг ашиглахын оронд дараах утгыг timeout гэж ашигладаг.

Анхдагч тохируулгаараа хэв маяг нь одоогийн процессоос гаралттай таардаг бөгөөд гэхдээ -i туг нь нэртэй spawn_id жагсаалтаас гарсан үр дүнг дараах (дараагийн -i хүртэл ) тааруулахыг зааж өгдөг. Spawn_id жагсаалт нь spawn_ids-ийн spied_ids тусгаарлагдсан зай эсвэл spawn_ids ийм жагсаалтад хамааралтай хувьсагч байж болох юм.

Жишээ нь, дараах жишээ нь $ proc2 нэрээр заагдсан spawn_id-с одоогийн процессоос, эсвэл "завгүй", "амжилтгүй", эсвэл "буруу нууц үг" -ийг хүлээж байна.

хүлээх {-i $ proc2 завгүй {завгүй байна \ n; exp_continue} -re "бүтэлгүйтсэн" хүчин төгөлдөр бус нууц үг "цуцлах хугацаа дууссан байна}

Дэлхий даяар хувьсагчийн аливаа хувьсагчийн утгыг одоогийн тушаалын бүх бусад -i тугуудын нэрээр дурдагддаг spawn_ids-тай хэвшмэл байдлаар ашиглаж болно. Холбогдох загваргүй (өөрөөр хэлбэл дараагийн -i нь дараагийн followed -i) -аас -I flag -аас spawn_id нь any_spawn_id-тай холбоотой хүлээх тушаалын аль нэг өөр хэлбэрт зориулагдан хийгддэг.

-i туг нь глобал хувьсагчийг зааж өгч болох бөгөөд энэ тохиолдолд өгөгдлийн сан нь өгөгдлийн сангуудын жагсаалтыг унших боломжтой байдаг. Хувьсагч өөрчлөгдөх бүрт дахин уншдаг. Энэ нь тушаал биелүүлэх үед I / O эх үүсвэрийг өөрчлөх боломжийг олгодог. Илэрхийлсэн дүрсүүд ийм аргыг "шууд бус" агуулгын зураг гэж нэрлэдэг.

Бутлах, үргэлжлүүлэх зэрэг үйлдлүүд нь ердийн аргаар ажиллахыг хянах хяналтын бүтцийг (өөрөөр хэлбэл, proc ) үүсгэдэг. Тушаалын exp_continue нь ердийнх шигээ буцаж ирэхээсээ илүүтэйгээр үргэлжлүүлэн ажилласаар байх болно.

Энэ нь тодорхой гогцоонд орохоос зайлсхийх, эсвэл давтан таамаглахыг хүлээхэд тустай юм. Дараах жишээ нь rlogin-г автоматжуулахад хуваагдсан хэсгүүдийн нэг хэсэг юм. Exp_continue нь rlogin нууц үгийг асуух үед хоёр дахь хүлээгдэж буй мэдэгдлийг бичихээс сэргийлж чаддаг (дахин хүлээх мөрийг хайх).

$ {host} дээрх $ нууц үг ($ хэрэглэгчийн хувьд): $ expect_user -re "(. *) \ n" send_user "\ n" send "$ expect_out (1, string) \ n "exit} eof {send_user" холболт амжилтгүй болсон байна: $ expect_out (буфер) "exit} -" дахин $ асуугаарай}

Жишээлбэл, дараах фрагмент нь хэрэглэгчийн хувьд аль хэдийн бүрэн автоматжуулсан харилцааг удирдан чиглүүлэхэд тусалж болох юм. Энэ тохиолдолд терминалыг түүхий горимд оруулна. Хэрэв хэрэглэгч "+" дээр дарвал хувьсагч нэмэгдэнэ. Хэрэв "p" дарагдсан бол хэд хэдэн өгөгдлийг процесс уруу илгээж магадгүй бөгөөд магадгүй "i" нь хэрэглэгчид процесс уруу холбогдож, скриптээс хяналтыг үр дүнтэй хулгайлдаг. Ямар ч тохиолдолд exp_continue нь одоогийн үйлдлийг гүйцэтгэсний дараа одоогийн хүлээгдэж буй хэв загварыг үргэлжлүүлэхийг зөвшөөрдөг.

stty raw -echo expect_after {-i $ user_spawn_id "p" {send "\ r \ r \ r"; exp_continue} "+" {incr foo; exp_continue} "i" {харилцах; exp_continue} "гарах" exit}

Анхдагчаар, exp_continue timeout таймер сэргээгдэнэ . Exp_continue нь -continue_timer тугтай дуудагдсан үед таймер дахин асахгүй .

expect_after [expect_args]
Хүлээгдэж буй болон хүлээгдэж буй_ хожмын хүлээх мөрүүд нь хүлээгдэж буй загварыг ашиглаж байгаа тохиолдолд хүлээгдэж буй загвартай адилаар биелүүлэхээр хүлээнэ . Хүлээгдэж буй тушаалын талаар дэлгэрэнгүй мэдээллийг харна уу.

expect_background [expect_args]
Хүлээгдэж буй өгүүлэмжтэй ижил утгатай боловч буцаж ирдэг. Шинэ оролт ирэхэд загварыг шалгана. Загварын хугацаа болон анхдагчаар хүлээгдэж буй горимд утгагүй -background утгагүй бөгөөд чимээгүйхэн устгагдана. Үгүй бол, expect_background тушаал нь хүлээгдэж буй хүлээгдэж буй хүлээгдэж буй хүлээгдэж буй хүлээгдэж буй хүлээгдэж буй хүлээгдэж буй хүлээгдэж буй хүлээгдэж буй хүлээгдэж буй хүлээгдэж буй хүлээгдэж буй загварыг хүлээж авдаг .

Хэдийгээр expected_background үйлдлийг үнэлэх үед ижил дугаар үүсгэх суурь боловсруулалтыг хориглосон байна. Үйлдэл дуусмагц суурь боловсруулалтыг хориглодог. Дэвшилтэт боловсруулалтыг хааж байхад нь нэг зүйлийг үүсгэх id (урьдчилан харах) боломжтой байна.

Expect_background-г хориглож байхад хүлээх боломжгүй юм. Жишээ нь target_background-г хүлээж авна гэж найдаж байна. Зориулалтын горимыг хүлээх горимгүй горимыг хүлээж буй горимыг тохируулах чадваргүй гэж үздэг.

expect_before [expect_args]
Хүлээгдэж буй өгүүлэмжтэй ижил утгатай боловч буцаж ирдэг. Ижил дискний id-тай хамгийн сүүлийн үеийн expect_before-ийн загвар хослолын дараах тушаалуудыг шууд нэмж өгсөн байна. Хэрэв загвар нь таарч байвал үүнийг хүлээх командаар зааж өгсөн юм шиг, түүнчлэн холбогдох байгууллага нь хүлээх командын хүрээнд гүйцэтгэгддэг. Хэрэв хүлээгдэж буй хүлээгдэж буй хүлээгдэж буй хүлээгдэж буй хүлээгдэж буй хүлээгдэж буй загвар нь хүлээгдэж буй загварын хүлээгдэж буй горимыг ашиглаж байвал

Хэрвээ ямар ч загвар тодорхойлогдоогүй бол ямарваа загварын үсгэн кодыг шалгадаггүй.

Ai -a flag -ээр дарагдаагүй бол expected_before тушаалыг ажиллуулж байсан үед тодорхойлогдсон зөөвөрлөлтийн id-ийн эсрэг хүлцэл (загвар нь таарахгүй үед).

-info тугийг өмнө нь хүлээж байна гэж таамагладаг . Анхдагчаар, энэ нь одоогийн үүсгүүрийн id-д тайлагнадаг. Нэмэлт өгөгдлийн ID тодорхойлолтыг өгөгдсөн өгөгдлийн id-д өгч болно. Жишээлбэл

expect_before -info -i $ proc байна

Ихэнхдээ нэг өгөгдсөн ID тодорхойлолтыг өгч болно. Төрийн далбаа шууд бус шууд бус тодорхойлолтоос ирдэг шууд үүлдэрийг шууд дардаг.

Илүүдлийн ID тодорхойлолтонд биш харин "-all" гэсэн туг нь "бүх мэдээллийг агуулдаг" -info "-г үүсгэнэ.

-info тугны гаралтыг expected_before_forum гэсэн хувьсагч болгон ашиглаж болдог.

expect_tty [expect_args]
гэхдээ энэ нь / dev / tty (өөрөөр хэлбэл хэрэглэгчийн товчлуурын дараалал) тэмдэгтүүдийг уншдаг. Анхдагчаар унших нь чанасан горимд хийгддэг. Тиймээс шугамууд тэдгээрийг харахын тулд эргэж харахын тулд эргэж ирэх ёстой. Үүнийг stty -ээр өөрчилж болох юм (доорх stty тушаалыг үзнэ үү).

expect_user [expect_args]
гэхдээ энэ нь stdin-ийн тэмдэгтүүдийг уншдаг (өөрөөр хэлбэл хэрэглэгчийн гарны товчлуурууд). Анхдагчаар унших нь чанасан горимд хийгддэг. Тиймээс шугамууд тэдгээрийг харахын тулд эргэж харахын тулд эргэж ирэх ёстой. Үүнийг stty -ээр өөрчилж болох юм (доорх stty тушаалыг үзнэ үү).

салаа
шинэ процесс үүсгэнэ . Шинэ үйл явц нь одоогийн хүлээгдэж буй үйл явцын яг хуулбар юм. Амжилтанд хүрэхийн тулд 0 нь шинэ (хүүхдийн) процесс руу буцаж, хүүхдийн үйл явцын процессийн ID дугаарыг parent процесс руу буцаана. Алдаа дутагдал (байнгын нөөц дутагдалтай, жишээлбэл, swap зай, санах ой), салаа нь эцэг эх процесс руу -1, хүүхэд процесс үүсгэгддэггүй.

Үйлдвэрээс гарсан процессууд exit тушаалаар дамжин гардаг . Дахин боловсруулсан процессууд нь бүртгэлийн файлд бичихийг зөвшөөрдөг. Хэрэв та ихэнх үйл явцуудад дибаг хийх эсвэл бүртгэлийг идэвхгүй болгохгүй бол үр дүн нь эргэлзээтэй байж магадгүй юм.

Зарим тохиргоонууд нь олон уншигч, зохиолчдоос хоцрогдож болох юм. Ийнхүү үржүүлгийн процессын өмнө хамгийн сайн аюулгүй байдаг.

харилцан [string1 body1] ... [stringn [bodyn]]
нь одоогийн процессийг хэрэглэгч рүү хянах боломжийг олгодог бөгөөд ингэснээр товчлуурууд нь одоогийн процесс уруу илгээгддэг бөгөөд одоогийн процессийн stdout болон stderr буцаагдах болно.

String-body хосыг аргумент гэж зааж өгч болох бөгөөд энэ тохиолдолд тохирох мөр оруулсан үед биеийг гүйцэтгэх болно. (Анхдагчаар мөр нь одоогийн процесс руу илгээгддэггүй.) Хэрвээ эцсийн байгууллага байхгүй бол орчуулагчийн тушаалыг гаргана.

Хэрэв харилцан хамааралтай бүх өгүүлбэрд өгөх нэмэлт өгөгдлүүд нь нэгээс олон мөрийг шаардвал, бүх аргументууд урагш эгнээнүүдтэй мөр бүрийг дуусгахаас зайлсхийнэ. Энэ тохиолдолд, ердийн Tcl орлуулалтууд нь хаалтанд байгаа хэдий ч тохиолдоно.

Жишээ нь дараах тушаал нь дараах мөрийн биетийн хосуудтай харилцан үйлчилдэг: ^ Z дарагдсан үед, Expect нь түр зогсоосон. ( Тохируулгын туг нь терминалын горимыг сэргээдэг.) ^ А товчлуурыг дарахад хэрэглэгчийн "та-control-A" гэж бичсэн бөгөөд процесс нь ^ A уруу илгээгддэг. $ Дарагдсан үед хэрэглэгч он сарыг нь үздэг. ^ ^ Товчийг дарахад гарах гарцыг хүлээнэ . Хэрэв "foo" оруулагдсан бол хэрэглэгч "бар" гэж хардаг. ~~ дарагдсан үед Expect interpreter харилцан ажиллах болно.

CTRLZ \ 032 харилцан үйлдэл {-reset $ CTRLZ {exec kill -STOP [pid]} \ 001 {send_user "та хяналтын A-г бичсэн -A \ n"; "$ 001"} $ {send_user "огноо бол [цаг формат [цаг секунд]]."} \ 003 exit foo {send_user "бар"} ~

Тэмдэгт мөрийн хослолын хувьд мөр нь тэдгээр нь аргументуудаар жагсаагдсан дарааллаар таардаг. Зарим хэсэг нь хоорондоо тохирч байгаа мөрүүдийг үлдсэн хэсгийг хүлээж байгаа үед одоогийн процесс руу илгээгддэггүй. Хэрвээ тэмдэгтүүд нь таарах боломжгүй болж байгаа бол тэмдэгт мөрийн хэсэг нь өөр тоглолтыг эхлүүлэх боломжгүй процесс уруу илгээгдэх болно. Ийнхүү хэсэгчлэн тааруулах оролдлого нь амжилтгүй болсон тохиолдолд хэсэгчилсэн заалтуудын дэд мөрүүд нь сүүлд таардаг.

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

"Flag" тэмдэгт мөрийг дэг журмын загварын хэв маягаар тайлбарлахыг шаарддаг. Энэ тохиолдолд тохирох дэд хэсгүүд хувьсагчийн хүлээгдэж буй хувьсагч дахь хүлээгдэж буй хүлээгдэж буй хүлээгдэж буй хүлээгдэж буй тохиргоотой ижилхэн харилцан үйлчлэлцдэг . -index туг нь дэмжигдсэн байдаг.

Нэгдмэл загвар нь файлын төгсгөлд гүйцэтгэгддэг үйлдлийг танилцуулдаг. Илэрхий хэлбэрийн загвар нь -output тугыг дагаж мөрдөх бөгөөд хэрэв гарах үр дүн гарч ирвэл алдаа илрэх болно. Анхдагч эерэг үйлдэл нь "буцах", ингэснээр харилцан үйлчлэлийг зөвхөн EOF дээр буцаана.

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

Жишээлбэл, дараах мэдэгдэлийг цагт ямар нэгэн зүйл бичээгүй хэрэглэгчдийн автозамыг ашиглаж болох боловч байнгын системийн мэдэгдлүүд байнга гардаг.

харилцан ажиллах - $ user_spawn_id timeout 3600 return-output \ $ spawn_id

Хэрвээ загвар нь null гэсэн түлхүүр үг бөгөөд nulls (зөвшөөрөгдсөн устгагчийн тушаалаар) байвал нэг ASCII 0-тэй тохирч байвал харгалзах биеийг ажиллуулдаг. 0-н байтыг glob эсвэл regexp patterns-аар тохируулах боломжгүй байна.

Товчлол -iwrite- тай загварыг урьдчилан таамаглах нь хувьсагч хоорондын харилцан үйлчлэлийг (spawn_id) загварыг (эсвэл эерэг) тааруулахын тулд spawn_id гэж тохируулах болно.

Бутлах, үргэлжлүүлэх зэрэг үйлдлүүд нь ердийн аргаар ажиллахыг хянах хяналтын бүтцийг (өөрөөр хэлбэл, proc ) үүсгэдэг. Гэсэн хэдий ч шалтгаан нь харилцагчийг дуудахдаа эргэж очихын тулд буцаахын тулд, inter_return шалтгаан нь харилцагчийн дуудлагад буцах шалтгаан болдог. Жишээ нь, "proc foo" харилцааг дуудсан бол дараа нь action_an_return -ийг гүйцэтгэсэн proc foo-г буцаана. (Энэ нь дуудлагын хэлмэрчтэй харилцах харилцах үйлдлийг харилцан ярих үед харилцан үйлдлийг үргэлжлүүлэхэд хүргэдэг бол inter_return нь харилцагчийг дуудагч руу нь буцааж өгөхөд хүргэнэ гэсэн үг юм.)

Харилцах явцад түүхий горимыг ашиглан бүх тэмдэгтийг одоогийн процесс руу дамжуулж өгдөг. Хэрэв одоогийн процесс нь ажлын хяналтын дохионуудыг барьж чадахгүй бол зогсоох дохио (анхдагчаар ^ Z) илгээсэн тохиолдолд зогсох болно. Үүнийг дахин эхлүүлэхийн тулд үргэлжлүүлэн дохиог илгээх ("kill -CONT" гэх мэтээр). Хэрэв та ийм процессыг SIGSTOP уруу үнэхээр илгээхийг хүсэж байгаа бол (эхлээрэй ^ Z) эхлээд csh-г эхлээд үр дүнг нь програмыг ажиллуулж үзээрэй. Нөгөөтэйгүүр, хэрэв та SIGSTOP-г өөрөө хүлээхээр илгээмээр байгаа бол эхний дуудлага хийх орчуулагч (магадгүй зугтах тэмдэгт ашиглаж), дараа нь ^ Z дарна уу.

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

Хурдны хувьд, үйлдэл нь анхдагчаар түүхий горимд ажиллана. -Тохируулах тэмдэг нь терминалыг харилцан ажиллахаас өмнө (горимд, чанаж болгосон горим) өмнө нь горимдоо дахин тохируулж болно. Mode горимд шилжсэнээр тэмдэглэсэн тэмдэгтүүд алдагдаж болзошгүйг санаарай (зарим систем дээрх терминалын драйверийг буруу зүйл). Ашиглах цорын ганц шалтгаан бол таны үйлдэл болгосон горимд ажиллахаас хамаарна.

The -echo туг нь тэмдэгт уншиж байгаа тул тэдгээрийг үүсгэсэн процесс уруу буцаах дараах тэмдэгтийг тааруулах тэмдэгтүүдийг илгээдэг. Хэрэглэгч хэсэгчлэн бичсэн загвараас санал хүсэлтийг харах шаардлагатай үед энэ нь ашигтай байж болох юм.

Хэрвээ хэв маяг давтагдаж байгаа боловч эцэст нь таарахгүй бол тэмдэгтүүд үргэжлэх процесс уруу илгээгддэг. Хэрэв үржүүлгийн процесс тэдгээрийг давтаж байвал хэрэглэгч хоёр тэмдэгтийг харах болно. -echo нь хэрэглэгчид загвараа бүрэн дуусгах магадлал багатай тохиолдолд л тохиромжтой юм. Жишээ нь дараах хэсэг нь rftp, рекурсив-ftp скрипт юм. Энэ нь ~ g, ~ p, эсвэл ~ l -д нэвтрэхийг хүссэн хэрэглэгчийн хувьд рекурсээр одоо байгаа санг олж авах, оруулах эсвэл жагсаана. Эдгээр нь ердийн ftp тушаалуудаас хол бөгөөд хэрэглэгч алдаа биш бусад зүйлсийг 'ямар ч гэсэн бичихгүй байх магадлалтай бөгөөд аль ч тохиолдолд энэ үр дүнг үл тоомсорлож магадгүй юм.

харилцан үйлдэл хийх {-echo ~ g {getcurdirectory 1} -echo ~ l {getcurdirectory 0} -echo ~ p {putcurdirectory}}

-nobuffer туг нь тэмдэгт уншиж байх үед гаралтын процессд хамаарах тэмдэгтүүдийг илгээдэг.

Програмыг буцааж сэргээхийг зөвшөөрөх үед энэ нь ашигтай байдаг. Жишээлбэл, хүн хэн залгахыг хянахын тулд дараах аргыг хэрэглэж болно (Hayes-style modem). "Atd" бүрт скрипт мөрийн үлдсэн хэсгийг бүртгэдэг.

[log in ") (. *) \ r" буцах $ log "[цаг формат [цаг секунд]]: залгагдаж $ interact_out (1, мөр)"} харилцах -nobuffer "

Харилцах явцад log_user-ийн өмнөх хэрэглээг орхигдуулсан байна. Тухайлбал, харилцан ажиллах нь хэрэглэгчийг сохроор харилцан ажиллахыг хүсэхгүй байгаагаас гаралтыг нь (стандарт гаралт руу илгээсэн) нэвтрэхийг шаарддаг.

-o туг нь одоогийн процессийн гаралтад дараах түлхүүр-хос хосыг үүсгэдэг. Жишээ нь, telnet session-ийн үед хүсээгүй тэмдэгтүүдийг илгээдэг хостуудтай ажиллахад энэ нь ашигтай байж болох юм.

Анхдагчаар харилцан ажиллах нь хэрэглэгч stdin бичих, хүлээгдэж буй процессийн тухай stdout-г уншихыг хүлээж байна гэж хүлээж байна. -u туг (хэрэглэгчийн хувьд) нь аргументын нэрээр процесс гэж нэрлэнэ (энэ нь үүсгэсэн байх ёстой).

Энэ нь хоорондоо хамааралгүй хоёр процессыг тодорхой давталтгүйгээр ашиглах боломжтой болгодог. Дебаг хийхэд туслахын тулд оношилгоо хийхийг үргэлж хүлээнэ (эсвэл бүртгэх болон дибаг хийх мэдээллийн хувьд stdout). Үүний шалтгаанаар interpreter тушаал нь stdin-аас интерактив байдлаар унших болно.

Жишээ нь, дараах фрагмент нь нэвтрэлтийн процессыг үүсгэдэг. Дараа нь хэрэглэгчийг дуудаж (харуулахгүй), эцэст нь хоёрыг холбоно. Мэдээжийн хэрэг нэвтрэх үйл явцад оролдлого хийдэг. Жишээ нь, бүрхүүл нь хэрэглэгчийн бүртгэл, нууц үгийг нийлүүлэхгүйгээр ажиллах боломжтой болно.

нэвтрэх оролт нэвтрүүлэх $ spawn_id spawn tip модем # залгах руу буцах хэрэглэгчийн # холболтын хэрэглэгч рүү нэвтрэх харилцан ажиллах-$ нэвтрэх

Гаралт олон процесс руу илгээхийн тулд -output тугаар хийгдсэн prefix id жагсаалтыг жагсаана. Бүтээгдэхүүний багцуудын бүлэг оруулах оролтыг -putput тушаалаар урьдчилан бэлтгэсэн өгөгдөлийн жагсаалтаар тодорхойлж болно. (Both-input болон -output тушаалууд нь хүснэгтийн дагуу -i тугтай харилцах харилцаандаа утга учиргүй бол -i тугтай адил хэлбэрээр жагсаалтуудыг авч болно.) Дараах бүх тугнууд болон мөрүүд (эсвэл хэв маягууд) оролтын тэмдэг гарч ирнэ. Хэрэв no-output-тэй бол -putput нь "-put $ user_spawn_id -output" гэсэн утгатай. (Үүнтэй адилаар -aputгүй байхгүй хэв маягтай). Хэрэв нэг -холболт тодорхойлогдвол энэ нь $ user_spawn_id-ыг дардаг. Хэрвээ хоёрдахь гаралтыг тодорхойлсон бол энэ нь $ spawn_id-г дардаг. Нэмэлт-гар-талын тугуудыг зааж өгч болно.

Хоёр implied оролтын процессууд нь анхдагчаар $ spawn_id болон $ user_spawn_id гэж тодорхойлогдсон байна. Хэрэв -iput -н туг нь -output тугтай гарч ирвэл энэ процессийн тэмдэгтүүд нь устгагдана.

-i туг нь одоо байгаа spawn_id -ийг орлуулахыг оруулдаг. A -i туг нь -o flag гэсэн утгатай.

Шууд бус үрийн махыг ашиглан харилцан үйлчилж буй процессуудыг өөрчилж болно. (Шууд бус зөөвөрлөлтийг хүлээх командын хэсэгт тайлбарласан) Шууд бус үйлдлийн санг -i, -u, -putput эсвэл -output тугуудын хамт зааж өгч болно.

орчуулагч [арлууд]
Хэрэглэгчид Expect and Tcl командуудын хувьд харилцан ажиллах боломжтой болдог. Тушаалын үр дүнг хэвлэв.

Бутлах, үргэлжлүүлэх зэрэг үйлдлүүд нь ердийн аргаар ажиллахыг хянах хяналтын бүтцийг (өөрөөр хэлбэл, proc ) үүсгэдэг. Хэдийгээр тайлбарлагч нь интерфераторыг дуудагч рууаа буцах шалтгаан болдог бол inter_return нь дуудагч дээр буцах шалтгаан болдог. Жишээлбэл, "proc foo" нэртэй интерферчер гэж нэрлэгддэг бол дараа нь proc_eu буцаах болно. Бусад тушаал нь хэлмэрчийг шинэ тушаалуудын талаар өдөөлтийг үргэлжлүүлэхэд хүргэдэг.

Анхдагчаар, хүлээх мөр нь хоёр бүхэл тоог агуулна. Эхний тоо нь үнэлгээний стекийн гүнийг тодорхойлно (өөрөөр хэлбэл, Tcl_Eval гэж хэдэн удаа дуудагдсан). Хоёр дахь бүхэл тоо нь Tcl түүхэн тодорхойлогч юм. Тушаал хүлээх аргыг "prompt1" гэж нэрлэх процедурыг тодорхойлж өгдөг бөгөөд энэ нь буцах утга нь дараагийн хүлээх мөр болдог. Хэрэв мэдэгдэл нь нээлттэй ишлэл, пайз, хаалт эсвэл хаалттай бол хоёр дахь хүлээх мөр (анхдагчаар "+>") шинэ мөрөнд олгогдоно. Хоёр дахь хүлээх мөрийг "prompt2" гэж нэрлэх процедурыг тодорхойлох замаар тохируулж болно.

Хэлмэрч байх үед дуудагч нь түүхий горим ашиглаж байсан ч болгосон горимыг ашигладаг.

Хэрэв stdin хаалттай бол, interpreter нь -of далбааг ашиглаагүй л бол тайлбарлагч буцаж ирэх болно. Энэ тохиолдолд дараачийн нэмэлт өгөгдлүүдийг дууддаг.

log_file [args] [[-a] файл]
Хэрвээ файлын нэр өгсөн бол log_file нь тухайн сессд (тэр цагаас эхлэн) тэмдэгтийг бичих болно. log_file нь аргумент өгөгдөөгүй бол бичлэгийг зогсооно. Аль ч өмнөх бүртгэлийн файл хаалттай байна.

Файлын нэрийн оронд Tcl файлын таниулагч -open эсвэл -leaveopen тугуудыг ашиглан өгч болно. Энэ нь spawn тушаалын нэгэн адил юм. (Дэлгэрэнгүйг дэлгэрэнгүй мэдээллийг үзнэ үү.)

-auto-ийн туг нь log_user тушаалаар дарагдсан байх ёстой.

Анхдагчаар, log_file тушаал нь бүртгэлийг хааж, нэг сесс дотор олон удаа эргүүлж чаддаг байхын тулд log_file тушаал нь хуучин файлууд руу залгахад нэмдэг . Файлуудыг таслахын тулд -нэмэгийн тугийг ашиглана уу.

-info туг нь хамгийн сүүлийн үеийн бус аргументуудын тайлбарыг буцааж log_file болгож байна.

log_user -info | 0 | 1
Анхдагчаар, send / хүлээх мөрийг stdout уруу бүртгэнэ (хэрэв нээлттэй бол logfile). Stdout уруу бүртгэх нь "log_user 0" гэсэн тушаалаар хаагдах ба "log_user 1" -ээр дахин идэвхждэг. Бүртгэлийн файлд бүртгүүлэх нь өөрчлөгдөхгүй.

-info туг нь хамгийн сүүлийн үеийн бус аргументуудын тайлбарыг буцаахад хүргэдэг.

match_max [-d] [-i spawn_id] [size]
хүлээгдэж буй буферын хэмжээг (байтаар) тодорхойлж өгдөг. Ямар ч аргументгүй бол одоогийн хэмжээ буцаагдах болно.

-d тугийн хамт анхдагч хэмжээ нь тохируулагдсан байдаг. (Анхдагч анхдагч нь 2000 байна.) -i тугтай хамт named spawn id-ийн хэмжээтэй тохируулагдсан бол, хэрэв энэ нь одоогийн процессийн хувьд тохируулагдсан байдаг.

overlay [- # spawn_id] [- # spawn_id] [...] програм [args]
хөтөлбөрийн аргуудыг "дуусгавар болох" хүлээгдэж буй хөтөлбөрийн оронд гүйцэтгэнэ. Нүцгэн гипний аргумент нь тушаалын нэрний өмнө нуман бүрхүүлийг идэвхжүүлсэн бүрхүүл шиг forces. Бүх spawn_ids нь аргументуудаас өөр хаалттай байна. Эдгээр нь нэртэй файл тодорхойлогчид руу тэмдэглэгдсэн байдаг.

Spawn_ids нь шинэ програмд ​​зориулж файлын танигчдад тэмдэглэгдсэн байна. Жишээлбэл, дараах шат нь шатар гүйж, одоогийн үйл явцаар хянагдах боломжийг олгодог - шатрын мастер гэж хэлнэ.

overlay -0 $ spawn_id -1 $ spawn_id -2 $ spawn_id шатар

Энэ нь "харилцан ажиллах -u" -ээс илүү үр дүнтэй боловч, хүлээгдэж буй үйл явцыг хянах боломжгүй болсон тул программчлагдсан харилцан үйлчлэл хийх чадварыг золиосолж байдаг.

Хяналтын терминал байхгүй байна. Тиймээс, хэрэв та стандарт оролтыг салгах эсвэл арилгавал ажлын байрны хяналт (бүрхүүл, нэвтрэх, гэх мэт) ажиллах програм зөв ажиллахгүй байна.

parity [-d] [-i spawn_id] [утга]
үржүүлгийн процессын үр дүнгээс гарган авах эсвэл хасагдсан эсэхийг тодорхойлно. Хэрэв утга нь тэг бол, паритыг хуулж авбал өөрөөр хэлбэл хуулбарлагдаагүй болно. Ямар ч утгагүй утгатай бол одоогийн утга буцаагдах болно.

-d тугийн хамт анхдагч parity утга тогтоодог. (Анхдагч анхдагч нь 1, өөрөөр хэлбэл, parity нь хасагдаагүй байна.) -i тугтай хамт parity утга нь заагдсан spawn id-д тохируулагдсан бөгөөд өөрөөр хэлбэл энэ нь одоогийн үйл явцын хувьд тохируулагдана.

remove_nulls [-d] [-i spawn_id] [утга]
Зөвшөөрөгдөх процессын үр дүнгүүд нь хэвийн тохирсон эсвэл хүлээгдэж буй хүлээгдэж буй хүлээгдэж буй хувьсагчид эсвэл харилцан_хугацанд хадгалагдахаас өмнө null буюу хасагдсан эсэхийг тодорхойлно. Хэрэв утга 1 бол null-г хасна. Хэрэв утга 0 байвал nulls хасагдана. Ямар ч утгагүй утгатай бол одоогийн утга буцаагдах болно.

-d тугийн хамт анхдагч утга тогтоодог. (Анхдагч анхдагч нь 1, өөрөөр хэлбэл, nulls-г хасна.) -i тугтай хамт named spawn id-д зориулж утга өгөгдсөн бол, хэрэв энэ нь одоогийн процессийн хувьд тохируулагдана.

Null орхигдож байгаа эсэх, хүлээгдэж байгаа үр дүн нь null байтыг бүртгэл болон stdout уруу бүртгэнэ.

илгээх [файлын мөрүүд]
Одоогийн үйл явцын мөрийг илгээ. Жишээ нь, тушаал

"Сайн уу"

Тэмдэглэл илгээх, helloworld одоогийн процесс руу илгээдэг. (Tcl нь printf- like тушаал ( хэлбэршүүлэлт гэж нэрлэгддэг) бөгөөд дурын цогц бүтэц агуулж болно.)

Тэмдэглэлүүдийг шууд илгээсэн мөртлөө buffered оролттой програмууд буцах тэмдэгтийг илгээх хүртэл тэмдэгтүүдийг уншихгүй. Буцаах тэмдэгтийг "\ r" гэж тэмдэглэв.

Туг нь дараагийн аргументыг flag гэх мэтээр string гэж тайлбарлах болно. Аль ч мөр нь тугийг яг таг харуулах эсэхээс үл хамааран өмнө нь "-" болно. Энэ нь санамсаргүйгээр тугуудыг харуулсан хувьсагч мөрүүдийг үүсгэх найдвартай механизмтай байдаг. ("-" эхэлсэн бүх мөрүүд ирээдүйд тохируулагдах болно.)

-i туг нь нэртэй spawn_id уруу илгээгдэхийг зарлах болно. Хэрэв spawn_id бол user_spawn_id бөгөөд терминал нь түүхийн горимд байгаа бол уг мөрөнд шинэ мөрүүд нь терминалын горимд байсан шиг харагдана. Энэ текст нь энэ орчуулгыг идэвхгүй болгодог.

-булын туг нь null тэмдэгтүүдийг илгээдэг (0 байт). Анхдагчаар, нэг null илгээсэн. Бүхэл тоонууд ямар хэмжээгээр илгээхийг заахын тулд бүхэл тоо -null- г дагаж болно.

Хөдөлгүүрийн далбаа нь эвдрэлийн нөхцлийг бүрдүүлдэг. Энэ нь spawn ID нь "spawn -open" -ээр дамжуулан онгойлгосон tty төхөөрөмжийг зааж өгсөн бол утга гарна. Хэрвээ та tip гэх мэт процессыг үүсгэсэн бол завсарлага үүсгэх tip-ийн концепцийг ашиглах хэрэгтэй.

Гаралт нь "аажмаар илгээгдэнэ" гэсэн тушаалыг гаргана. Ингэснээр компьютер нь ижил буфферийг хэзээ ч давтахгүй байхаар бүтээсэн оролтын буфферийг хэвийн нөхцөлд оруулдаг нийтлэг нөхцөл байдлаас зайлсхийдэг. Энэ гаралтыг хоёр элементийн жагсаалтыг авдаг "send_slow" хувьсагчийн утгаас хянадаг. Эхний элемент атомаар илгээх байттын тоог тодорхойлно. Хоёрдахь элемент нь атомын илгээсэн байх ёстой секундын тоог тодорхойлно. Жишээ нь, "send_slow {10 .001} set" нь илгээсэн 10 тэмдэгт бүрийн хооронд 1 миллисекундтай мөрүүдийг илгээхийн тулд "send -s" -ийг хүчээр илгээх болно.

-h туг нь гар бичмэлийг яг л бичдэг шиг илгээдэг (зарим талаараа). Хүмүүсийн адил саатал гарч ирдэг. (Энэ алгоритм нь Weibull тархалт дээр энэ програмд ​​тохирох өөрчлөлтүүд дээр үндэслэсэн). Энэ гаралт нь "send_human" хувьсагчийн утгыг хянаж, таван элементийн жагсаалтыг авдаг. Эхний хоёр элемент нь секундын дотор тэмдэгтийн дундаж завсар завсар юм. Эхнийх нь анхдагчаар ашиглагддаг. Хоёр дахь нь үгийн төгсгөлийн үед ашиглагддаг бөгөөд эдгээр шилжилтийн үед хааяа тохиолддог давтамжийг дүрслэнэ. Гурав дахь параметр бол хувьсах хэмжигдэхүүн юм .1 нь маш их хувьсамтгай, 1 нь харьцангуй хувьсамтгай, 10 нь байнга өөрчлөгдөж байдаг. Хязгаар нь хязгааргүй 0 байна. Сүүлийн хоёр параметр нь завсрын хамгийн бага ба хамгийн их хугацаа юм. Хамгийн бага ба хамгийн их нь хамгийн сүүлд хэрэглэгддэг ба эцсийн байдлаар "клип". Хамгийн бага болон дээд хэмжээний клип хангалттай үнэтэй бол эцсийн дундаж нь өгөгдсөн дундажаас ялгаатай байж болно.

Жишээ нь, дараах тушаал нь хурдан, тогтмол бичдэгийг эмхэтгэдэг:

set_human set {.1 .3 1 .05 2} send -h "Би өлсөж байна.

Дараах нь гуйвшны дараа илүү тохиромжтой байж болох юм:

set_human {.4 .4 .2 .5 .5 100} -h "Goodd party lash night!"

Алдааг засаж залруулахгүй нөхцлүүдийг тохируулахгүй байхыг санаарай. Гэхдээ алдааг засах, илгээх аргумент дээр засвар хийж болно.

Хүчний гаралт, хүний ​​загварын гаралтад зориулсан null тэмдэгтүүдийг илгээж байгаа тэмдэгтүүд нь харилцан хамааралгүй юм. Зөвхөн сүүлд зааж өгсөн зөвхөн хэрэглэнэ. Цаашилбал, null тэмдэгтүүдийг илгээх эсвэл завсарлахын тулд мөрнөөс хувьсагч заагдаагүй мөр байдаг.

Эхнийх нь хүлээгдэж буй процесс руу илгээхийг урьдчилан таамаглах нь зүйтэй юм. процесс эхлэхийг хүлээх болно гэж хүлээх болно. Ялангуяа, эхний илгээмж үйл явцыг эхлүүлэхээс өмнө дуусдаг бол таны өгөгдлийг үл тоомсорлох эрсдэлтэй. Интерактив хөтөлбөрүүд нь эхний хүлээх мөрийг санал болгодоггүй нөхцөлд та өмнө нь:

# Хэрхэн эвдэх талаар хакеруудын талаар сануулахаас зайлсхийхийн тулд # энэ систем нь гадаад нууц үгийг асуухгүй. # Шуурхай telnet дуусгахын тулд гүйцэтгэгчийн хувьд 5 секунд хүлээх very.secure.gov унтах 5 Нууц үг илгээх

exp_send нь илгээх нэр юм . Хэрэв та Expectk эсвэл Tk орчинд өөр өөр хувилбар ашиглаж байгаа бол илгээхийг Tk-ээс бүхэлд нь өөр зорилгод ашиглана. exp_send нь орчны хоорондох нийцтэй байдлыг хангадаг. Ижил төстэй alias -г бусад Expect-ийн бусад илгээх команд өгнө.

send_error [мөрүүд]
гаралт нь одоогийн процесс биш харин stderr уруу илгээгдэхээс бусадтай адил юм.

send_log [-] тэмдэгт мөр
Энэ нь зөвхөн илгээсэн лог файл уруу илгээгддэг ( log_file- ийг үзнэ үү). Хэрэв ямар ч бүртгэлийн файл нээлттэй байгаа бол аргументууд орхигддог.

send_tty [-суралт] мөр
тушаал нь гаралт нь одоогийн процессоос илүү / dev / tty уруу илгээгдэхээс бусад тохиолдолд илгээхтэй адил юм.

send_user [мөрүүд]
нь гаралт нь одоогийн процессоос илүү stdout уруу илгээгдэхээс бусадтай адил юм.

унтах секунд
скриптийг өгөгдсөн тооны секундэд унтах шалтгаан болдог. Хоёрдугаарт аравтын тоо байж болно. Хэрэв та Expectk-ийг ашиглаж байгаа бол тасалдал (мөн Tk-ийн үйл явдлууд) боловсруулагдсан байхад унтах болно.

spawn [args] program [args]
"програмын аргуудыг" ажиллуулж буй шинэ процессыг үүсгэдэг. Түүний stdin, stdout болон stderr нь Expect-тэй холбогдож, тэдгээр нь бусад Expect тушаалуудыг уншиж, бичиж болно. Холболт нь ойрхон тасалдсан эсвэл процесс нь файлын танигчийн аль нэгийг хаадаг бол.

Процесс эхэлснээр эхэлсэн үед хувьсагчийн spawn_id нь тухайн процессыг заадаг тодорхойлогч руу тавина. Spawn_id-ийн тайлбарласан процесс нь "одоогийн процесс " гэж тооцогддог. spawn_id нь уншиж эсвэл бичиж болох бөгөөд энэ нь ажлын хяналтыг өгдөг.

user_spawn_id нь тодорхойлогчтой докторын багтдаг глобал хувьсагч юм. Жишээлбэл, spawn_id энэ утгад тохируулсан үед expect_user шиг ажиллах горим хүлээнэ .

I error_spawn_id нь тодорхойлогч агуулсан дерверийн хувьсагч бөгөөд энэ нь стандарт алдааг илэрхийлдэг. Жишээлбэл, spawn_id энэ утгад тохируулагдсан үед send_error шиг ажиллах горимуудыг илгээдэг .

tty_spawn_id нь descriptor агуулсан global хувьсагч бөгөөд / dev / tty гэсэн нэртэй байна. Хэрэв / dev / tty байхгүй (cron, at эсвэл batch скрипт гэх мэт) байхгүй бол tty_spawn_id нь тодорхойлогдоогүй байдаг. Үүнийг дараахь байдлаар шалгаж болно:

хэрэв {[info vars tty_spawn_id]} {# / dev / tty exists} else {# / dev / tty байхгүй # cron, batch,

spawn нь UNIX процессийн дугаарыг буцаадаг. Хэрэв ямар ч процесс хийгээгүй бол 0 буцаадаг. Хувьсагч spawn_out (боол, нэр) pty боолын төхөөрөмжийн нэрийг тохируулна.

Анхдагчаар spawn тушаалын нэр болон аргументуудыг давтана. -noecho далбаа үүнийг хийхээсээ өмнө зогсоосон.

-холбогдох туг нь консолийн гаралтыг үүсгэгддэг процесс уруу чиглүүлдэг. Энэ нь бүх систем дээр дэмжигддэггүй.

Дотоод хэлбэл spawn нь pty-г хэрэглэгчийн tty-ийн нэгэн адилаар эхлүүлсэн. Энэ тохиргоог бүхлээр нь "sane" (stty (1) дагуу) болгодог. Хэрэв хувьсагч stty_init хувьсагчийг тодорхойлсон бол илүү нарийн тохиргооны хувьд stty аргументуудын хэлбэрээр тайлбарлагдана. Жишээ нь "stty_init raw set" нь цаашлаад түүхийн горимд эхлэх процессийн терминалыг үүсгэх болно. -notycopy нь хэрэглэгчийн tty дээр тулгуурлан эхлүүлэлтийг алгасдаг. -ноттининит нь "sane" -г эхлүүлэхийг орлоно .

Ихэнхдээ спиртэд гүйцэтгэх хугацаа бага байдаг. Хэрэв та ихээхэн хэмжээний цагийг гаргаж авахыг анзаарсан бол энэ нь битүүмжлэгдсэн байна. Олон тооны туршилтуудыг алив үйл явцтай холбохоос зайлсхийхийн тулд алгоритм дээр ажилладаг. (Эдгээр нь 10-аас доошгүй секунд тутамд 10 секунд зарцуулагдана.) -D сонголттойгоор хүлээгдэж буй хүлээгдэж буй урсгал нь сондгой төлөвт олон ptys-тэй тулгардаг эсэхийг харуулна. Хэрэв та эдгээр холболтуудтай холбогдсон процессуудыг устган алж чадахгүй бол таны цорын ганц сонголт нь дахин ачаалахад хүргэж магадгүй юм.

Хэрвээ програм нь амжилтгүй болчихвол програм ажиллуулах боломжгүй (жишээ нь, програм байхгүй үед) алдааны мэдэгдэл дараагийн харилцан үйлчлэлээр буцаж эсвэл програмын ажиллуулж байгаа мэтээр програмын алдаа мессежийг гаргаж ирэх болно. Энэ зан үйл нь үрийн төмсний хэрэглээний үр дагавар юм. Дотооддоо спирал үүсгэх ба дараа нь spawn_id -ээр дамжуулан харилцах замаар харилцан тохиролцох процессыг эх сурвалжтай холбох аргагүй.

-open туг нь дараагийн аргументийг Tcl файлын танигч хэлбэрээр тайлбарладаг (өөрөөр хэлбэл, нээлттэйгээр буцаж ирдэг). Дараа нь spawn id нь үргэжлэх процесс мэт ашиглагдаж болно. (Файл танигчийг ашиглахаа больсон байх ёстой.) Энэ нь та түүхий төхөөрөмжүүд, файлууд, дамжуулах хоолойг pty ашиглан хийлгүйгээр процесс үүсгэхэд ашигладаг. 0 нь буцаж ирдэг. Тарьсан үйл явцтай холболт хаалттай байх үед Tcl файлын танигч байна. -тушопен туг нь -туслопэнаас ялгаатай нь нээсэн файлыг танигчийг нээхээс хамгаалдаг .

-pty туг нь pty -г нээхэд хүргэдэг боловч процесс үүсгэгдсэнгүй . 0 нь буцаж ирдэг. Spawn_id ердийн тохируулагдсан байна.

Хувьсагчийн spawn_out (боол, fd) нь pty боолын харгалзах файлын танигч тохируулагдсан байна. Энэ нь "хажуу тийш" ашиглан хаагдах боломжтой.

Тэмдэгт дохио нь үүсгэгч процессод дохио өгөхийг нэрлэнэ . Үгүй бол дохионууд нь анхдагч зан авирыг авах болно. Дохио нь занарын командаар нэрлэгдсэн бөгөөд дохио болгон тусдаа тугийг шаарддаг.

мөрийн түвшин
Дараах илэрхийллүүдийг гүйцэтгэхийн өмнө хэвлэгддэг. (Tcl-ийн ул мөр команд нь хувьсагчийг мөрддөг.) Түвшний дуудлага давтамжийг хэрхэн дагаж мөрдөхийг харуулдаг. Жишээлбэл, дараах тушаалыг ажиллуулснаар эхний дөрвөн түвшний дуудлагыг дагаж байгаа боловч үүнээс бага байна.

expect -c "strace 4" script.exp

-info тугийн мөргөлдөөн нь хамгийн сүүлийн үеийн бус аргументуудын тайлбарыг буцаахад хүргэдэг.

stty args
нь гадны stty тушаалын адил терминал горимыг өөрчилдөг.

Анхдагчаар, хяналтын терминал хандаж байна. Бусад холболтууд нь "Тухайн статусыг буцааж авах хүсэлтийг тушаалын үр дүнгээр хандаж болно.Хэрэв статус хүсээгүй бөгөөд хяналтын терминалыг хандаж байгаа бол түүх болон цуурай шинж чанаруудын өмнөх статусыг дараачийн хэлбэрээр буцааж болно тушаалын дагуу хэрэглэдэг.

Жишээ нь түүхий буюу боловсруулсан нэмэлт өгөгдлүүд нь терминалыг түүхий горимд тавьдаг. Аргументууд- жигнэсэн буюу чанаж болгосон нь терминалыг чангаар болгосон горимд тавьдаг. Echo болон -echo аргументууд нь терминалыг echo болон noecho горимд тавьдаг.

Дараах жишээ нь давтамжийг түр зуур зогсоохыг харуулж байна. Үүнийг автоматаар скриптүүдэд ашиглаж болно. (Доорх EXPECT HINTS доорх дэлгэрэнгүй хэлэлцүүлгийг үзнэ үү.)

stty -echo send_user "Нууц үг:" expect_user -re "(. *) \ n" тохируулах нууц үг $ expect_out (1, string) stty echo

системийн аргументууд
нь sh (1) гэж оруулснаар args тушаалыг терминалаас тушаалын маягаар бичсэн шигээр өгдөг. Бүрхүүл дуусах хүртлээ хүлээнэ гэж найдаж байна. Sh нь буцах төлвийг буцааж төлөх статусыг зохицуулахтай ижил аргаар зохицуулдаг.

Стив болон stdout скриптийг дахин чиглүүлдэг гүйцэтгэгчээс ялгаатай нь систем нь дахин чиглүүлэлт хийгддэггүй (тэмдэгт мөрөөр харуулсанаас бусад). Тиймээс / dev / tty уруу шууд ярих ёстой програмуудыг ашиглах боломжтой байдаг. Үүнтэй ижил шалтгаанаар системийн үр дүн бүртгэлд бүртгэгддэггүй.

timestamp [args]
цагийн хуваарийг буцаана. Ямар ч аргументгүйгээр эрт үеэс хойшхи секундын тоо буцаж ирдэг.

-format туг нь буцаасан мөрийг оруулсан боловч POSIX дүрмийн дагуу strftime дүрмийн дагуу хийгдсэн орлуулалттай. Жишээ нь% a товчилсон ажлын өдрийн нэрээр (өөрөөр хэлбэл, SAT) солигдоно. Бусад нь:

% a товчилсон ажлын өдрийн нэр% бүтэн ажлын өдрийн нэр% b сар нэрлэсэн товчлол% B бүтэн сарны нэр% c огноо-цагийн байдлаар: Wed Oct 6 11:45:56 Сарын өдрийн 1993% өдөр (01-31% H цаг (00-23)% I цаг (01-12)% j өдөр (001-366)% m сар (01-12)% M минут (00-59)% p am буюу pm% S second (00-61) % 1 өдөр (1-7, Даваа долоо хоногийн эхний өдөр)% U долоо хоног (00-53, эхний ням гарагт долоо хоногийн эхний өдөр)% V долоо хоног (01-53, ISO 8601 стиль)% w өдөр (0- 6)% W долоо хоног (00-53, эхний Даваа нь долоо хоногийн эхний өдөр)% x огноо-цаг: Даваа 6 сарын 6 1993% X цаг: 23:59:59% y жил (00-99) % Y жил: 1993% Z цагийн бүс (эсвэл тодорхойлогдоогүй бол юу ч байхгүй) %% нь нүцгэн хувь тэмдэг

Бусад% нь тодорхойгүй байна. Бусад тэмдэгтүүд нь дамжуулагдаагүй дамжуулагдах болно. Зөвхөн С локал дэмжигдсэн байна.

-soutonds flag нь эрин үеийг форматлах эх сурвалж болгон ашиглахаас хойш хэд хэдэн секундыг танилцуулдаг. Үгүй бол одоогийн цаг ашиглаж байна.

-gmt туг нь цагийн бүсийг GMT цаг ашиглан ашиглах боломжтой. Төрийн далбаагүйгээр орон нутгийн цагийн бүс ашигладаг.

занга [[тушаал] дохио]
Өгөгдсөн тушаалыг өгөгдсөн өгөгдсөн дохионы ирээдүйд хүлээлгэн өгөхөд хүргэдэг. Тушаалыг дэлхийн хэмжээнд хамарна. Хэрэв команд байхгүй бол дохионы үйлдэл буцаагдах болно. Хэрэв команд SIG_IGN тэмдэгт мөр байвал дохио хэрэгсэхгүй болно. Хэрэв тушаал нь SIG_DFL гэсэн мөрийг илэрхийлсэн бол дохионууд нь системийн анхдагч утгад хүргэнэ. Сигнал нь нэг дохио эсвэл дохионы жагсаалт юм. Дохио нь тоон болон тэмдэглэгээ тус бүрээр тодорхойлогдоно (3). "GIG" угтварыг орхиж болно.

Ямар ч аргумент (эсвэл аргумент-тоо) байхгүй бол одоогийн байгаа занга тушаалын дохионы дугаарыг буцаадаг.

-code туг тушаал нь анхнаасаа ажиллаж эхэлмэгц Tcl тушаал буцаж ирэх кодын оронд командын буцах кодыг ашигладаг.

-interp туг нь тушаалыг үнэлэх тушаалыг тухайн хэлэгчийг ажиллуулах үед ажиллуулах үед орчуулагч идэвхтэйгээр ашигладаг.

Нэр-нэр нь одоо байгаа занга тушаалын дохионы нэрийг буцаах trap тушаалыг үүсгэдэг.

-max туг нь урсгалын тушаалыг тохируулж болох хамгийн том дохионы дугаарыг буцаахад хүргэдэг.

Жишээ нь "trap {send_user" Ouch! Тушаалыг "SIGINT" гэж хэвлэнэ. Хэрэглэгч бүр дээр дарахад ^ C.

Анхдагчаар, SIGINT (ихэвчлэн ^ C товчоор үүсгэх боломжтой) болон SIGTERM шалтгаан нь гарах болно. Энэ нь хүлээгдэж эхэлмэгц анхдагчаар үүссэн дараахь хураагууртай холбоотой юм.

урхин минын гарц {SIGINT SIGTERM}

Хэрэв та дибаг хийгээг эхлүүлэхийн тулд -D тугийг ашигладаг бол SIGINT нь интерфэйсийн дибаг хийгчийг эхлүүлэхийн тулд дахин тодорхойлогддог. Энэ нь дараахь хурцадмал байдалтай холбоотой юм.

trap {exp_debug 1} SIGINT

Дифференциал trap нь орчны хувьсагч EXPECT_DEBUG_INIT-ийг шинэ урсгалын командаар тохируулж өөрчилж болно.

Мэдээжийн хэрэг та хоёрын аль аль нь таны скриптэд занга оруулахыг мэдэж болно. Ялангуяа, хэрэв танд өөрийн "занга SIGINT" гарах бол энэ нь дибаг хийх урхинд дарагдана. Хэрэв та хэрэглэгчдийг дибаг хийгч рүүгээ орохгүй байхыг хүсч байвал энэ нь ашигтай байдаг.

Хэрэв та өөрийн SIGINT дээр өөрийн гэсэн зангагаа тодорхойлохыг хүсэж байгаа боловч ажиллуулж байхдаа дибаг хийгч уруу урхинд оруулбал дараахийг ашиглана:

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

Өөрөөр, та бусад дохиог ашиглан дибаг хийгч уруу залуурдаж болно.

Энэ нь SIGALRM-ийн хувьд үүнийг дотооддоо ашиглахад ашигладаг тул занга нь танд үйлдэл хийхийг зөвшөөрөхгүй. Хуваах команд SIGALRM нь SIG_IGN рүү (ignore) тогтоодог. Дараа дараалсан коммандын үеэр та үүнийг идэвхгүй болгох хүртэл үүнийг дахин тохируулж болно.

Дэлгэрэнгүйг дохио (3) -аас үзнэ үү.

хүлээх [args]
үржүүлгийн процесс дуусах хүртэл (эсвэл нэрлэгдээгүй байгаа өнөөгийн процесс ) дуусах хүртэл үргэлжилнэ.

Ерөнхийдөө хүлээх мөр нь дөрвөн бүхэл тооны жагсаалтыг буцаадаг. Эхний бүхэл тоо нь хүлээгдэж буй үйл явцын pid юм. Хоёр дахь бүхэл тоо нь харгалзах зоосны дугаар юм. Гурав дахь бүхэл тоо нь -1 бол үйлдлийн системийн алдаа эсвэл 0 бол өөрөөр хэлбэл. Гурав дахь бүхэл тоо 0 байсан бол дөрөв дэх бүхэл тоо нь үржигдэх процессоор буцаагдах статус юм. Гурав дахь бүхэл тоо -1 бол дөрөв дэх бүхэл тоо нь үйлдлийн системийн тохируулсан утга. Global errorCode хувьсагчийг бас тохируулдаг.

Буцах утгын төгсгөлд хүлээгдэж буй нэмэлт элементүүд гарч ирнэ. Тав дахь нэмэлт элемент нь мэдээллийн ангиллыг тогтооно. Одоогийн байдлаар энэ элементийн хувьд боломжит утга нь CHILDKILLED бөгөөд энэ тохиолдолд дараагийн хоёр утга нь C-загварын сигналын нэр ба богино хэмжээний тайлбар юм.

-i туг нь нэртэй spawn_id ( процесс ID биш) хүлээх процессийг зарлаж байна. SIGCHLD зохицуулагчийн дотор spawn id -1-ийг ашиглан үржүүлгийн процессыг хүлээх боломжтой.

Зөвшөөрөгдөөгүй туг нь түр хүлээгдэж буй хүлээх заалттай хүлээх мөрийг буцаахад хүргэдэг. Үйл явц гарах (сүүлд), энэ нь тодорхой хүлээх шаардлагагүйгээр автоматаар алга болно.

Хүлээх командыг "-i -1" аргументыг ашиглан процессыг түр хүлээнэ үү. Хэдийгээр үржүүлгийн процессыг ашиглахаас ялгаатай нь энэ тушаалыг ямар ч үед гүйцэтгэж болно. Ямар процесс явагдаж байгааг хянах ямар ч хяналт байхгүй. Гэхдээ буцах утгыг процессийн ID шалгах боломжтой.

LIBRARIES

Хүлээгдэж буй скриптүүдийг хоюулгүй номын сангаар автоматаар мэдэж байх болно. Эдгээрийг exp_libec болон exp_exec_library хувьсагчдад нэрлэгдсэн сангуудаар тодорхойлдог. Аль аль нь бусад скриптүүдийн ашиглаж болох utility файлуудыг агуулах зориулалттай болно.

exp_library нь архитектур-бие даасан файл агуулдаг. exp_exec_library нь архитектураас хамааралтай файлуудыг агуулдаг. Таны системээс хамаарч хоёулаа хоёулаа хоосон байна. Файлын оршин тогтнох $ exp_exec_library / cat-buffers нь анхдагчаар / bin / cat buffers эсэхийг тодорхойлно.

PRETTY-PRINTING

Хэвлэх скриптийг нэлээн хэвлэхэд зориулагдсан. Хүлээгдэж буй түгээлтийн хувилбартай зөв тохируулагдсан гэж үзвэл дараахийг ашиглана:

vgrind -lexpect файл

Жишээ нь

Энэ нь эрэгтэй хуудсыг тайлбарлахын тулд бүгдийг хэрхэн бүтээх талаар олон зүйл харагдахгүй байна. Хүлээгдэж буй түгээлтийн жишээ директорын жишээнүүдийг уншихыг хичээе. Эдгээрийн зарим нь жинхэнэ програмууд юм. Зарим нь зарим төрлийн техникийг энгийнээр дүрсэлдэг бөгөөд мэдээжийн хэрэг, хосууд зүгээр л шуурхай суух болно. INSTALL файл нь эдгээр програмуудын хурдан тоймтой байдаг.

Хүлээгдэж буй баримт бичгүүд (SEE ALSO-г үзнэ үү) нь бас ашигтай байдаг. Зарим баримтууд нь хүлээгдэж буй өмнөх хувилбаруудад тохирсон синтаксийг ашигладаг байхад дагалдах баримтжуулалт нь хүчин төгөлдөр хэвээр байгаа бөгөөд энэ хүний ​​хуудаснаас илүү дэлгэрэнгүй мэдээлэлтэй байдаг.

Кацагат

Өргөтгөлүүд нь Expect командын нэртэй мөргөлдөж болзошгүй. Жишээлбэл, илгээхийг Tk-ээс бүхэлд нь өөр зорилгын дагуу тодорхойлно. Тиймээс, Expect тушаалуудын ихэнх нь "exp_XXXX" гэж бас байдаг. "Exp", "inter", "spawn" болон "timeout" гэсэн эхлэлээс хувьсагч болон хувьсагчид alias байхгүй байна. Хэрэв та хүрээлэн буй орчнуудыг хооронд нь энэ нийцтэй байх шаардлагатай өргөтгөсөн тушаалын нэрийг ашиглана уу.

Хүлээгдэж буй үр дүн нь нэлээд либерал үзэлтэй байдаг. Тухайлбал, хүлээгдэж буй програмын тусгай тушаалаар унших хувьсагчдыг эхлээд орон нутгийн хамрах хүрээнээс хайх бөгөөд хэрэв олдохгүй бол дэлхийн хэмжээнд хамрах болно. Жишээлбэл, энэ нь таны хүлээж буй хэрэглэдэг бичээс бүрийн процедурт "global timeout" тавих хэрэгцээг хангаж өгдөг. Нөгөө талаас, бичсэн хувьсагч нь орон нутгийн хамрах хүрээнд үргэлж байдаг ("global" тушаал гаргаагүй бол). Энэ шалтгаан нь хамгийн түгээмэл тохиолддог асуудал юм. Процедураас гадна, spawn_id байхгүй болсон тул түүвэрлэлтийн процесс нь хайгуулын үр дүнд хүрэх боломжгүй болсон. Иймэрхүү процедурт "global spawn_id" нэмнэ үү.

Хэрэв та олон нийтэд таниулах чадварыг идэвхжүүлж чадахгүй бол (өөрөөр хэлбэл таны систем сонгох (BSD *. *), Санал асуулга (SVR> 2) эсвэл ямар нэг зүйлийг дэмждэггүй), хүлээгдэж буй үр дүн нь нэг удаад ганц үйл явцыг удирдах боломжтой. Энэ тохиолдолд spawn_id- г тохируулахыг оролдох хэрэггүй бөгөөд ажиллуулж байгаа процесс ажиллаж байх үед процессуудыг гүйцэтгэх хэрэггүй юм. Цаашилбал, та олон процессоос (нэг хэрэглэгчийг оролцуулаад) нэгэн зэрэг нэгэн зэрэг хүлээж авах боломжгүй болно.

Терминал параметрүүд нь скриптүүдэд их нөлөөтэй байж болно. Жишээлбэл, хэрэв скрипт нь давтагдахыг хайхаар бичсэн бол, хэрэв эргүүлгийг унтраасан бол буруу ажиллуулах болно. Энэ шалтгааны улмаас анхны терминал параметрүүдийг анхдагчаар нь хүлээнэ. Харамсалтай нь энэ нь бусад програмуудад таагүй зүйл хийх боломжтой юм. Жишээлбэл, emacs бүрхүүл "ердийн" зураглалыг өөрчлөхийг хүсч байна: шинэ мөрүүд нь шинэ мөрүүдийг шинэ мөрүүд рүү залгаж, echoing идэвхгүй болдог. Энэ нь emac-ийг оролтын мөрийг засварлах боломжийг олгодог. Харамсалтай нь, хүлээлт нь үүнийг таах боломжгүй юм.

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

Нэг жагсаалтад багтсан аргументууд ( хүлээгдэж буй хувилбарууд болон харилцан хамаарал ) нь командуудыг нэг аргумент эсвэл олон жагсаалтад байгаа эсэхээ шийддэг. Жагсаалт нь үнэндээ олон тооны агуулагдсан \ хэдийгээр тэдгээрийн хоорондох хоосон зай бүхий тэмдэгттэй бол геуристик нь зөвхөн амжилтгүй болдог. Энэ нь хангалтгүй байж болох юм, гэвч "-nobrace" гэсэн аргумент нь ганц аргументыг нэг аргументаар зохицуулахын тулд ашиглаж болно. Энэ нь машинаас үүссэн Хүлээгдэж буй кодтой холбоотой байж болох юм. Үүний нэгэн адил, -холболт нь нэг аргументыг олон загвар / үйлдлээр зохицуулахыг шаарддаг.

АЛДААНУУД

Энэ нь "сексийн" хөтөлбөр ("Smart EXec" эсвэл "Send-EXPect") гэсэн нэртэй байхыг үнэхээр хүсч байсан боловч сайн мэдрэмж (эсвэл магадгүй Пуританизм) давамгайлж байв.

Зарим систем дээр бүрхүүлийн бүтээгдхүүн дээр тэнд хандаж чаддаггүй гэх гомдол байдаг. Энэ нь таны систем Expect does not know гэсэн tty хяналтыг олж авах механизмтай гэсэн үг юм гэсэн үг юм. Энэ юу болохыг олж мэдээд энэ мэдээллийг над руу илгээ.

Ultrix 4.1 (хамгийн наад зах нь эндээс хамгийн сүүлийн хувилбарууд) 1000000-аас дээш хугацаатай байхыг 0-той тэнцүү гэж үзнэ.

Дижитал UNIX 4.0A (мөн магадгүй бусад хувилбарууд) та SIGCHLD зохицуулагчийг тодорхойлсон бол ptys-г хуваарилахаас татгалздаг. Дэлгэрэнгүй мэдээллийг буцаах хуудаснаас үзнэ үү.

IRIX 6.0 нь pty-ийн зөвшөөрлүүдийг зөвөөр зохицуулдаггүй бөгөөд хэрэв хүлээгдэж байгаа хүн өмнө нь ашиглагдаж байсан pty хуваарилахыг оролдвол энэ нь амжилтгүй болох болно. IRIX 6.1 руу шинэчлэх.

TERM тохируулагдаагүй бол Telnet (зөвхөн SunOS 4.1.2-ээр шалгагдсан). Энэ нь TERM тодорхойлохгүй cron, cgi скриптүүдийн доор асуудал юм. Тиймээс та ямар төрлийн ямар нэг хамааралгүй хамааралтайгаар тодорхой зааж өгөх ёстой. Энэ нь зүгээр л зүйл дээр тохируулах ёстой! Ихэнх тохиолдлуудад дараах хангалттай үнэ цэнэтэй байж болох юм.

set env (TERM) vt100

Зөвлөмж (зөвхөн BSDI BSD / OS 3.1 i386 -ээр шалгагдсан) SHELL ба HOME тохируулагдаагүй тохиолдолд өлгөгдсөн. Энэ нь орчны хувьсагчдыг тодорхойлдоггүй cron , cgi скриптүүдийн доор асуудал юм. Тиймээс та тэдгээрт ямар төрлийн хамааралгүй хамааралтайгаар тодорхой зааж өгөх ёстой. Энэ нь зүгээр л зүйл дээр тохируулах ёстой! Ихэнх тохиолдлуудад дараах хангалттай үнэ цэнэтэй байж болох юм.

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

Зарим шийдлүүд нь процесс файлын тодорхойлогчийг хаасаны дараа цөм нь 10-15 секундын дараа ямар ч уншаагүй гаралтыг хаядаг (бодит тоог хэрэгжилтээс хамаардаг). Иймээс програмыг хүлээж байна

Өдөр бүр унтах 20 хүлээнэ

амжилтгүй болох болно. Үүнээс зайлсхийхийн тулд интерактив бус програм ажиллуулахаасаа өмнө ажиллуулах гэх мэт. Иймэрхүү нөхцөл байдал нь бодит байдалтай байдаг ч бодит байдал дээр би иймэрхүү зан үйлийн улмаас жинхэнэ интерактив програмын эцсийн үр дүнг алдах нөхцөл байдлыг хэзээ ч үзээгүй.

Нөгөө талаас, Cray UNICOS ptys процесс файлын тодорхойлогчийг хаасны дараа шууд уншигдах гаралтыг шууд хаядаг. Би үүнийг Cray-т мэдээлсэн бөгөөд тэд засвар хийхээр ажиллаж байна.

Заримдаа tty интерфэйс UART тохиргоонуудыг өөрчлөх эсвэл эхлүүлэх / зогсох битүүдийг хайж олохын тулд baud хувьсагчийг өөрчлөх үед хариу хүлээх болон хариу өгөх хооронд зарим саатал шаардагдана. Ихэнхдээ энэ бүхэн хоёр дахь эсвэл хоёр унтахын тулд унтах явдал юм. Илүү хүчирхэг арга бол тоног төхөөрөмжийг орц хүлээн авахад бэлэн болтол оролдох явдал юм. Дараах жишээ нь хоёулаа стратеги ашигладаг:

илгээх "хурд 9600 \ r"; унтах 1 хүлээгдэж буй {timeout {send "\ r"; exp_continue} $ шуурхай}

trap -code нь Tcl-ийн үйл явдлын хүрдэнд унтах гэх мэт ямар ч тушаалаар ажиллахгүй. Асуудал нь үйл явдлын хүрдний үед Tcl нь async үйл явдлын зохицуулагчаас буцах кодыг хаядаг. Зам засварын чанар бол занга кодонд туг хийх явдал юм. Дараа нь командыг даруй шалгана (өөрөөр хэлбэл унтах).

Expect_background тушаал нь цаг хугацааны үл хамаарах аргументуудыг үл тоомсорлодог бөгөөд хугацаа нь тодорхойгүй байдаг.

& # 34; EXPECT HINTS & # 34;

Хүлээгдэж буй зүйлийн талаар хоёр зүйл байдаг. Энэ хэсэг нь эдгээрийн заримыг нь хэдэн зөвлөмжөөр шийдвэрлэхийг хичээдэг.

Ердийн хүлээгдэж буй асуудал бол shell prompt-ийг хэрхэн таних. Эдгээр нь өөр өөр хүмүүс болон өөр өөр бүрхүүлүүд өөр өөрөөр өөрчилөгддөг тул, түргэвчилсэн мэдэгдлээр танигдаагүй автоматжуулалтыг автоматаар ажиллуулах нь хүндрэлтэй байж болно. Үндэслэлтэй зарчмаар хэрэглэгчдийн EXPECT_PROMPT орчны хувьсагчдад тэдгээрийн хүлээх мөрийг (тухайлбал, төгсгөлд нь) илэрхийлсэн тогтмол илэрхийлэлийг хадгалах явдал юм. Доорх кодыг ашиглаж болно. Хэрэв EXPECT_PROMPT байхгүй бол код зөв ажиллах боломжтой байх боломжтой хэвээр байна.

# prompt # catch prompt # set prompt $ env (EXPECT_PROMPT)} expect -re $ хүлээгдэж байна

Таныг хүлээж байгаа зүйлүүдийн төгсгөлийг багтаасан хүлээлтийг бичихийг би та бүхнээс хүсч байна. Энэ нь бүх зүйлийг үзэхээсээ өмнө асуултад хариу өгөх боломжоос зайлсхийдэг. Үүнээс гадна, та бүх асуултыг асуухаасаа өмнө асуултанд хариулж чаддаг бол, хэрэв та эрт өгвөл, таны хариулт нь асуултны дунд давтагдсан мэт харагдах болно. Өөрөөр хэлбэл, үр дүнд нь яриа хэлцэл нь зөв байж болох юм.

Ихэнх хүлээх мөрүүд нь төгсгөлд нь зайны тэмдэгт ордог. Жишээ нь, ftp-ийн хүлээх хугацаа нь 'f', 't', 'p', '>' ба. Энэ хүлээх мөрийг тааруулахын тулд эдгээр тэмдэгт бүрийг бүртгэх ёстой. Энэ нь хоосон зайг оруулахгүй байх нийтлэг алдаа юм. Хоосон хоосон үсгээр нь хийнэ үү.

Хэрэв та X * хэлбэрийн загварыг ашиглавал, * нь X-н төгсгөлөөс хүлээн авсан бүх гаралтыг хамгийн сүүлд авсан зүйлтэй нь тааруулна. Энэ нь хялбархан сонсогдож болох боловч "сүүлчийн зүйл хүлээн авсан" гэсэн хэллэг нь компьютерийн хурд болон I / O-ийн цөм болон төхөөрөмжийн драйвераас хамаарч өөр өөр байж болно.

Ялангуяа хүмүүс ихэнх програм нь нэг удаад нэг мөр гарган авахад програмын гарцыг асар том хэсгүүд (атомын) -д хүрэхийг хардаг. Үүнийг таамаглаж байгаа бол, * өмнөх догол маягийн загварт зөвхөн * одоогийн мөрийн төгсгөлд таарч болох боловч илүү их байх шиг байгаа юм. Учир нь тэмцээний үед хүлээн авсан бүх гаралт байсан юм.

Таны загвар тусгайлан бүртгүүлээгүй л бол цаашдын гаралт ирэх эсэхийг мэдэх аргагүй болно.

Мөр-чиглүүлэлтийн буферээс хамаарч болоогүй байна. Зөвхөн програмууд нь тэдний буферерийн төрлөөс хоцорч амлалт өгдөг төдийгүй, системийн ходоодны хямрал нь гарц шугамыг эвдэж, шугамууд нь санамсаргүй газруудад эвдрэх магадлалтай байдаг. Тиймээс, хэрэв та хэв маягийг бичихдээ түр хүлээгдэж буй цөөн хэдэн тэмдэгтийг илэрхийлэх бол үүнийг хийх нь ухаалаг байдаг.

Хэрэв та програмын сүүлчийн гаралтанд хэв загварыг хүлээж байгаа бөгөөд програм нь өөр нэг зүйлийг ялгаруулдаг бол та хугацаа таслах түлхүүр үгийн тусламжтай илрүүлэх боломжгүй болно. Үүний шалтгаан нь хүлээлт нь цаг хугацааны хувьд таарахгүй - харин энэ нь эерэг заалтыг авах болно. Үүнийг ашигла. Тэр ч байтугай илүү сайн хэрэглэ. Хэрэв ийм мөрөнд шилжсэн бол энэ мөрийг өөрөө засварлах шаардлагагүй болно.

Newlines ихэвчлэн терминалын драйвераар гаралт хийх үед ихэвчлэн тэрэгний өгөөж, linefeed дарааллаар хөрвүүлдэг. Тиймээс хэрэв та хэв маягийг хоёр мөртэй ил тодоор хэвлэе гэвэл printf ("foo \ nbar") гэсэн үгнээс та "foo \ r \ nbar" загварыг ашиглах хэрэгтэй.

Иймэрхүү орчуулга нь хэрэглэгчээс уншиж байхдаа expect_user -ээр дамждаг . Энэ тохиолдолд та буцаж ирэх үед шинэ шугам руу орчуулагдах болно. Хэрэв хүлээгдэж буй хүлээгдэж буй програм нь терминалыг (терминал гэх мэт) терминалаа тохируулах програм руу дамжуулдаг бол хөтөлбөр нь жинхэнэ өгөөжийг хүлээж байдаг тул асуудал үүсэх болно. (Зарим хөтөлбөр нь уншина гэдэг нь автоматаар шинэ мөрийг буцааж өгдөг, гэхдээ ихэнх нь үүнийг хийдэггүй.) Харамсалтай нь хөтөлбөр нь терминалаа түүхий горимд оруулж байгааг мэдэх аргагүй юм.

Шинэ мөрүүдийг гараар оруулахын оронд өгөгдлийг "stty raw" тушаалыг ашиглан орчуулахаа зогсоох болно. Гэхдээ энэ нь та чанаж болгосон шугаман засварлах боломжуудыг авахгүй гэсэн үг юм.

Таны терминалыг түүхийн горимд шууд холбож өгдөг тул энэ асуудал үүсэхгүй.

Хүлээгдэж буй скриптэд нууц үгээ (эсвэл бусад хувийн мэдээлэл) хадгалах нь ихэвчлэн хэрэг болдог. Компьютер дээр хадгалсан бүх зүйл хэн нэгэнд хандах боломжтой байдаг учраас үүнийг зөвлөдөггүй. Тиймээс, скриптүүдээс нууц үгээ идэвхжүүлэх нь шууд утгаар оруулахаас илүү ухаалаг санаа юм. Гэсэн хэдий ч заримдаа ийм төрлийн оролт нь цорын ганц боломж юм.

Харамсалтай нь, UNIX файлын систем нь ажиллах боломжтой боловч уншигдах боломжгүй скриптүүдийг үүсгэх шууд зам биш юм. Setgid бүрхүүлийн скриптүүдийг дэмждэг системүүд үүнийг шууд бусаар дүрсэлж болно:

Хүлээгдэж буй скриптийг (нууц мэдээлэл агуулсан) үүсгэх. Өөрийн зөвшөөрлүүд нь 750 (-rwxr-x ---) байх ба итгэмжлэгдсэн бүлэг эзэмшдэг, өөрөөр хэлбэл уншиж болох бүлэг. Шаардлагатай тохиолдолд энэ зорилгоор шинэ бүлгийг үүсгэ. Дараа нь / bin / sh скриптийг 2751 (-rwxr-s - x) зөвшөөрлөөр өмнө нь ижил бүлгийн эзэмшдэг.

Үр дүн нь хэн нэгэн нь гүйцэтгэж болох (уншиж) скрипт юм. Шаардлагатай бол энэ нь Expect скриптийг ажиллуулдаг.

& # 34; SEE ALSO & # 34;

Tcl (3), libexpect (3)
"Туршлага судлах: Дон Либбэ, хуудас 6065, ISBN 1-56592-090-2, O'Reilly and Associates, 1995".
1990 оны 6-р сарын 11-15-нд Калифорниа мужийн Анахим хотноо болсон АНУ-ын Консулын АНУ-ын АНУ-ын Консулын консулын 1990 оны зуны чуулганууд.
1990 оны 10-р сарын 17-19-нд Колорадо муж улсын Колорадо Спрингс, Колорадо муж, Колорадо Спрингс, АНУENIX хэмээх том хэмжээний Системийн захирлын зохион байгуулалтын консул.
. "Tcl: An Embeddable Command Language", Жон Оастерхут, 1990 оны 1-р сарын 22-26-нд Вашингтон хот дахь АНУ-ын Вашингтон хот дахь АНУОУСIX-ийн бага хурлын 1990 оны процессууд. Дон Либес, Тооцооллын системүүдээр "Interactive Programs-ыг хянах скриптүүд" , Vol. Калифорниа мужийн их сургуулийн хэвлэл, сэтгүүл, 1991 оны 11-р сар, "Регрессийн сорил ба тохирлын шинжилгээний хөтөлбөр", Дон Либес, 1992 оны зун АНУ-ын консулын бага хурал, 135-144 хуудас, Сан Антонио, TX, 6 сарын 12-15, 1992 ... "Кибитт - Олон талт хамтын ажиллагааны хөтөлбөрүүдийг холбох нь", Програм хангамж ба туршлага, Жон Вили, Сонс, Английн Вест Сассекс, Вон Либес, Vol.

1993 оны 5-р сарын 23, 5-р сар, 1993. "Тcl-ийн хэрэглээний програмын дибаггер", Дон Либес, 1993 оны Tcl / Tk семинар, Беркли, CA, 1993 оны 6-р сарын 10-11.

AUTHOR

Дон Либес, Үндэсний Стандарт, Технологийн Үндэсний Хүрээлэн

ТАЛАРХАЛ

John Ousterhout Tcl-тэй, Скотт Паисли нарын урам зоригоор талархлаа илэрхийлж байна. Хүлээгдэж буй авто тохиргооны кодонд Rob Savoye-ийн ачаар.

ӨМНӨХ ҮГ хүсвэл хувьслын хувьсал өөрчлөгдөж байдаг. Энэ нь сонирхолтой уншигдаж байгаа бөгөөд танд энэ програмыг цаашид илүү гүнзгий ойлгох боломжийг олгоно. Надад алдаа засах илгээсэн бусад хүмүүст туслалцаа үзүүлсэн хүмүүст баярлалаа.

Хүлээгдэж буй төлөвлөлт, хэрэгжилтийг АНУ-ын Засгийн газраас хэсэгчлэн төлж, улмаар олон нийтийн домэйн нэртэй болсон. Гэсэн хэдий ч зохиогч болон NIST нь энэхүү програм, баримт бичиг эсвэл тэдгээрийн хэсгийг ашиглаж байгаа бол зээлийг авахыг хүсч байна.