U cumandariu di Linux / Unix

Aspettu hè un prugrammu chì si parlava à altri programmi interattivi per esempiu un script. Dopu à u script, Spète sapi ciò chì pò esse suppostu da un prugrammu è di quale hè a rispunsa bona. Un linguaghju interprete prupone ramificazione è strutturi di cuntrollu di livellu per diretti u dialogu. Inoltre, l'utilizatore pò piglià u cuntrollu è interagisce direttamentmente quandu si vulete, dopu avè rinviatu u cuntrollu à u script.

L'aspettante hè una mistura di l'Ettore è Tk. Cumu fà cumu Eppuru è u desideriu di Tk. Pè esse ancu diretta direttamente in C o C ++ senza Tcl.

U nomu "Esperanu" venenu da l'idea di mandà / esperanu secuenzi populizzate da uucp, kermit è altri programmi di cuntrollu modem. Invece cù un'altru uucp, Espectate hè ghjiniralizatu per ch'ellu si pò esse esercitu cum'è cuncettu à u nivellu d'utilizatori cù qualsiasi prugramma è cumprenda in mente. Pè esce pò parlà à parechji programmi à u stessu tempu.

Ciò chì prumessu Can

Per esempiu, quì quì cunsultate cose chì l'cumannà l'aspettate pò fà:

Ci hè una variità di razze per chì u cascarru ùn pò micca esse realizatu stu travagliu. Tutti sò pussibule cun Esse.

In generale, Espectate hè utili per esse currente u prugramma chì esige interaczione trà u prugramma è l'utilizatori. Tuttu ciò chì hè necessariu hè chì l'interaczione pò esse carattarizatu programmaticamente. Pè esce ancu darà contru à l'utilizatore senza firmà u prugramatu chì sia cuntrullatu. Inoltre, l'utilizatori pò ripondà cuntrollu à u script in ogni ora.

Usage

Assicurà leghjite cmdfile per una lista di cumandamenti per eseguite. Pè esse invucatu implicitamente nantu à sistemi chì sustene a #! notazione marcendu l'script cum'è esse executable è facenu a prima linea in u script:

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

Di sicuru, u percorsu devenu esse precisamente descrizzione d'induve vede. / usr / local / bin hè solu un esempiu.

U bandu -c prefissi un cumannu per esse esercitu prima di quellu chì in u script. U cumandimu deve esse chjamatu per impediscenu à esse cumpressatu da a cunchiglia. Questa opzione pò esse usate parechje volte. Cumplimenti multipli pò esse esercitu cù un solicu -c si separanu cù puntatica. I cumandamenti sò rializati in l'ordine chì pareanu. Quandu anu utilizatu l'Esempiu, questa opzione hè specificata cum'è cumanda.

A bandiera -d permette di qualchì preghiera di diagnostica, chì primurà l'attività interna di i cumandamenti cum'è aspetta è interagisce. Questa bandiera hè u listessu effettu cum'è "exp_internal 1" à u principiu di un script d'esse Ghjustu, più a versione di Espectiu hè stampatu.

A bandiera-D permette un depuratore interattivu. Un valor integru deve seguitu. U pulverizadoru hà da piglià cuntrollu prima di a prublema Tcl chì u valore hè nè micca cero o se a C ^ hè presionatu o un puntu d'interrupzione hè culpitu, o l'altru mandu di debuggante appropritatu vene in u script. Quandu anu utilizatu l'Esempiu, questu opción hè specificata cum'è - Depug.

U bandiera prefessu un schedariu da ellu in leghje cumandamenti. U bannera stessu hè optativu perchè hè solu utili when using the #! a notazione, perchè altri argumenti sò ancu furnuti nantu à a linea di cummanda. Quandu anu utilizatu l'Esempiu, questa għażla hè specificata cum'è -file.

Per automaticamente, u schedariu di cumandariu hè legatu in memoria è eseguitu in tuttu. Hè uccasiunalmentu vuluntariu di leghje e una sola linea in un tempu. Per esse forse file arbitrariu per esse trattatu stu modu, usa a bandiera--b. Quandu l'usu di l'Espect, sta opción hè specificata cum'è -buffer.

Se a stringa "-" hè furnuta com un nome di filename, l \ 'inserzione standard hè leghjidu. Utilizà "./-" per leghje frà un schedariu chjamatu "-".

U bandiera -i flagellu Certa tistanta à appiecà ghjunti per i cumandamenti in quantu à leghja di un schedariu. A signalazione hè terminata via l'ordine di salda o à l'EOF. A bandiera -i hè presumata se nè un schedariu di mandatu nemenu -c hè utilizatu. Quandu anu utilizatu l'Esempiu, questa opzione hè specificata cum'è -interattivi.

- pò esse usatu per delimitate a fine di l'opzioni. Questu hè ùtule si vulete passà un argumentu like option à u vostru scrittore senza esse interpretatu da Esse. Questu pò esse utru à a #! Linìa per prevene una interpretazione belluvole per Esse. Per esempiu, u seguente raleggià l'argumenti originali cù u script name in a variable argv .

#! / usr / local / bin / expect -

Innota chì l' appressu spettaculu (3) è l'execve (2) ci anu osservatu quandu anu aghjuntu argumenti à u #! linia.

U schedariu $ exp_library / expect.rc hè stati automaticamente automaticamente si prisentanu, salvu chì a bandiera -N s'aprizza. (Quandu s'utilice l'Espectiu, sta opción hè specificata cum'è -NORC.) Immediatamenti dopu, u schedariu ~ / .expect.rc hè stati automaticamente automaticamente, salvu chì a bandiera -n s'utilice. Se l'entornu variable DOTDIR hè definitu, hè trattu com'è un direttori è .expect.rc hè leggidutu quì. Quandu anu utilizatu l'Esempiu, questa opzione hè specificata cum'è -norc. Questu sourcing sù solu dopu esecutà qualsiasi bandiera -c.

-v creeu Pè l'imprimirse u so numeru di versione è surtite. A bandiera currispundente in Ghjustu, chì usa nomi longu di bandiera, hè -versione.

Args optimi sò custruuti in una lista è almacenata in a varianti chjamati argv è. argc hè initializatu à a durata di argv.

Argv0 hè definitu per esse u nomu di u scrittore o binariu si ùn hè micca scrittu script. Per esempiu, i stampi stampati à u nome di u script è i primi trè argumenti:

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

Cumandamenti

Pigliate utilizà a Legenda Tool Command. Tcl li furnisce u cuntrollu di u flussu (se, per, rompicassi), valutazione d'espressioni è parechje altre funziunalità cum'è a difinizzione di ricerca è di recursioni. Mandò utilizati solu quì, ma ùn definenu (set, if, exec) sò cumandamenti di Tcl. Aspetta appruvata cumandamenti supplementari. Sall'altra manera distinta, i cumandenu torna a catena vacca.

L'Ordine hè listatu alfabeticu per quì ponu esse situatu rapidamente. In ogni casu, i novi utilizatori pudete truvà più fàciule à principià per leghje e descriptori di spawn, mandate, caghite è interagisce, in questu ordine.

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

cessione a cunnissioni à u prucessu attuale. A maiò parte di i programmi interattivi detaranu EOF in u so stdin è surtite; cusì cusì abbastanza hè abbastanza per ammazzalli u prucessu ancu. A bandiera -i declara u prucessu per appressu quellu chì currispondi à u genomu named spawn_id.

Eppuru aspetta è interaccetta si detti quandu u prucessu attuale esciuta è implicitamente un aghjuntu, ma se ti mute u prucessu , dicenu "l'exec kill $ pid", avete bisognu d'esplicitamente chjamate vicinu .

A bandiera -executa questa determina se l'id iducatu hè chjusu in ogni prucessu novu amatuu o se u prucessu sò overlayed. Per abbandunà un spawn id apertu, utilizate u valore 0. Un valore di un nùmbulu cero non valore a nascita in certi prucessi novi.

U bandiera -slave chiiscinu u slavu assuciatu cù l'id di spawn. Quandu a cunnessione hè chjesa, u servitore hè automaticamente chjusu ancu se hè sempri aperta.

Ùn importa micca chì a cunnessione hè chjesa implícita o esplicita, deverà chjamà waità per scumpressà u slot di proeficu di kernel. U cumandimu accadèmicu ùn chjama micca ch'è ùn ci hè garantì chì a cuncede una cungressu di prucessu vi causarà a sorte.

debug [[-now] 0 | 1]

cuntrolla un depressu di Tcl chì permette di passà ste statement è set breakpoints.

Cù senza argumenti, una 1 hè dettu torna l'uperugenu ùn curreva, altrimente un 0 hè tornatu.

Cù un argumentu 1, u prugramgeru hè inizio. Cù un argument 0, u purificadori hè persu. Se un 1 argumentu hè precedutu da a bandera, u purgatore hè stallatu immediatamenti. Inutile, u prugramgeru hè cuminciatu cù a strada di u Tcl.

U cumandru di debug ùn cambia micca tramezze. Compare this to begin Expect with the -D flag.

U scaricamentu di scuntenu ùn scriverete un prucedimentu furzatu da a terminal . Ci hè ghjucatu in corruzzione. U prucessu hè datu u so propiu gruppu di prucessu. U standard I / O hè ridirettu à / dev / null .

U spargimentu seguente utilizeghja micca a cunghjunta à seguità aduprendu u script in u sfondate.

se {[furchetta]! = 0} disconnect. . .

U scrittu script leghjite una password è andate ghjugnu un prugramma ogni ura chì dumandassi una contraseña cada volta u ghjestionu. U scrittore furnisce a password per avè qualcosa solu per scrivumianu una volta.

Cumpagnia di u vostru cliente? Cumprevule? Cumprevule? Cumprevule! 1, string) \ r ". . . exit}

Un vapore di utilizà a discutazione di a prughjettu di l'intrecciu di diminuitu di l'intrecciu (&) hè chì Ghjustu pudete guardà i paràmetri di cunnessione prima di a scunzione è più tardi applica à i novi ptys. Con &, Expect ùn hà micca u chance di leghje i paràmetri di u terminal, chì a terminal hè ghjuntu disconnected da u tempu chì Ghjustu riceve u cuntrollu.

exit [-opts] [status]

Crea a vede u puderebbe sicurezza o preparate da travaglià per fà.

A bandiera- accessitivi pruvucarà a ghjuvata sussurna per esse usata cum'è manighjanale di sete. Senza un argumentu, u correttu di u prugettu di venerà hè tornatu.

U bellu ùn si pò esse aduprà per esse da salute, ma fate micca curretta di ripertazione di u cuntrollu di u sistema upirativu. U manicu di u uttellu definitu dapoi ghjucatu cum'è cù l'amministratori internu propiu di l'Espect. Ùn ci vole micca eseguitu Eseguianu manichi. Questu hè ùtule si vi mancu Eseguitu cù altre estensione Tcl. L'intramu currente (è a finestra principale si in u ambientu Tk) stanu d'autri estensioni Tcl pò pulvar. Sè a risposta di l' Espectà hè chjamatu novu (in casu pò esse occulte), i manulentori ùn sò micca riurizzati.

Quand'ellu sìanu, tutte e ligami à i prucessi spawned sò chjusi. U Cerramentu serà detecatu com'è EOF pere prucessi spawned. isciuta ùn si pò micca altre accorsu fora di ciò chì u prucessu normali (1). Cusì, i pruduzzioni spause micca chì ùn verificate micca EOF ùn pò cuntinuà à esse coperto. (A varietà di e cundizioni sò impurtanti per a determinazione, per esempiu, chì signali un prucessu generatu seranu mandati, ma queste sò dipendenu di u sistema, tipicamenti documentati sottu a sete (3). I prugetti spawned chì sughjenu in correr seranu eredite da init.

U statu (o 0 si non specificatu) hè attribuzu cum'è l'ughjettu di esèrcitu di Esse . isciò hè implicitamente esecutatu se u scopu di l'script hè righjisu.

exp_continue [-continue_timer]
U cumandamentu exp_continuu permette cresce à cuntinuà à esecutà in più di vultà cum'è averebbe. Per automaticamente exp_continue resetta u timidor timore. A bandiera -continue_timer impedisce chì timer devolve. (Vede spetta per più infurmazioni).

exp_internal [-f file] value
pruvene più infurmazioni per mandà l'informazioni di diagnosticale internu à Esse u stwardr si u valore hè micca nimu. Questa pruduzzione hè disattivata se u valori hè 0. L'informazione di diagnostica abbia tutti i caratteri ricivuti, è ogni tentativu fattu per fonnu cù l'attuali currente contru i patti.

Se u furmatu opcional hè furnutu, tutte l'output normalu è di debugging hè scrittu à quellu file (independentamente di u valore di u valore ). Qualchese schedariu di prughjettu di diagnostica hè chjude.

U -info flag causa exp_internale per rinvià una descrizzione di l'argumenti non-info più recenti.

exp_open [args] [-i spawn_id]
torna un identificatore di schedariu Tcl chì currisponde à l'id? spawn originale. L'identificatore di u còdice pò esse utilizatu cum'è s'ellu hè statu apertu da u cumandimu apertu di Tcl. (U spawne ùn deve esse micca usatu. Un aspettate ùn deve esse micca eseguitu.

A bandiera -leaveopen abbanduneghja u spawn id open for access through Expect commands. A wait must be executed on the spawn id.

exp_pid [-i spawn_id]
torna u prucessu id cresciente di u proghjettu inghjenninu oghje. Se si a bandiera -i hè aduprata, u pid volta currisponde à quella di l'ido generale.

exp_send
hè un aliasu per mandà .

exp_send_error
hè un aliasu per send_error .

exp_send_log
hè un aliasu per send_log .

exp_send_tty
hè un aliasu per sending_tty .

exp_send_user
hè un aliasu per send_user .

exp_version [[-exit] version]
hè utili per assicurà chì l'script hè compatible cù a versione currente di Esse.

Cù senza argumenti, a versione currente di Espect is returned. Questa versione pò esse codificata in u vostru scrittore. Se verificate chì ùn sia micca utilizatu funziunalità di e versioni più recastichi, pudete specifià una versione precedente.

E versioni sò trè numeri separati da punti. Prima hè u numiru maiò. Scripti scritte per versione di Espectate cù un altru numuru maiò ùn guasi micca cirtezza micca. exp_version retorna un errore si i numeri principali ùn anu micca truvatu.

Sicunna hè u numeru minori. Scripti scritte per una versione cun un numaru minorenu più grande chì a versione currente puderia dependu di qualchì novità novu è ùn pudere micca corre. exp_version retorna un errore si i numeri massimi match, ma u scrittu quantu meniu hè più grande ca quellu di u running Expect .

Terzu hè un certu numaru chì tocca micca parte in a versione di versione. In ogni casu, hè creatu da quandu a distribuzione di software di l' Espectata hè cambiatu in ogni modu, cum'è per documentazione supplementaria o ottimisazione. Hè resettatu à 0 per ogni versione nova.

Cù u bandiera- estrangiera, stà impedisce un errore è si pesa si a versione hè stata data.

aspetta [[-opts] pat1 body1] ... [-opts] patn [bodyn]
aspetta finu à chì unu di u patronu coincide cù a pruduzzioni di un procruduzione generatu, un periudu hà passatu u tempu di tempu, o hè vedutu un fini di u file. Se u corpu finali hè vacante, pò esse omessi.

I patrunini da l'usu cumercimentu più recente ci sò impretusamente usati prima di quarchi schegi. I patti da u cumandimu crescente più recente ci sò impretusamente utilizati dopu à qualsiasi altri patti.

Se l'argumintazzioni à l'affissu tutte e cose accettanu più di una linea, tutti l'argumenti pò esse "sulcusati" in un per ùn esse finalizate ogni linea cun una retroatta. In questu casu, i sustituzzioni Tcl in solitu saranu malapeute l'arnes.

Se un patronu hè a chjave di eof , u corpu addevu hè esercitu nantu à a fine di u schedariu. Se un patronu hè a keyword longu , u corpu corrispundenti hè rializatu annantu à u tempu. Se ùn hè micca usatu un keyword timeout, una action nella implicita cum'è esse esercita nantu à timeout. U periodu predeterminatu predeterminado hè di 10 segundos, ma pò esse stabilitu, per esempiu à 30, da u cumandimu "set timeout 30". Un timeout infinitu pò esse chjamatu da u valore -1. Se un patronu hè a preghjudizazione predeterminada , u corpu corrispundenu hè esercitu nantu à u tempu d'aghjustà o finale di u schedariu.

Se un patronu coincide cù, u corpu hè corpu. Aspettu retorna u risultatu di u corpu (o a filetta vapa senza un pattu cumpatottu). In l'eventu chì parechji patrunidi match, quellu chì appare prima hè utilizzatu per selezziunà un corpu.

Ogni vultatu dopu à u novu risposte, hè paragunatu à ogni patronu di l'ordine chì sò listessi. Cusì, pudete pruvà per l'absenza di un match undupendu l'ultimu mudellu qualcosa di guaranzia per esse, cum'è un prompt. In situazione chì ùn sò micca signalatu, deve aduprà timeout (cum'è vo avete s'ellu avete interaczatu manualmente).

I patroni sò specificate in trè manere. Per automaticamente, i patogeni sò specificate cumu cun l'ordine di stringa di Tcl. (E dinò mudelli sò ancu simili à l'espressioni regulare C-cunnessione chjamati chjamati mudelli di "glob". U bandiera di bandera pò esse adupratu per prutege i patroni chì altrimente avidianu cumu fà chì cuddete bandieri facenu cusì. Ogni mudellu chì principia cù una "-" hè stata prutesta per questa modu. (Tutti i filetti cuminciati cù "-" sò riservate per future options.)

Per esempiu, u seguitu fragmentu cercate un login in riescita. (Nota chì l' avutru hè presumatu di esse una prucidzione definitu in altrò in u scrittore).

Assicurà (occupatu (ponu occupatu \ n; exp_continue} aborto fallido "password invalid" abort timeout abort connect}

Questi sò necessariu nantu à u quartu patronu postu chì cuntene un spaziu, chì altri schercà u patronu di l'accionamentu. Patroni cù a stessa azzjoni (per esempiu, u 3 è 4) esse di listinu di l'azzioni. Questu pò esse evitari cù l'adopru mudelli di stile règexp (vede below). Aktar informazioni nantu à a furmazione di i mudelli di u globu pò esse truvata in u manuale Tcl.

I mudelli di Regexp-siguenti seguite a sintazione definita da Regexp di Tcl (curretta per "espressione regulare") cumanda. i mudelli di rigulari sò intrudutti cù a bandiera -re . L'esempiu previ pò esse riabilitu cù una regula cum'è:

Assicurà (occupatu (ponu occupatu \ n; exp_continue} -re "failed | password invalid" abort timeout abort connected}

I dui mudelli sò "unanchored". Questu significa chì i patogeni ùn anu micca bisognu cù u stringu sanu, ma pudete cumencià è finisce u match in nudda parte di a corda (finu à quantu tutti questi filli). Aduprà ^ per unificà l'iniziu di una stringa, è $ cuncesione cù a fine. Avete chì, chì ùn avete micca esce per a fine di una stringa, i vostri risposte puderanu finisce in u centru di a catena cumu si sò cunfunditini da u prucessu propiu. Mentre chì stillu pruduttu i risultati correcti, u sviluppu pò esse unnaturali. Cusì l'usu di $ hè animatu se pudete esse dettagli exactamente i caratteri in a fine di una stringa.

Nota chì in parechji edituri, l'^ e $ match the beginning and end of lines respectivamente. In ogni casu, perchè crescenu ùn hè micca u principale di a linea, sti caratteri partenzanu u principiu è a fini di a data (in contattu di linii) in oghje in u prezzu di cume buffer. (Inoltre, vede a nota abitata da "indigestioni di sistema").

A bandiera -ex bandasce chì u patronu hè cumparatu cum'è un "exactu" stringe. Nisuna interpretazione di *, ^, ecc. Hè fatta (ancu s'ellu ci hè sempre osservatu a cunvenzione di Tcl). E mudelli esatti sò sempre unanchored.

U marcu innoce da i caratteri maiuriziunati di a pruduzzioni per paragunate cum'è se fussiru caratteri di minuscuschi. U patru ùn hè micca affettivu.

Mentre leghja u risultatu, più di 2000 bytes forçarà fortes precedenti per esse "scurdatu". Questu pò esse cambiatu cù a funzione match_max . (Nota chì i valori enormi sumenti pò esercià a lentitudine di u matcher di patrone). Se patlist è full_buffer , u corpu corrispundenti hè esecutatu se match_max bytes hè statu ricivutu è micca nisun patruni affarate. Chjamate a keyword cum'è full_buffer hè utilizatu, i carichi scurdati sò scritti à expect_out (buffer).

Se Patlette hè a chjave nulca , è nullos sò permessi (per l' ordine di crescenu ), u corpu corrispondenu si eseguitu se un unicu ASCII 0 hè cumposta. Ùn hè pussibuli cunghjilate 0 bytes a través di u globu o riggiuni rigulari.

Cumu coinci una scheda (o eof o full_buffer), qualsiasi currispundenza cumpletta è prublema prublema hè salvata in a variable expectation (buffer) . Finu à 9 regexp sottopezziunate risultati sò salvati in e variàvuli expectation (1, string) per expect_out (9, string) . Se a bandera di l' indici hè usatu prima di un mudellu, l'indici di inizziu è finale (in una forma adatta per lagnanza ) di i 10 cordi sò stati guardati in e variàvuli expectation (X, principiu) è expectate (X, finale) induve X hè un cifru, currisponde à a pusizione subestazione in u buffer. 0 si riferisce à e filetta chì hà cullatu u patronu tutale è hè generatu per i patti globi è ancu per i schezii rigulari. Per esempiu, se un prucessu hà pruduttu a pruduzzioni di "abcdefgh \ n", u risultatu di:

aspittà "cd"

Hè cumu s'elli i seguenti affirmate hà eseguitu:

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

è "efgh \ n" hè stata in u buffu di u risorsu. Se un prucessu pruduciutu l'output "abbbcabkkkka \ n", u risultatu di:

caghjunate - indices -re "b (b *). * (k +)"

Hè cumu s'elli i seguenti affirmate hà eseguitu:

set expect_out (0, start) 1 set expect_out (0, fine) 10 set expect_out (0, string) bbbcabkkkk set expect_out (1, start) 2 set expect_out (1, end) 3 set expect_out (1, string) bb set expect_out (2, partenza) 10 set expect_out (2, finale) 10 set expect_out (2, string) k set expect_out (buffer) abbbcabkkkk

è "una \ n" hè abbandunatu in u buffu di u risorsu. U patru "*" (e -re ". *") Puderà lavande u buffurinu di u viaghju senza leghje più risultati di u prucessu.

Nurmalmentu, u prughjettu in casu hè spustatu da i buffetti internu di l'espertu. Questu pò esse impeditu da u prefixu di un mudellu cù a bandiera nontransferente . Questa bandiera hè particularmente utile in a sperimentazione (è pò esse abreviace per "-not" per cunvenzione mentre sperimenta).

U spawn id associatu cù a prughjettenza curretta (o eof o full_buffer) hè guardatu in expect_out (spawn_id) .

U bandione longu induve l' aghjurnamentu d' attualità utilizate u valore sussente quant'è un timeout invece d'utilizà u valore di a variable variable timeout.

Per di manera predeterminada, i patogeni sò cumbatte cù u prughjettu di u prucessu attuale, ma a bandera di -i richiunna dichjarà u risultatu da a liste spawn_id chjamata hà versatu cù qualsiasi patti siguenti (à a prossima -i ). A lista spawn_id debería à esse una lista separata di spawn_ids o una varià chì si ponu esse una lista di spawn_ids.

Per esempiu, l'esempiu di seguente aspira per "cunnessione" da u prucessu attuale, o "impiegatu", "falla" o "password invàlida" da a spawn_id chjamata da $ proc2.

Assicurà chì {-i $ proc2 busy {ponu attuale \ n; exp_continue} -re "failed | password invalid" abort timeout abort connected}

U valore di a varià glubale di u_spawn_id pò esse usatu per fasciate i patogeni à qualsiasi spawn_ids chì sò numiati cù tutti l'altri -i bandieri in l'aghjustà di crescita attuale. U spawn_id da una bandiera -i senza patrone associatu (ie, seguitamenti da l'altru -i ) hè dispunibiliutu per qualsiasi altri schezii in u listessu cumu assicuratu associated with any_spawn_id.

U bandiera -i pò esse chjamatu dinamicu global in quale casu a variàva hè leghjite per una lista di spawn ids. A variàbbilita si sàveru sempre chì cambia. Hè una manera di cambià a fonti I / O mentre u cumandimu in esecutà. L'identità di spawn provista din viaghjate sò chjamati "iddi indirecti" spawn.

Aghjusti, cum'è uccuta è cuntenenu cuntene e strutture di cuntrollu (per esempiu, per , proc ) per cumportanu in u modu d'abitudine. U cumandamentu exp_continuu permette cresce à cuntinuà à esecutà in più di vultà cum'è averebbe.

Questu hè utile per evitari i ciclichi o esse ripetuti rifletti. L'esempiu di seguente hè parti di un fragimentu per automatizà rlogin. L' exp_continue evita da scrive una secunna tistimula tistimunia (per circà a ricunione promptata) se u rlogin ponu accurdà per una password.

Assicuratevi {Password: {stty -echo send_user "password (per $ user) in $ host:" expect_user -re "(. *) \ n" send_user "\ n" enviar "$ expect_out (1, string) \ r" stty echo exp_continue} incorrect {send_user "password invàlida \ u" exit} timeout {send_user "connection to $ host cessed out \ n" exit} eof {send_user \ "connection to host failed: $ wait_out (buffer)" exit} - re $ prompt}

Per esempiu, u pezzu seguenti puderia aiutà à un guidatore statunitenziu una interaczione chì hè dighjà totalment automatizata. In questu casu, u terminal hè messu in modu primu. Se l'utilizatori presses "+", una varianti hè incrementata. Sì "p" hè pressatu, parechji ritorni sò mandati à u prucessu, forsi per fucilallu di qualchì manera, è "i" permette chì l'utilizatore interagisce cù u prucessu, robba eterna u cuntrollu di u script. In ogni casu, l' exp_continue permette a l' aghjustà cusì chì seguite cù a cumpunimentu di patronu dopu l'eseguisce l'attività curretta.

stty raw -echo expect_after {-i $ user_spawn_id "p" {mandate "\ r \ r \ r"; exp_continue} "+" {incr foo; exp_continue} "i" {interactate; exp_continue} "quit" exit}

Per automaticamente, exp_continue restaura u timore timer. U timore ùn hè rinviatu , se exp_continue hè chjamatu cù u bandiera -continue_timer .

expect_after [expect_args]
i travaglisi idènticamente à l' expectation prima, salvu chì, si i modelli di l'altri l' aspetta è l' expectante affruntate puderanu cunnessione, u pianu d' aspettate hè utilizzatu. Vede l' equipazione d'expect_before per più infurmazione.

expect_background [expect_args]
Piglia u listessu argumintau chì cresce , ma torna a seguita. I patroni sò pruvati sempre chì u novu entrata in ghjustu. A mudellu di timeout è i predeterminati ùn sò micca significati à expect_background è sò scaricati silenciamenti. Inutili, l' equipazione dalle à l' expectation di u cumandamentu usa l' expected_before è expect_fact patterns like l' expectate .

Quandu s'emandianu e cose accumpagnate quand'elli sò stati prucessi di fundazione per u stessu spawne. A prucessazione di fondu hè sfruttatu da quandu l'action completeghja. Mentre chì u funziunamentu di u fondu hè bluccatu, hè pussibule di fà un (primu prublemu) cresce nantu à l'iddi spawn.

Ùn hè pussibile d'eseguisce una speranza mentre un expect_background hè unblocked. expect_background for a particular spawn id è sguassatu di dichjarà una nova expect_background cù u stessu spawn id. A dichjarà expect_background senza mudelli scorri a spedizione di donu da l'abilità di incuntà i patogeni in u sughjettu.

expect_before [expect_args]
Piglia u listessu argumintau chì cresce , ma torna a seguita. Parechji acorzamenti di u spaziu di l' invidie più recente chì anu avutu cù u stessu idellamentu generale sò ancu implicati à qualsiasi cumandus d' espertu . Se un patronu li paru, hè trattu comu si fussi especificatu in l' asempiu di l' aspettatu sè stessu, è u corpu associu hè esecutatu in u cuntestu di l'cumannamentu d' aspettate . Se e persone di l' expectativa prima è l' aspetta puderanu cunnessione, u patronu di expectare hè utilatu.

Se ùn hè specificatu micca un mudellu, l'idrugatu ùn hè micca verificatu per qualsiasi mudelli.

Sè mai avutu chì invucatu da una bandiera -i , expect_before scheden match versus l'idu di nascita definitu à u tempu chì l' cumandatu d'expectante hè stata esecutata (micca quandu u so patronu hè impauritu).

U bandu infruduce cose una crescita di vultà l'specificizzioni attuale di quali patruni affarraranu. Per automaticamente, informa nantu à l'idru spawn current. Una specificazione di spawn optione spawne pò esse dati per l'informazioni annantu à quella generazioni id. Per esempiu

expect_before -info -i $ proc

À quelle una spiegazione di spawne pò esse dati. A bannera - indirecte suprimi ids di staggini diretta chì venenu solu da i specificzioni indiretti.

Invece di una specificazioni cù spawn, a bannera "alla" causarà "-info" per riportà annantu à l'iddi di spawn.

U prugrammu di u bandu pianu pò esse utilizatu com'è l'argumentu per esse cose.

expect_tty [expect_args]
Hè comu aspetta, ma leghje caratteristiche / dev / tty (per esse pulsatori da l'utilizatori). Per automaticamente, a lettura hè realizata in modu coccu. Cusì, i linii anu da finisce cù una volta per esse vedi. Questu pò esse mudificatu via stty (vede u stty command below).

expect_user [expect_args]
Hè propiu, ma leggi i caratteri di stdin (ie muturi di l'utilizatori). Per automaticamente, a lettura hè realizata in modu coccu. Cusì, i linii anu da finisce cù una volta per esse vedi. Questu pò esse mudificatu via stty (vede u stty command below).

furcculu
crea un novu prucessu . U novu prucessu hè una copia esatta di u prucessu attuale. U successu, a furchetta torna 0 à u prucessu novu (u zitellu) è torna l'identità di processu di u procuratu di u zitellu à u prucessu parent. In a fallimentu (invariabilmente causa di a mancanza di risorse, per esempiu, swap space, memoria), furchetta ritorni -1 à u prucessu parentali, è ùn hè creatu nisun procés di zitellu.

Proghjetti furmulati andà via l'ordine di salda , cum'è u prucessu originale. I prucessi furzati sò dettu per scrive à i schedari di log. Sì ùn avete micca inutilizatu di debugging o in segundu in a maiò parte di i prucessi, u risultatu pò esse cunvince.

Qualcuni implementati pò esse cunfunditi da parechji lecturi è scrittori, ancu momentaneamente. Cusì, hè più sicuru di forchetta prima di prucessi di ripruduzzione.

interagisce [string1 body1] ... [stringn [bodyn]]
dà u cuntrollu di u prucessu attuale à l'utilizatore, perchè e stampa hè mandata in u prucessu attuale, è u stdout è stderr di u prucessu attuale sò tornati.

E parenti di corpuscule pudendu esse spjegati com'è argumenti, in quale casu u corpu hè esercitu quandu u stringu propiu hè ingressu. (Per automaticamente, a stringa ùn hè micca mandatu à u prucessu attuale). U cumandru di l'intresidu hè presumatu, se u corpu finali hè mancatu.

Se l'argumintazzioni a l' intarpulazioni interaettivu esigene più di una ligna, tutti l'argumenti pò esse "sulendu" in un per ùn esse finisci di ogni linea cun una borsa. In questu casu, i sustituzzioni Tcl in solitu saranu malapeute l'arnes.

Per esempiu, u cumandante cumandariu curretta cù i seguenti parò di corpuscule: Quandu ^ Z hè pressatu, Sperate hè sospettatu. (U bandiera restaurazione restaurate u mudellu di terminale. Quandu ^ A hè pressatu, l'utilizatore vede "hà scrittu un cuntrollu A" è u prucessu hè mandatu u ^ A. Quandu $ hè pressatu, l'utilizatore vede a data. Quandu ^ C hè pressatu, Expect exit. Se "foo" hè ingressu, l'utilizatore vede "bar". Quandu ~~ hè pressatu, l'intresu Spettaturi cuntene interativamente.

settitate CTRLZ \ 032 interagisce {-reset $ CTRLZ {exec kill -STOP [pid]} \ 001 {send_user "intitatu un cuntrollu-A \ n"; Mandate "\ 001"} $ {send_user "A data hè [relà u latinu] [} [003 exit foo {send_user" bar "} ~~}

In parigli di corpuscule, i filoletti sò numinati in l'ordine sò listessi cum'è argumenti. Strings chì parizate micca ùn sò micca mandati à u prucessu attuale in anticipazione di u restu avvicinatu. Se i caratteri sò da ghjornu intitulati chì ùn ponu micca più possibili dà un match, solu a parte di a stringa serà mandatu à u prucessu chì ùn pò mancu puderà principià altre match. Cusì, i filamenti chì sò sternu di partiti parziali puderanu cunnessu dopu, se i cordi urigginali chì si tratta d'esse affaire finisce micca.

Per automaticamente, u matching stringe hè esattamente senza cartulare salvatichi . (In cuntrastu, l'cumerciu di l' expectativa utilizate mudelli di u globu in modu di modu predeterminatu) A bandiera -ex bandera pò esse usata per prutege i patroi chì altrimenti puderanu cumbatte bande d'interrazione di fà. Ogni mudellu chì principia cù una "-" hè stata prutesta per questa modu. (Tutti i filetti cuminciati cù "-" sò riservate per future options.)

U bandiera chì eserciteghja a corda per esse interpretatu cum'è un patronu di stante rè. In questu casu, i sordi di currispundenza sò stati guardati in a variàbile interaccetamente in modu cusì cume chì a so pruduzzioni di a prughjitta in a variable expectation . U bandiera- indicisoportamente supportatu.

U mudellu di introduzione di una accontu chì hè esercitu nantu à a fine di u schedariu. Un patronu di epe separatu pò ancu seguità a bandiera- output , in quale casu, si cumpareghja se se detecta una eof mentre scrivite u risultatu. A preghiera cumunitata hè "ritorno", perchè l' interazzione solu torna annantu à qualsiasi EOF.

U mudellu d' intrusu pruduce un timeout (in sicondi) è l'azzione chì hè esercitu dopu chì nisunosie caratteri sò stati leghjite per un ora. U schedariu di timeout s'aprodi à u prucessu più ricchientu. Ùn ci hè micca un timeout periò. A variable speciale "timeout" (utilizata da l'cumannamentu) cumparisce micca in questa timeout.

Per esempiu, l'eseguzione siguenti puderia utilizà à autologout l'utilizatori chì ùn anu micca scrittu nunda per una ora, ma quelli chì anu ricivutu messagi di frequenza:

interagisce cù $ user_spawn_id timeout 3600 retour -output \ $ spawn_id

Se u patronu hè a chjavata nulla , è anulazione sò permessi (via l' ordine di crescenu ), u corpu corrispundenti hè eseguitu si un simplicu ASCII 0 hè assuciatu. Ùn hè pussibuli cunghjilate 0 bytes a través di u globu o riggiuni rigulari.

Fà prefetturà un mudellu cù u bandiera -criva a valeta interaccumpere (spawn_id) per esse settore à spawn_id chì hà fattu ghjocu u patronu (o eof).

Aghjusti, cum'è uccuta è cuntenenu cuntene e strutture di cuntrollu (per esempiu, per , proc ) per cumportanu in u modu d'abitudine. Però volta ci induve interaccettà per turnà à u so chjamanti, mentri inter_return causa vene interaccetta per causà una volta in a so chjamante. Per esempiu, se "proc foo" hà chiamatu interactu chì eseguitu eseguitu l'accion inter_return , proc foo torna. (Questu significa chì se interagisce interpreteri chjappu interakultantemente di ritornu , pruvucarà l'interazzione per cuntinuà, mentri inter_return farà causa l'interazzione per rinvià u so chjamante).

Duranti l' interaggettinu , u moddu primu hè utilizatu per chì tutti i caratteri pò esse passatu à u prucessu attuale. Se u prucessu attuale ùn coglie i signali di cuntrollu di u travagliu, si ferma si envihe un signalu di stallà (per default ^ Z). Per restituverà, mandate un signalu continuu (cum'è per "kill -CONT"). Sè vo vulete mandà un SIGSTOP per un tali prucessu (per ^ Z), cunsideranu cumandante csh prima e poi esse u so prugramma. D 'altra banda, sè vo vulete mannari un SIGSTOP per esse verificatu , primu interpreti chjamatu (forsi aduprendu un caratteru scappaticate), è preme ^ Z.

E parenti di corpuscule pò esse usatu cum'è un uttinutu per evitari d'avè da intrinu in l'intreprete è eseguite cumandamenti interactibamente. U modu di terminale prevaricatu hè usatu mentre u corpu di un paru di corpuscule hè esercitu.

Per a vitezza, l'eseguisce in u moddu primu per i predefiniti. A bandiera restaurafica u terminal à u modu chì avianu prima d' interaccegliu hè statu esercitu (invariabilamenti, modu coccu). Nota chì i caratteri scritte à tempu chì u modalità hè stata cambiata pò esse perduta (una funzione infatizatu di u terminal driver in certi sistemi). A sola ragiunata per utilizà- risite hè se a vostra action depènza à curriva in modu coccu.

U bandu d'eccezione envia caratteri cù u seguente patchinu à u prucessu chì l'hàggielu cum'è ogni caratteru hè leggiu. Questu pò esse utile quan u vostru usu hà bisognu à vedete feedbacki da i schezii in parte.

Se un patronu hè cunservatu cumminiu ma eventualmente ùn currisponde à l'incuntrariu, i caratteri sò mandati à u prucessu generatu. Se u procrududu u prussimperu cun echi, l'utilizatore vuranu dui caratteri. -Oè hè probabbilmente solu adatta in situazione induve l'utilizatore hè improbabile chì ùn cumpressu micca u patronu. Per esempiu, u prossimu silenziu hè da u rftp, l'script scriptu recursivo-ftp, induve l'utilizatore hè urdinatu per scrive ~ g, ~ p, or ~ l, per esse, metteci o lista l'annuariu recursivamente. Questi sò tantu luntanu da i cumandamenti normi FTP, chì l'utilizatore hè improbabile di tipu ~ seguita da qualsiasi altru, solu eccettu, in quale casu, prubabilmente saltà solu u risultatu.

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

A bandiera nubbirtà envia caratteri cù u patronu di seguente à u prucessu di prucessu cum'è ghjoculi sò leghjite.

Questu hè utile quan u vulete permettà un programma u risicuamente u patronu. Per esempiu, i seguenti puderanu esse utilizatu per vigilate quandu una persona hè signalatu (un mudellu modellu Hayes). Ogni annu "vidi" hè vedutu l'script guida u restu di a linea.

proc lognumber {} {interactate -nobuffer -re "(. *) \ r" return puts $ log "[formatigh clock] [signal clock]]: dialaled $ interact_out (1, string)"} interactate -nobuffer "atd" lognumber

Duranti l' interaggettinu , l'usu previ di log_user hè ignoratu. In particulare, interagisce inturghje a so output per esse registratu (mandatu à u standard output) perchè hè presumatu l'utilizatore ùn vulete micca interaccisce ciutu.

U -o bandiera pruvene qualsiasi parolle-chjave di seguente per esse appiicati à u prucessu di u prucessu attuale. Questu pò esse utile, per esempiu, quandu si tratta à l' anziani chì mandonu caratteri micca indibbuliti durante una siera di telnet.

Per automaticamente, interactivate tistimone à l'utilizatori per esse scritti stdin è leghje stcouse di u prucessu d' aspetta. U -u bandiera (per "l'usu") fa fà interagerazione per l'utilizatore cum'è u prucessu chjamatu da a so argumentu (chì devenu esse un iducatu propie).

Questu permette parechje processe senza rapportu à esse uniti senza usu di un loop esplènitu. Per aiutà à debugging, Aspettu di diagnostichi sempre andà à stderr (o stdout per certi elementi di ghjurnali è debugging). Per a stessa raggiuni, l'òrdine interprete scurdate interativamente da stdin.

Per esempiu, u furmendu piezi crea un prucessu di login. Allora dice l'utilizatori (micca indicatu), è finiscinu i so dui. Certu, ogni prucessu pò esse sustituitu per login. Un casu, per esempiu, permettenu l'utilizatori per travaglià senza furnisce una contu e password.

spawn login set login $ spawn_id spawn tip modem # dial back out to user # connect user to login interactueu -u $ login

Per enviar output à i prucessi multiplici, fate liste cada coppiu identitevante prefessu per una bandiera- output . Input per un gruppu di produzzioni spawn ids puderà esse determinate da una lista spawned di una prefazione per una bandera di l' ingaghja . (Eppuru uputu pò piglià listi in a listessa forma chì a bandiera -i in l'cumannamentu d'esempiu, salvu chì alla_spawn_id ùn hè micca significativu in interazzione ). Tutti i bandieri è i filamenti seguenti (o mudelli) applica à sta intrata finu à altru - indicatori Se no -input appears, -output implies "-input $ user_spawn_id -output". (Inoltre, cù patti chì ùn anu micca -input ). Se un'inputu hè specificatu, annulerà $ user_spawn_id. Se un seconda indicazione hè specificata, anulisce $ spawn_id. Ogni banderini addirizzate pò esse specificatu.

I dui prughjettamenti di i prublemi imprudendu in a prucedura per avè e so produzione specificate per $ spawn_id è $ user_spawn_id (in reverse). Se un indicador di partenza hè apparechju cù u bandiera nuvellu sianu , i caratteri di quellu prucessu si sparte.

U bandiera -i adopra un sustitutu per u current spawn_id quandu ùn si ponu utilizà nuvole bande d' induva o -output . A -i flag implica una bandiera -o.

Hè pussibule di cambià i prucessi chì anu interaccettate cù l'indimenta indìgnani ids. (Identità spiegata indiretta sò spjegati in a seccione di l'cumannamentu d'aspettate.) L'identità spachjata indirecta pò esse spicciata cù i -i, -u, -input, o -output flags.

interpreter [args]
pruvucarà à l'utilizatore per esse appinzatu interattivamenti per i cumandos di l' Eppettu è Tcl. U risultatu di ogni cumannu hè stampatu.

Aghjusti, cum'è uccuta è cuntenenu cuntene e strutture di cuntrollu (per esempiu, per , proc ) per cumportanu in u modu d'abitudine. Però volta prupone l'intresu di vultà à u so chjamanti, mentri inter_return provoca intreprete per causà una volta in a so chjamante. Per esempiu, se "proc foo" intitratu chjamatu intruduce chì eseguitu eseguitu l'accion inter_return , proc foo torna. Qualchese altru cumandante provoca intreprete per esse incontru di novi cumandamenti.

Per automaticamente, a lista contene dui entero. U primu culu descrizanu a prufundità di a valutazione stack (ie, quante volte Tcl_Eval hè statu chjamatu). U seculu sianu hè l'identificatore di a storia di Tcl. U prugrammu pò esse stabilitu da definisce un procedimentu chjamatu "prompt1" chì u vostru valuru di risurta torna a prossime pronta. Sì una stituzzioni avete citaturi aperti, parèntesi, chjorte, o parcheghji, un promptimu secundariu (per "+>" predeterminatu) hè issuu in novu linea. U prugrammu secondu pò esse stabilitu da definisce un procedimentu chjamatu "prompt2".

Duranti l' intresidu , u modu coccu hè utilizatu, ancu s'ellu si chjamava era usu di moddu primu.

Sì stdin hè chjusu, l' intresu tornerà salvu ch'ella hè aduprà a lingua -eof da bandiera, in quale casu hè invucata l'argumentu sussegente.

log_file [args] [[-a] file]
Se un filename hè datu, log_file gravarà un trascrittu di a sessione (cuminciendu à quellu puntu) in u schedariu. log_file parvenite di registramentu s'ellu ùn hè micca datu. Qualchì schedariu di logu prublematali hè chjude.

Invece di un nome di filename, un identificatore di schedariu Tcl pò esse furnitu da utilizà i bandieri -open o -leaveopen . Questu hè simili à a cumanda spawn . (Vede nascita per più infurmazioni).

U bandu un foru esercitu per esse registratu chì era suprimi da u cumandaru di log_user .

Per automaticamente, u cumerciu di log_file si appende à i schedarii anch'ellu in quantu truncati, per a cunvenzione di esse capace di scambià ghjacciate è in parechje volte in una sola sessione. Per truncate schedari, utilizate a bandiera -noappend .

Lu -info flag causa log_file per rinvià una descrizzione di l'argumenti non-info più recenti.

log_user -info | 0 | 1
Per automaticamente, u mandatu di dispunibile / espertu hè stati cuncrittu à stdout (è un schedariu di logge if open). U logging to stdout hè disattivatu da u cumandimu "log_user 0" è rinfurzata da "log_user 1". A ghjurnata à u schedariu di logge hè in ligna.

Lu -info flag causa log_user à vultà una description of the most recent non-info arguments given.

match_max [-d] [-i spawn_id] [size]
Defini u grandu di u buffonu (in bytes) utilizatu internamente per crescita . Cù senza argumentu di grandària , u tulu fattu hè tornatu.

Cù a bandiera -d , u nfernu predeterminatu hè stituitu. (U primu predefinitu hè 2000.) Cù a bandiera -i , u grandu hè stituutu per l'idrugatu nome generale, altru m'ha stabilitu per u prucessu attuale.

crescita [- # spawn_id] [- # spawn_id] [...] program [args]
eseguisce "u prugramma di args" in u locu di u prugramma attuale Spetta , chì finisci. Un argumentu di gufà parolle forces un gudu di fronte di u nome di u cumandariu cum'è s'ellu era un cunchidu di cunnessione. Tutti i genitori sò chjusi fora di quelli chì sò chjamati argumenti. Questi sò cartografi nantu à i schedarii identificatori chjamati.

Spawn_ids sò cartografiie per l'identifiers di u schedariu per u novu prugrammu per eredate. Per esempiu, a seguente linea ghjunta scacchrera è permette di esse cuntrullata da u prucessu attuale - dicenu, un maestru di scaccia.

overlay -0 $ spawn_id -1 $ spawn_id -2 $ spawn_id ajedrez

Hè più efficente di "interactu -u", però, sacrifice a capacità di fà interpragrammà programatu da u prucessu chì Ghjustu ùn hè più in u cuntrollu.

Nota chì ùn hè micca furnituatu una terminal di cuntrollu. Cusì, se scumpite o remap standard input, i prugrammi chì facenu u cuntrollu di travagliu (cunchli, login, ecc) ùn funziunà degne.

parity [-d] [-i spawn_id] [value]
definisce chì a parità si deve esse rimettata o sdirmata da a pruduzzioni di i prucessi spawned. Se u valore hè cero, a parità hè striata, altri ùn hè micca striatu. Cù senza argumentu di valore , u valore curritoghju torna.

Cù a bandiera -d , u valore di parità predeterminatu hè stallatu. (U primu predefinitu hè 1, p.e., a parità ùn hè micca striata). Cumu a bandiera -i , u valore di parità hè stituutu per l'identità generale, altri ùn hè stituutu per u prucessu attuale.

remove_nulls [-d] [-i spawn_id] [value]
definisce si nulinu sò rijintati o sguassati da a pruduzzioni di prucessi spappenu cunduciutu di patchura o macch'ellu in a variable expect_out o interact_out . Se u valore hè 1, i vacanti sò sfracati. Se u valore hè 0, nullos ùn sò micca eliminati. Cù senza argumentu di valore , u valore curritoghju torna.

Cù a bandiera -d , u valore predeterminatu hè stallatu. (U primu predefinitu hè 1, vale à dì, volte suscitanti). Cù a bandiera -i , u valore hè stituutu per l'identità spawned nome, altri ùn hè stituutu per u prucessu attuale.

Chjamate o ùn anu chjappu, anu dettevule annullamentu à u vostru logu è stdout.

send [-flags] string
Mandà string à u prucessu attuale. Per esempiu, u cumandimu

Mandavanu "hello world \ r"

envia i caratteri, infernalu à u prucessu attuale. (Incluisce un commande printf -like ( formatu chjamatu) chì puderà custruisce chordi arbitrariamente cumplessi).

I caratteri sò mandati in seguitu, ma sè ancu i prugrammi cù una basa di traduzzione lineale ùn deve micca leghje i carattere chjamate un caratteru novu hè mandatu. Un caratteru di ritornu hè denota "\ r".

U bandiera hè forse u discursu vicinu per esse interpretatu cum'è una catena in lenza di una bandiera. Qualchese stringu pò esse precedutu da "-" per esse o micca in veramente un pianu. Questu faciliteghja un mechja affidante di spicificà e stringe variàbbili senza esse trituzzatu da quelli chì parvene accissamente bandieri. (Tutti i filetti cuminciati cù "-" sò riservate per future options.)

A bandiera -i denuncia chì a stringa esse mandatu à u genomu named spawn_id. Se u spawn_id hè user_spawn_id , è a terminal hè in u moddu primu, e novi di a stringa sò traduzzjonati à sequenzi riturnati novi chì anu cumpariscenu cum'è se a terminal hè in modu coccu. U sicilianu disabiliteghja sta traduzioni.

U bandu urientale envia capuli null (0 bytes). Per automaticamente, un n null hè mandatu. Un integru pò seguità a -null per indicà quale nullos per mandà.

A bandiera rara generanda una crescita di scuperta. Questa solu hè chì u sensu si l'idu spapenu cunsultate un dispertu tutore apertu da "spawn -open". Se avete fattu un prucessu cum'è a punta, avete aduprà a cunvenzione di punta per generà un fretu.

I bandieri di i bandiera anu foru fatti per esse mandati "pianu", per evitari micca a situazione cumuni chì un furasteru di l'equipaggiu anu un buffu di cundutta chì hè statu creatu per un umanu chì ùn anu mai speditu quellu buffu . Sta risurta hè cuntrullata da u valore di a variàbile "send_slow" chì pigghia una lista di dui elementi. U primu elementu hè un cuntu chì qualifiche u numaru di bytes per mandà à atomicà. U secondu elementu hè un veru numaru chì detti u numaru di sicondi chì l'attuali atomicu ùn devenu esse separati. Per esempiu, "set send_slow {10 .001}" furaria forse "send-s" per mandà stringe cù 1 milliseconde in trà i 10 karate mandati.

U bandiera-bandiera eserciteghja per esse mandatu (un pocu) cum'è un omu in funzione. Dazii simili di l'umanu si prisentanu trà i caratteri. (L'algoritmu hè basatu annantu à una distribuzione di Weibull, cù mudìzii per adattà à sta dumanda particulare). Sta risurta hè cuntrullata da u valore di a variable "send_human" chì pigghia una lista di cinque elementu. I primi dui elementi sò un tempu mediu interuniale di i caratteri in sicondi. U primu hè utilatu da u default. U secondu hè utilatu à i parolle di parole, per simulà a sutile pauses chì occasione si trovanu in tali transizzioni. U terzu paràmetru hè una misura di variabilità quì .1 hè assai variable, 1 hè raghjone varievablemente, è 10 hè assai invariable. L'estremu sò 0 à l'infinitu. L'ultimi dui paràmetri sò, rispettivamente, un minimu è massimu interarrivale. U minimu è maximu sò usati ultime è "clip" l'ora finali. L'average average can be quite different from the average given if the minimum and maximum clip enough values.

Comu esempiu, u cumandimu cumandante emulanu un timistoru veloce è cunsistenti:

set send_human {.1.3 .05 2} mandar -h "Sò famu. Let's do lunch".

Mentre i seguenti puderanu esse adattate dopu una ressore:

set send_human {.4 .4 .2 .5 100} mandate -h "Goodd party lash night!"

Avè chì i errore ùn sò micca simulati, ancu s'è pudete stabilisce situazione di correzione d'errore per incastezze i sbagli è correczione in un argumentu di mandà.

I bandieri per mancu mandu di caratteri nullu, per missi paghennu, per furzà a lentilla è per a vendita d'altru umanu sò sfruttati mutu. Solu l'ùltima puntata serà usata. Inoltre, un argumentu di cordu pò esse specificatu cù i bandieri per mandà di caratteri nulvarii o rotuli.

Hè una bona idea di precede u primu mandà à un prucessu di una expectativa . Aspetta aspetta per u prucessu per cumincià, mentri ùn mandate micca. In particulare, se u primu mandonu cumpiece prima chì u prucessu accumbe, hà da rispetu di avè a vostra dati ignorati. In situ situ chì i prugrammi interattivi ùn uttene un promptatu iniziali, pudete precede mandà da un demonimentu in quantu à:

# Per ùn esse cunsigliatu di i pirate di u puzziche per annunzià, # questu sistema ùn ponu micca urdinatu per una password à u password. # Wait for 5 seconds for exec to complete spawn telnet very.secure.gov sleep 5 send password \ r

exp_send hè un aliasu per enviar. Sì avete aduprà l'Espectbiu o qualchì altra variante di l'Eseguitu in l'ambienti Tk, u mandà hè definitu da Tk per un scopu tutificatu à pocu tempu. exp_send hè furnita per a compatibilità entre l'ambnessione. Aliasi simili sò disposti per altri altre Eppo l'altri mandati di mandà.

send_error [-flags] string
hè cum'è mandà , solu chì l'output hè mandatu à u stderr più ch'è u prucessu attuale.

send_log [-] string
hè cum'è mandà , salvu chì a string hè mandatu solu à u schedariu di logu (vede log_file .) L'argumenti si ignorati si nisciune micca un schedariu di log è apertu.

send_tty [-flags] string
hè cum'è mandà , solu chì l'output hè mandatu per / dev / tty in più di u prucessu attuale.

send_user [-flags] string
hè cum'è mandà , solu chì l'output hè mandatu à u stdout di più ch'è u prucessu attuale.

dormu sicundu
pruvucarà u scrittore per dorme per u numeru di sicondi. Siconda puderia esse un numaru decimale. Interrupts (è Tk avvenimenti s'ellu si trova l'Expectk) sò stati prucessi mentre esse durmi.

spawn [args] program [args]
crea un novu prucessu chì corra "prugramma args". U so stdin, stdout è stderr sò cunnette cù Esse u so, perchè si pò esse leghje è scritte da altre cum'è Espectate . A cunnessione hè rotta da vicinu o se u prucessu stessu chjusu qualunque di l'identifiers file.

Quandu un prucessu hè stallatu da spawn , a varià spawn_id hè stata definitu à un descriptor riferendu à quellu processu . U prucessu deskusatu da spawn_id hè cunsideratu u " prucessu attuale ". spawn_id pò esse legatu o scrittu, in effettu cuntribuzioni per u travagliu.

user_spawn_id hè una variable global chì cuntene un descriptor chì riferisce à l'utilizatore. Per esempiu, quandu spawn_id hè stata uttinutu à stu valore, cresce esse cum'è expect_user .

.I error_spawn_id hè una variable global chì cuntene un descriptor chì riferisce à l'error standard. Per esempiu, quandu spawn_id hè stabilitu à questu valore, possa cumportà cum'è send_error .

tty_spawn_id hè una variable global chì cuntene un descriptor chì riferisce à / dev / tty. Sì / dev / tty ùn sianu (per esempiu in un cron, à u script batch), allura tty_spawn_id hè micca definitu. Questu pò esse pruvati com'è:

se {[info vars tty_spawn_id]} {# / dev / tty hè sanu) altri {# / dev / tty ùn sianu # in cron, batch o in script script}

nascita torna l'ID di prucessu UNIX. Se ùn prucessu hè purtatu, 0 hè tornatu. A varieghja spawn_out (slave, nome) hè stata definita per u nome di u pty slave device.

Per automaticamente, spawne u solu u nomu di l'cumandante è l'argumenti. A bandiera -noecho spineghja di nascita .

U bandiera- cunsuneghja u cunsultazione cume hè ridirette à u prucessu inghjustu. Questa hè micca supportatu per tutti i sistemi.

Internamente, spawn usa un pty, initialized a stessa manera chì l'usu uttellu. Questu hè inizializatu in modu chì tutti i paràmetri sò "sane" (sicondu stty (1)). Se a variàbbilda stty_init hè definita, hè interpretata in u stilu di l'argumintazzioni stinta com'è più cunfigurazione. Per esempiu, "set stty_init raw" pruvucarà i termali di i processi di generazione per inizià in u moddu crudu. -Nottycopy skips the initialisation based in usu tty. -nottyinit skips the "sane" initialisation.

Normalmente, spawn pocu tempu di eseguisce. Sè avete avè spegatu piglià un quantità significativu di u tempu, è ghjè prubabilmente incontru ptys chì sò chjucchi. Unepochi di teste sò assicurati nantu à ptys per evità l'intrattenimentu cù i prucessi erranti. (Esse piglià 10 segundos per pty. Wedged). Executar Expect with the -d option will show if Expect is encounter many ptys in stati stati. Se ùn pudete micca tumbà i prucessi à quale sti ptys sò stati attaccati, u vostru unicu modu pudete esse reinicia.

Se u prugrammu ùn pò micca esse cundottatu bè cù chì l'exec (2) falla (per esempiu, quandu u schedariu micca esiste), un messagiu d'errore serà restituutu da a seguente interagisce o cumu esse cumandatu cumu si u prugramma avia esecutatu è u messagiu d'errore. Stu cumpurtamentu hè una cume naturali da a implementazione di spawn . Intraperu, spawn forks, dopu chì u prucessu inghjustificatu ùn hè micca manera di cumunicà cù u prucessu urdettu urientale solu da a cumunicazione through the spawn_id.

U bandiera soppu fa l'argumentu propiu chì pò esse interpretatu cum'è un identificatore di schedariu Tcl (ie, ritornu da l' apertu .) L'id di spawne pò esse utilizatu cum'è s'ellu era un pruduce generatu. (L'identificatore di u schedariu ùn avè micca esse usatu.) Questu permette di trattà i pruduttori, i schedari, è l'oleodu cum'è prucessi spawned senza aduprà un pty. 0 hè tornata per indicà micca chì u prucessu assuciatu. Quandu a cunnessione à u procruduzione generata hè chjesa, per questu hè l'identificatore di schedariu Tcl. U bandiera -leaveopen hè simili à -open except that -leaveopen causa chì l'identificatore di u schedariu hè stata abbandunata ancu dopu chì l'idrugatu hè chjesa.

U bannera- vacanti pruvucarà un pty à stà abbandunatu, ma ùn hà fattu prucessu purtatu. 0 hè tornata per indicà micca chì u prucessu assuciatu. Spawn_id hè stata cum'è sempre.

A varieghja spawn_out (esclava, fd) hè stata cun un identificatore di file ch \ ubligatoriu à u schjettu pty . Pò esse chjusu cù "close -slave".

U nome di bandiera nomene un signalu per esse ignoratu in u prucessu generatu. Inutili, i signali piganu u cumpurtamentu predettu. I Signali sò numinati cum'è in u cumandu di a trappula , solu chì ogni signale precise una bandiera separata.

strace level
pruvucarà e seguenti affirmazioni per esse stampati prima di esse esercitu. (Traccia di traccia di traccia di Tcl. Variables.) U nivulu riunite quandu quellu chì hè falatu in a stampa per trasfigurazione. Per esempiu, u cumandante cumandante Expected mentre ralegra u primu 4 niveli di chjamati, ma nessunasmu quì sottu.

aspetta -c "strace 4" script.exp

U bandu infrughju pò prucessione di rinvià una descrizzione di l'argumenti non-info più recenti.

stty args
cambia modi di bordu di u modu simili di u cumandante stieddi esterni.

Per automaticamente, hè accessu u terminal di cuntrollu. L'altri terminale ponu accede à l'appendizendu "Talieni per statutu retourite com a risultatu di u cumandimu. Se ùn hè statu accessu statutu è u accessu di u terminal di cuntrollu, l'estatutu prelitu di l'attributi prima è echi sò tornati in una forma chì pò esse dopu utilizatu da u cumandimu.

Per esempiu, l'argumintazzioni crudu o- cooked pusonu u terminal in u moddu primu. L'argumintazzioni -baru o cottu pusau u terminal in modu coccu. L'argumintazzioni u ecu e -chochjavanu a terminal in eco è in modu di noecho rispettivamente.

L'esempiu di seguenti illustrà a manera di disabilità temporale in echoing. Questu pò esse usatu in scripts automaticamente per esse incrustate password in elli. (Vede a discussioni più nantu à quessu sperienze ESPERIENT).

stty -echo send_user "Password:" expect_user -re "(. *) \ n" set password $ expect_out (1, string) stty echo

sistema args
args à sh (1) cum'è ingressu, cum'è s'ellu ci hè statu tipatu cum'è u cumandimu da un terminal. Pigliate aspè finu à chì a struttura finale. U statutu di ritornu da sh hè tratatu da listessa manera chì l' execcu gestioneghja u so statu di ritornu.

A u cuntrastu di l' exec executivi chì rindirizzatu stdin è stdout à u script, u sistema ùn realizava micca redireczione (solu di quella indicazione da a stissa). Cusì, hè pussibule di utilizà prugrammi chì anu dettu direttamente à / dev / tty. Per a stessa raggiuni, i risultati di u sistema ùn sò micca registrati in u ghjurnale.

timestamp [args]
torna una marca timpra. Con nisun scopu, u numaru di sicondi da a stampa hè tornata.

A bandiera -formatica presenta una stringa chì hè restituita ma cù sustituzioni faciuti dettu a reguli POSIX per strftime. Per esempiu% a hè sustituitu da un apre siduatu di u giornale (ie, Sat). Altri sò:

% un abbuliuatu di u lumenu di u nome Un nomu di u giornale di u nome di u nome di u nome di u percentuale di u percentuale% B data di u mumentu chjamatu% c date-time in: Mon Oct 6 11:45:56 1993% d u ghjornu di u mese (01-31% H ora (00-23)% I ora (01-12)% j jornu (001-366)% m mese (01-12)% M minuta (00-59)% p am o pm% S seconda (00-61) % u ghjornu (1-7, u luni hè primu ghjornu di a settimana) U sittimana (00-53, u primu di u domu hè u primu ghjornu di a settimana) S% V (01-53, u stile ISO 8601)% w dia (0- 6) A% W semana (00-53, primu luni hè u primu ghjornu di a settimana)% x date-time in: Mon Oct 6 1993% X tempu quantu in: 23:59:59 è annu (00-99) % Y annu cum'è in: 1993% Z timezone (o nunda ùn esse diblemble) %% un percentu percentu persone

Altri% specificazioni ùn sò micca difinitate. L'altri caratteri seranu trasmessu cù l'intrecciu. Solu a C locale hè supportatu.

A bandiera -secondiche presenta una quantità di sicondi da l'epica per esse aduprata com'è una fonte da u furmatu. Inutili, u tempu hè utilatu.

U bandiera -gmt forza a vendita timestamp per utilizà a timezone GMT . Sì senza bandiera, a timezone localu hè utilizzatu.

trap [[command] signals]
pruvucarà à u cumandimu cumandariu à esse esercitu nantu à l'ultime rimbursu di qualcosa di i signalhii dati. U cumandimu hè esercitu in l'urganisazione glubale. Se u cumandimu hè assente, l'accordu di signale hè tornatu. Se cumanda hè a strata SIG_IGN, i signali sò ignorati. Sì u cumandimu hè a strata SIG_DFL, i signali sò resultate à u sistema predeterminatu. i signali sò o un signalu sola o una lista di signali. Signali sò numirati numéricamente o cumbaticamenti per signale (3). U prefessu "SIG" pò esse omessi.

Cù senza argumenti (o l'argumentu -numeru), a trappula torna u numaru di signale di u cumandamentu di tramuntana chì devenu esse esercitu.

U bandiera-codice utilizate u codice di u reticciu di u cumandariu in u locu di qualsìasi còdice Tcl era vicinu à vultà dopu à u cumandimu cuminciatu uriginale.

U bandiera -interp causa chì u cumandamentu di esse evaluatu utilizendu l'intèrpretu attivu à u mumentu chì u cumandimu principia a correre in quantu cà quandu a trappula hè statu dichjarata.

U bandiera-nome derite à l'ordine di trappu per rinvià u nome di u signale di u cumandamentu di tramuntana chì devenu esse realizatu.

U -max bandiera pruvucà l'ordine di trappu per rinvià u numaru di signale più grande chì pò esse stabilitu.

Per esempiu, u cumandimu "trap {send_user" Ouch! "} SIGINT" imprima "Ouch!" ogni volta l'usu pressa ^ C.

Da u modu di manera predeterminada, SIGINT (chì pò esse generatu da pressione C ^) è SIGTERM chì pensanu à esse Ghjustu. Questu hè duvuta à a trappula sussegwenti, creata da u cumandante cumu accede.

trap exit {SIGINT SIGTERM}

Se utilizate a bandiera -D per cumentà u debugger, SIGINT hè scrittu novu per inizià u debugger interactivo. Questu hè duvuta à a trappula seguita:

trap {exp_debug 1} SIGINT

A trappula di u debugger pò esse cambiatu da scambià l'ambient variable EXPECT_DEBUG_INIT à un novu trap command.

Pudete, per suprattuttu, annullate tutti dui solu aghjustendu i cumandamenti di trap in u vostru scrittore. In particulare, sè vo avete a vostra pròpia "trap exit SIGINT", questu anu sottumessu à a trappula di depugger. Questu hè ùtule si vulete impedisce l'utilizatori à ricaricà à u debugger à tuttu.

Se vulete definisce u vostru propiu trappu nantu à SIGINT, ma ancu trappule à u debugger quandu hè ghjera running, use:

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

Oltremu, pudete fàpule à u debugger cù un altru signal.

Trappu ùn vi permettenu di annunzià l'azzione per SIGALRM chì questu hè utilizzatu internamente à Esse . A cumanda di cunnessione SIGALRM à SIG_IGN (ignore). Pudete puru rinfurzà questu in quantu disabilitanu durante e seguenti generale.

Vede u segnu (3) per più infurmazione.

aspittà [args]
i retardi finu à chì un prucessu generatu (o u prucessu attuale si nimu ùn hè chjamatu) finisci.

aspittà aspetta torna una lista di quattru entero. U primu entero hè u pid di u prucessu chì era stata tistatu. U seculu sianu hè u spactu spawne propiu. U terzu entier hè -1 si un error di sistema di u sistema divene, o 0 altrimenti. Se u terzu integeru hè 0, u quartu nùmeru hè u status retorna da u prucessu generatu. Se u terzu integeru hè -1, u quartu nùmeru hè u valore d'errno stabilitu da u sistema operatore. A variable global codice Code hè ancu settore.

Elementi addizivi ponu appare à u fini di u valore ritornu d' aghjustà . Un quintu primu otticu identifica una classa d 'infurmazione. Oghje, l'unicu valuru pussibbile per questu l'elementu hè INFINIZZIONE in quale casu, e seguenti dui valori sò u nomu di signale C-stile è una petite discrive textuale.

A bandiera -i declara u prucessu di aspittà chì currisponde à u spawned named (NOT l'id process ). À l'internu un maestru SIGCHLD, hè pussibile aghjustà à qualchì pruduzzione generale usendu l'spape id -1.

U bandu-nowait causa l'aghjustà à vultà immediatamente cù l'indirizzo di una stanza d'successu. Quandu u prucessu prossime (dopu), sparà automaticamente senza a bisognu di una stennedda esplicita.

U mandamentu d' aspettatu pò ancu esse usatu aspittà per un procrettu forked usando l'argumenti "-i -1". A diversità di u so usu cù prucessi spawned, u cumandimu pò esse esercitu in ogni mumentu. Ùn ci hè micca un cuntrollu di quale hè u prucessu . In ogni modu, u valore ritornu pò esse verificatu per l'id di prucessu .

LIBERI

Pigliate automaticamente sapere di duie biblioteche integrati per Esse script. Questi sò definiti da i cartulari chjamati à e variàvelli exp_library è exp_exec_library. I dui sò intinnatu di cuntenuti schedarii d'utilità chì pò esse usatu da altri scrippi.

exp_library contene arquitetti architettura-indipendente. exp_exec_library contene files architettonii dipendenu. Dopu à u vostru sistema, i dui rettori pò esse sianu vacanti. L'esistenza di u schedariu $ exp_exec_library / cat-buffers descriggiuta o vostre buffetti / bin / cat per defettu.

PRETTY-PRINTING

A vgrind definizione hè dispunibule per stampazione di bon'impatriate . Spettite scripte. Assuming a vgrind definizione furnita cù a distribuzione S'ellu hè stallatu bè, pudete aduprà com'è:

vgrind -screen file

EXAMPLES

Hè parechji ùn esse manera evidenti cumu si dettu tuttu ciò chì a pàgina di l' omu . Fighjulu à leghje è pruvate l'esempi in l'indirizzu esemplariu di a distribuzione di Ghjustu . Uni di elli sò veri programmi. Altri sò simpliciamente illustrativi di certe tecniche, è di sicuru, una coppiu sò solu ghjudìziu veloce. U archiviu INSTALL architettura hè una strada rapida di sti programmi.

I documenti di stima (vedere SEE ALSO) sò ancu utili. Mentre chì certi articuli anu sinaggiu cumu corresponde à versioni di Prima di l'Ettissimi, i raziunamenti anu seguitu sò sempre validi è andate in assai più dittori chì questu pàgina di u situ.

CAVEATS

L'estensione pudete chjappà cù i nomi di l'cumandante di l'expectante. Per esempiu, u mandallu hè definitu da Tk per un scopu tutale sferisu. Per questu causa, a maiò parte di e cumandus d' espertu sò ancu dispunibili comu "exp_XXXX". Mandati è variità cumenti per "exp", "inter", "spawn" è "timeout" ùn sò micca alcune. Utilizate i numeri di cumandamenti estensi s'ellu ci hè bisognu di sta cumpatibilità entre l'ambnessione.

Pigliu una visione liberale di scoping. In particulare, variàbili leghjite per cumandamenti specifiche à u prugettu di Sperate serà cercatu prima da l'alcunu locale, è se ùn truvate micca, in l'urganisazione glubale. Per esempiu, eccula u bisognu di esse u "timeout global" in ogni prucessu chì scrive u usu cresce . D 'altra banda, e variàbili scritte sò sempre in l'alcunu lucale (à menu chì un mandatu "global" hè statu emessu). U prublema più cumuni per questa situ hè quandu u spawne hè eseguitu in un procedimentu. Fora di u prucedimentu, spawn_id ùn esiste più longu, perchè u prucessu inghjuntatu ùn hè più accessibile solu per via di scoping. Aggiungi un "spawn_id global" à questu prucessu.

Se ùn pò micca attivà a capacità multispawning (per esempiu, u vostru sistema ùn sia accettatu micca selezziunate (BSD *. *), A sondae (SVR> 2), nè una qualità equivalente), Sperienze solu sera capaci di cuntrollà un unicu prucessu à u mumentu. In questu casu, ùn pruvate micca di creà spawn_id , nè ùn deve esse eseguitu prucessi via exec mentre un procliu generatu hè corruzzione. Inoltre, ùn vi pudete esse espertu di parechje prucessi (cum'è l'usu cum'è unu) à u listessu tempu.

Parametri di a terminale puderanu un grande effettu nantu à i scrittura. Per esempiu, se un script hè scrittu per circundà e uchjaru, vi scuntrarà eccu incù a risposta resu. Per questu causa, Eppuru u forze sane paràmetri di u terminal. Sfurtunatamente, ponu scorci di e cose eccillenti per altri programmi. Per esempiu, l'armata di l'emacs voli cambià l'assignazioni "di solitu": i mape novi tracciate à e lineuli novi di novi viaghji di viaghja di ritornu, è u resu nunda hè disattivata. Questu permette l'usu emacs per edità a linea di a linea. Sfurtunatamente, Eppuru ùn puderà mancà questu.

Puderete dumandà chì Spiecanu ùn anulavanu a so scelta predeterminata di paràmetri di u terminal, ma avete da esse moltu cura in scrittura di scrittura per un tali ambiu. In u casu di l'emacs, evite micca secondu cumu cusì u rispettu è di u cartulamentu di fine.

I cumandamenti chì accettanu l'argumenti juncenu in una lista sola (l' expectate varianti è l' interagisce ) utilizan un heuristicu per esse decide si a lista hè veramente un argumentu o assai. A heuristica pò fallu solu à u casu quandu a lista realtà ùn si prisenta un argumentu chjamatu cù assai incrusciati \ n cù i caratteri non-blancori entre elli. Questa pari essa improbabili, ma l'argumentu "-nobre" pò esse usatu per forze un argumentu solu per esse trattatu com'è un argumentu solu. Questu puderebbe pudè esse utilizatu cù u codice cusì creatu da u generale. Inoltre, -brace obliga un argumentu solu per esse trattatu quant'è parechji patrunii / actions.

BUGS

Era tentativu di nomi u prugramma "sessu" (per either "Smart EXec" o "Send-EXpect"), ma u sensu bonu (o potu solu puritanismu) impomieghja.

In certi sistemi, quandu una scossa hè generata, si lamenta di ùn puderà accede à u tty, ma si pudere di voi. Questu significa chì u vostru sistema hà un meccanisimu per averà u cuntrollu chì ùn si sapi micca. Per sapè quellu chì hè, è mandate sta rileverazione à mè.

Ultrix 4.1 (almenu e l'ultimi versi circa aqui) si pensanu timeouts di più di 1000000 per esse equivalent à 0.

Un UNIX 4.0A digitale (e probabilmente altri versioni) ùn si rifjezi à attribuisce ptys se define un maestru SIGCHLD. Vede a pàgina di cuncede per più infurmazione.

IRIX 6.0 ùn maneghja manipuleu pty permistamenti in modu cusì cusì chì se Ghjustu attempi di attribuisce una pty utilizzata di una altra persona, falla. Avanzate à IRIX 6.1.

Telnet (verificatu solu sottu SunOS 4.1.2) si prega si u TERM hè micca stata. Questu hè un prublema in cron, à e in scrittura cgi, chì ùn anu micca definitu TERME. Cusì, deverà stallà chjaramente - à chì tipu hè spessu rilevanzu. Hè solu esse stabbilutu à qualcosa! I seguenti forsi abbastanza per a maiò parte di casi.

set env (TERM) vt100

Tip (verificata solu in BSDI BSD / OS 3.1 i386) si prega si SHELL è HOME ùn sò micca stati. Questu hè un prublema in cron , à e in scrittura cgi , chì ùn definen micca questi varianti di l'ambienti. Cusì, deve settore chjamate chjaramente - à chì tipu hè spessu irrelevante. Hè solu esse stabbilutu à qualcosa! I seguenti forsi abbastanza per a maiò parte di casi.

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

Arcuni implementazioni di ptys sò designati cusì chì u kernel dispensa à qualsiasi lattice senza lume dopu à 10 à 15 seconde (u numeru propiu hè dipendente di implementazione) dopu chì u prucessu hà chjelu u descriptor di schedariu. Cusì eseguisce programmi such as

nascita coppiu u sughjornu 20 pèrdeci

fallimentu. Per evitari chistu, invoca programmi non-interattivi cù cumprà invece di nascita . Mentre ch'elli situazzioni sò cuncepcibili, in a pratica ùn aghju mai una situazione chì a salda finali di un veru prugramma interactivò esse perduta per via di stu cumpurtamentu.

Per d 'altra banda, Cray UNICOS ptys sguassi sparghje ogni risumentu micca leatu dopu à u prucessu chjaru u descriptor di schedariu. Aghju dettu questu Cray è sò travagliatu nantu à una riparazione.

A volte una laguna hè dumandata entre un promptatu è una risposta, cum'è quandu una stazzione intriche è cambiantà a paràmetra UART o appuntamentu i nomi di bassa, cercannu di inizzi / stop bits. Di solitu, tuttu questu hè dumandà esse per dorme per un segundu o dui. Una tecnica più robusta è di riprovisu quandu u hardware hè pronto per riceve l'input. L'esempiu di seguenti utilizanu l'estratèggii:

Mandà "veloce 9600 \ r"; dorme 1 esperanu {timeout {fate "\ r"; exp_continue} $ prompt}

Trap-code ùn hà micca travagliatu cù qualsse cumanda chì si trova in u ciclu di l'eventu di Tcl, cum'è u sonnu. U prublema hè chì in u eventu loop, Tcl descarta i codice di ritornu di i manichi d'asincu. Una solu solu hè di creà una bandiera in u codice di tramuntana. Poi verificate a bandiera immediatament dopu l'cumandamentu (esempiu, u sonnu).

A crescita_customia di rinfresconi ignora l'argumenti in tempu, è ùn hà micca cuncettu di spazii in generale.

& # 34; EXPECT HINTS & # 34;

Ci hè parechje cose chì pensanu chì pudete esse micca intuittivu. Questa sezzioni attempi di trattà alcuni di sti cosi cun parechji suggerimenti.

Una prublema di cuminciare cumuni hè cumu per ricanuscià l'urighjini di corti Perchè sò stati customizati diferentamente per parechji modi è parechji cunti, per automatizà automaticamente rlogin pò esse difficili senza sapè avè u promptatu. Una cunvenzione razove hè di avè l'utilizatori culligate una espressione regulare per descrizzione di a so urdinata (in particulare, a fini di questu) in l'ambizioni variable EXPECT_PROMPT. U codice cum'è seguenti pò esse usatu. Se EXPECT_PROMPT ùn esiste micca, u codice hè sempre una bona chance di funzionà correttu.

set prompt "(% | # | \\ $) $"; # pronostica predeterminata catch {set prompt $ env (EXPECT_PROMPT)} expect -re $ prompt

Fighjulu à scrive l' esperanza di patroni chì includenu u fini di ciò chì vulete vede. Queste evita a pussibilità di risponde à una quistione prima di vedhjanu a tuttu. Inoltre, quand'ellu puderete esse da pudè risponde à e quistione prima di vedianu sighitamenti, se rispose prima, a risposta pò esse ricurdati in u core di a quistione. In altri palori, u di dialogu resultanti serà correttu ma vede scrambled.

A maiò parte ci sò un caratteru spaziu à a fine. Per esempiu, u promptatu da FTP hè 'f', 't', 'p', '>' and. Per fà cù questa promptizzione, devi cuntà per ogni unu di sti caratteri. Hè un sbagliu cumuni per ùn mancu cumpressione u spaziu. Pone a voce in esplicitamente.

Se utilizate un patronu di a forma X *, u * cuntatta cù tutti i risultati rebutu da a fine di X à l'ultimu cosa ricivutu. Cosa sanu intuittivu ma pò esse un pocu cunviziu chì a frasa "ultima cosa ricevuta" pò cambie sicondu a rapidità di l'urdinatore è u trasfurmazioni di I / O cume u kernel è u dispusitore di u device.

In particulare, l'umani tendenu à vede u prugrammu di a prughjettu arrivà in vasti tarmini (atomichi) quandu in a rialità, a maiò parte di i programmi pruduciunu un linu à un tempu. Assuming this is the case, a * in u patronu di u paràgrafu previ ùn sò solu cunnessione cù a fini di a filiera attuale ancu s'ellu pare esse più, perchè à u tempu di u partitu chì era tuttu u prucessu chì era statu ricivutu.

Assicurà ùn hà micca manera di sapè chì sia più risposta venenu da chì u vostru mudellu ùn sia accunsente.

Ancu sicondu u buffering orientatu per line hè impuru. Ùn sò micca scritte micca scritte in rarità di prumetti di u tipu di buffering, ma l'indigestioni di u sistema ponu scumpressà e linii di a risorsa per quessa e linii in u paese aparchifiche. Cusì, se pudete esse spressione l'ultimi caratteri di un promptatu di i mudelli di scrittura, hè sanu di fà.

Sè avete aspittendu un mudellu in l'ultima prugramma di un prugrammu è u prugramanu emetti qualcosa cosa invece, ùn puderà micca esse detta da quì cù u password spartitu. A raghjoni hè chì caghjà ùn esse ellu in timeout - invece vi piglià una indicazione. Utilizà chì invece. Ancu migliori, utilizate dui. Questu manera si quella linea hè mai stata cambiata, ùn avete micca avè editatu a linea in questu.

I Linzii ghjè spessu cuncerti à u ritornu di carru, linefeed sequences quandu u ghjornu da u terminal driver. Cusì, se vulete un patronu chì appiicamenti liegu à i dui fili, da, dì, printf ("foo \ nbar"), avete aduprà u patru "foo \ r \ nbar".

Una traduzzioni simili si faci cù a leghje da l'utilizatore, via expect_user . In questu casu, quandu puderete riturnate, serà traduttu in un novu. Se Ghjuveru esse passatu chì à un prugrammu chì fate u so terminal à u moddu primu (cum'è telnet), ci hè da esse un prublema, chì u prugramma aspetta un regnu veru. (Certi prugrammi si ridughjenu in pettu chì turnaranu automaticamente traduzzione per i ritorni, ma a maiò ùn sò micca.) Sfortunatamente, ùn hè micca manera di sapiri chì un prugrammu u so terminal in u moddu primu.

Invece di manu sustituiri novi lineti cù i ritorni, a suluzione hè di utilizà a cumanda "stty raw", chì fermerà a traduzzione. Nota, però, chistu significa chì ùn avè micca aduprà e funzioni di crescente di linea.

interaccettanu cunfigurazione impliestazione di u vostru terminal à u moddu primu, perchè stu prublema ùn sarà nunda.

Hè spessu utili à almacenà i password (o altra informazioni privata) in Espectate scripte. Questu ùn hè micca cunsigliatu perchè tuttu ciò chì hè guardatu in un ordinariu hè suscettibile à accede à qualchissia. Cusì, intervidendu urighjinariu per i password in un script hè una idea più intelligente chì imbastu è littaralmente. Pò u nostru modu, quellu parechje chjamatu hè a sola pussibilità.

Sfurtunatamente, u sistema di file UNIX ùn hè mancu modu direttu di creà scripte chì sò eseguitate senza esse unreadable. Sistemi chì sustegnu scrittura di casu putgid pò simulà indiretti questu manera:

Crea l'script scupertu (chì cuntene a dati sicreta) com'è solitu. Fate i so permessi sò 750 (-rwxr-x ---) è pussede un gruppu confiali, vale à dì, un gruppu chì hè permessu di leghje. Se necessariu, crea un novu gruppu per questu scopu. Aduprà, create un script / bin / sh con permessi 2751 (-rwxr-s - x) possu di u listessu gruppu cum'è prima.

U risultatu hè un script chì pò esse esercitu (è leggiu) da qualcunu. Quandu invucò, diri u guidanu Spettatu .

& # 34; SOPRESULTÀ ALTA & # 34;

Tcl (3), libexpect (3)
"Esplora Espectante: Una Tcl-Based Toolkit per Automatizazione Programi Interactive" di Don Libes, pp. 602, ISBN 1-56592-090-2, O'Reilly and Associates, 1995.
"Prisentazione: Curing Those Uncontrollable Fits of Interactivity" di Don Libes, Proceedings of the Summer 1990 USENIX Conference, Anaheim, California, 11-15 di suvenu di u 1990.
U "Usannu cresce à automatizà e funzioni amministrazione di sistema" da Don Libes, prucessi di u 1990 U USIX Large Installation Systems Administration Conference, Colorado Springs, Colorado, 17-19 ottobre, 1990.
. I "Tcl: Una Lingua di Commandà Embeddable" di John Ousterhout, Prucessi di l'Invernu 1990 Conferenze USENIX, Washington, DC, 22-26 di jinnaru di u 1990. I "expect: Scripts for Controlling Interactive Programs" di Don Libes, Computing Systems , Vol. 4, No. 2, Università di Californiu Press Journals, Novembre 1991..I "Prughjazione di Regressioni è cumpagni Pruveggi Programe interattivi", da Don Libes, Memorie di l'istati 1992 USENIX Conference, pp. 135-144, San Antonio, TX, 12-15 di suveniu di u 1992. I "Kibitz - Intruduce parechji Programmi interattivi", da Don Libes, Software - Pràtica è Vita, John Wiley & Sons, West Sussex, Inghilterra, Vol.

23, No. 5, maghju, 1993..I "A Debugger for Tcl Applications" di Don Libes, Proceedings of the 1993 Tcl / Tk Workshop, Berkeley, CA, 10-11 di u 10, 1993.

AUTHOR

Don Libes, Istitutu Naziunali di Normi ​​è Tecnulugia

AGNAZZIONI

Grazie à John Ousterhout per Tcl, è Scott Paisley per inspirà. Gratu à Rob Savoye per u còdice di autoconfigurazione di l'Espect.

U schedariu di HISTORIA dispunna assai di l'evoluzione di esperanza . Fai una legatura interessante è pudete darete più insight à stu software. Grazie à e persone chjamatu in questu chì m'hà mandatu bug fixes è dà altre assistenza.

U disignu è l'implementazione di Esse hè statu pagatu in parte da u guvernu EE è hè dunque in u duminiu publicu. In ogni casu l'autore è NIST vogliu micca creditu si stu prugramma è a documentazione o porte di quelli sò usati.