Skip to main content

Mengharapkan Linux / Unix Command Instructions and Examples

Hak5 - Automate Everything, Using Expect, Hak5 1023.1 (Juni 2026)

Hak5 - Automate Everything, Using Expect, Hak5 1023.1 (Juni 2026)
Anonim

Harapkan adalah program yang berbicara dengan program interaktif lainnya sesuai dengan skrip. Mengikuti naskah, Harapkan tahu apa yang dapat diharapkan dari sebuah program dan apa respon yang seharusnya benar. Bahasa yang diinterpretasikan menyediakan struktur kontrol tingkat tinggi dan percabangan untuk mengarahkan dialog. Selain itu, pengguna dapat mengambil kendali dan berinteraksi langsung ketika diinginkan, setelah itu mengembalikan kontrol ke skrip.

Expectk adalah campuran dari Expect dan Tk. Berperilaku seperti harapan Expect dan Tk. Harapkan juga dapat digunakan langsung di C atau C + + tanpa Tcl.

Nama "Mengharapkan" berasal dari gagasan mengirim / mengharapkan urutan dipopulerkan oleh uucp, kermit dan program kontrol modem lainnya. Namun tidak seperti uucp, Expect bersifat umum sehingga dapat dijalankan sebagai perintah tingkat pengguna dengan program dan tugas apa pun. Harapkan dapat berbicara dengan beberapa program pada saat yang bersamaan.

Apa yang Bisa Diharapkan

Sebagai contoh, berikut ini beberapa hal yang dapat dilakukan oleh perintah yang diharapkan:

  • Karena komputer Anda untuk menghubungi Anda kembali, sehingga Anda dapat masuk tanpa membayar panggilan.
  • Mulai permainan dan jika konfigurasi optimal tidak muncul, mulai ulang lagi dan lagi) sampai benar, dan kemudian serahkan kontrol kepada Anda.
  • Jalankan fsck, dan sebagai tanggapan atas pertanyaannya, jawab "ya" atau "tidak" atau berikan kontrol kembali kepada Anda, berdasarkan kriteria yang telah ditentukan.
  • Terhubung ke jaringan lain dan secara otomatis mengambil email Anda sehingga tampak seolah-olah itu awalnya dikirim ke sistem lokal Anda.
  • Membawa variabel lingkungan, direktori saat ini, atau segala jenis informasi di rlogin, telnet, tip, su, atau chgrp

Ada berbagai alasan mengapa shell tidak dapat melakukan tugas-tugas ini. Semua dimungkinkan dengan Expect.

Secara umum, Expect berguna untuk menjalankan program apa pun yang memerlukan interaksi antara program dan pengguna. Semua yang diperlukan adalah interaksi dapat dikarakterisasi secara terprogram. Harapkan juga dapat memberikan kontrol kembali kepada pengguna tanpa menghentikan program yang sedang dikontrol. Demikian pula, pengguna dapat mengembalikan kontrol ke skrip kapan saja.

Pemakaian

Harapkan membaca cmdfile untuk daftar perintah yang akan dieksekusi. Berharap dapat dipanggil secara implisit pada sistem yang mendukung #! notasi dengan menandai skrip sebagai dapat dieksekusi dan membuat baris pertama di skrip:

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

Tentu saja, jalan harus secara akurat menggambarkan di mana Mengharapkan hidup. / usr / local / bin hanyalah sebuah contoh.

Flag -c menandai perintah yang akan dieksekusi sebelum skrip apa pun. Perintah harus dikutip untuk mencegah dipecahkan oleh shell. Opsi ini dapat digunakan beberapa kali. Beberapa perintah dapat dijalankan dengan satu -c dengan memisahkannya dengan titik koma. Perintah dijalankan sesuai urutannya. Saat menggunakan Expectk, opsi ini ditetapkan sebagai perintah.

Flag -d memungkinkan beberapa output diagnostik, yang terutama melaporkan aktivitas internal dari perintah seperti mengharapkan dan berinteraksi. Bendera ini memiliki efek yang sama dengan "exp_internal 1" di awal skrip Expect, ditambah versi Expect yang dicetak.

Bendera -D memungkinkan debugger interaktif. Nilai bilangan bulat harus mengikuti. Debugger akan mengambil kendali sebelum prosedur Tcl berikutnya jika nilainya nol atau jika ^ C ditekan atau breakpoint dipukul, atau perintah debugger lain yang sesuai muncul di skrip. Saat menggunakan Expectk, opsi ini ditetapkan sebagai -Debug.

Flag -f menampilkan file untuk membaca perintah. Bendera itu sendiri opsional karena hanya berguna ketika menggunakan #! notasi, sehingga argumen lain dapat diberikan pada baris perintah. Saat menggunakan Expectk, opsi ini ditentukan sebagai -file.

Secara default, file perintah dibaca ke dalam memori dan dieksekusi secara keseluruhan. Kadang-kadang diinginkan untuk membaca file satu baris dalam satu waktu. Untuk memaksa file sewenang-wenang ditangani dengan cara ini, gunakan tanda -b. Saat menggunakan Expectk, opsi ini ditetapkan sebagai -buffer.

Jika string "-" diberikan sebagai nama file, masukan standar dibaca sebagai gantinya. Gunakan "./-" untuk membaca dari sebuah file yang sebenarnya bernama "-".

Flag -i menyebabkan Mengharapkan untuk secara interaktif meminta perintah daripada membacanya dari file. Prompting diakhiri melalui perintah keluar atau pada EOF. Flag -i diasumsikan jika file perintah maupun -c tidak digunakan. Saat menggunakan Expectk, opsi ini ditetapkan sebagai -interaktif.

- dapat digunakan untuk membatasi ujung opsi. Ini berguna jika Anda ingin memberikan argumen pilihan ke skrip Anda tanpa ditafsirkan oleh Expect. Ini berguna ditempatkan di #! baris untuk mencegah interpretasi seperti bendera oleh Mengharapkan. Sebagai contoh, berikut ini akan meninggalkan argumen asli termasuk nama skrip dalam variabel argv .

#! / usr / local / bin / harapkan -

Perhatikan bahwa getopt biasa (3) dan eksekusi (2) konvensi harus diperhatikan saat menambahkan argumen ke #! baris.

File $ exp_library / expect.rc diambil secara otomatis jika ada, kecuali flag -N digunakan. (Saat menggunakan Expectk, opsi ini ditetapkan sebagai -NORC.) Segera setelah ini, file ~ / .expect.rc diambil secara otomatis, kecuali jika -n flag digunakan. Jika variabel lingkungan DOTDIR didefinisikan, ia diperlakukan sebagai direktori dan .expect.rc dibaca dari sana. Saat menggunakan Expectk, opsi ini ditetapkan sebagai -norc.Sumber ini hanya terjadi setelah mengeksekusi setiap flag -c.

-v menyebabkan Berharap untuk mencetak nomor versi dan keluar. Bendera yang sesuai di Expectk, yang menggunakan nama-nama bendera panjang, adalah -versi.

Argumen opsional dikonstruksikan ke dalam daftar dan disimpan dalam variabel bernama argv dan. argc diinisialisasi ke panjang argv.

Argv0 didefinisikan sebagai nama skrip atau biner jika tidak ada skrip yang digunakan. Sebagai contoh, berikut ini mencetak nama skrip dan tiga argumen pertama:

send_user "$ argv0 lrange $ argv 0 2 n"

Perintah

Harapkan menggunakan Bahasa Komando Alat. Tcl menyediakan aliran kontrol (jika, untuk, istirahat), evaluasi ekspresi dan beberapa fitur lain seperti definisi rekursif dan prosedur. Perintah yang digunakan di sini tetapi tidak didefinisikan (set, if, exec) adalah perintah Tcl. Harapkan mendukung perintah tambahan. Kecuali ditentukan lain, perintah mengembalikan string kosong.

Perintah-perintah dicantumkan menurut abjad sehingga dapat ditemukan dengan cepat. Namun, pengguna baru mungkin merasa lebih mudah untuk memulai dengan membaca deskripsi bertelur, kirim, harapkan, dan berinteraksi, dalam urutan itu.

tutup -slave -onexec 0 | 1 -i spawn_id

menutup koneksi ke proses saat ini. Kebanyakan program interaktif akan mendeteksi EOF pada stdin mereka dan keluar; demikian dekat biasanya sudah cukup untuk membunuh prosesnya juga. Flag -i menyatakan proses untuk menutup terkait dengan spawn_id yang dinamai.

Baik mengharapkan dan berinteraksi akan mendeteksi ketika proses saat ini keluar dan secara implisit melakukan penutupan, tetapi jika Anda membunuh proses dengan, katakanlah, "exec kill $ pid", Anda perlu secara eksplisit memanggil tutup.

Flag -onexec menentukan apakah id spawn ditutup dalam proses melahirkan baru atau jika prosesnya dihamparkan. Untuk membiarkan pembukaan bibit terbuka, gunakan nilai 0. Nilai integer non-nol memaksa pemijahan ditutup di setiap proses baru.

Bendera -lembaran menutup budak yang terkait dengan id bibit. Ketika koneksi ditutup, budak secara otomatis ditutup juga jika masih terbuka.

Tidak masalah apakah koneksi ditutup secara implisit atau eksplisit, Anda harus menelepon menunggu untuk menjernihkan slot proses kernel terkait. Perintah tutup tidak memanggil tunggu karena tidak ada jaminan bahwa menutup koneksi proses akan menyebabkannya untuk keluar.

debug -now 0 | 1

mengontrol debugger Tcl memungkinkan Anda untuk melangkah melalui pernyataan dan mengatur breakpoint.

Tanpa argumen, 1 dikembalikan jika debugger tidak berjalan, jika tidak, 0 dikembalikan.

Dengan 1 argumen, debugger dimulai. Dengan 0 argumen, debugger dihentikan. Jika 1 argumen didahului oleh bendera -sekarang, debugger dimulai segera. Jika tidak, debugger dimulai dengan pernyataan Tcl berikutnya.

Perintah debug tidak mengubah perangkap apa pun. Bandingkan ini untuk memulai Mengharapkan dengan bendera -D.

Perintah disconnect memutuskan proses bercabang dari terminal. Ini terus berjalan di latar belakang. Proses ini diberikan kelompok prosesnya sendiri. I / O standar dialihkan ke / dev / null.

Fragmen berikut menggunakan putuskan untuk terus menjalankan skrip di latar belakang.

jika {garpu! = 0} putuskan keluar. . .

Skrip berikut membaca kata sandi dan kemudian menjalankan program setiap jam yang menuntut kata sandi setiap kali dijalankan. Skrip menyediakan kata sandi sehingga Anda hanya perlu mengetiknya satu kali.

send_user "password? " expect_user-re "(. *) n" untuk {} 1 {} {if {garpu! = 0} {sleep 3600; lanjutkan} putuskan spawn priv_prog harapkan Kata Sandi: kirim "$ expect_out ( 1, string) r ". . . keluar }

Keuntungan menggunakan disconnect over shell asynchronous process feature (&) adalah bahwa Expect dapat menyimpan parameter terminal sebelum pemutusan dan kemudian menerapkannya ke ptys baru. Dengan &, Expect tidak memiliki kesempatan untuk membaca parameter terminal karena terminal sudah terputus pada saat Expect menerima kontrol.

keluar -tsts status

menyebabkan Berharap untuk keluar atau bersiap-siap untuk melakukannya.

Itu -satuxit Bendera menyebabkan argumen berikutnya digunakan sebagai handler keluar. Tanpa argumen, penangan keluar saat ini dikembalikan.

Itu -tidak ada jalan keluar penyebab bendera Mengharapkan bersiap-siap untuk keluar tetapi tidak sampai benar-benar mengembalikan kontrol ke sistem operasi. Handler keluar yang ditentukan pengguna dijalankan serta penangan internal Ekspektasi sendiri. Tidak ada perintah Expect selanjutnya yang harus dieksekusi. Ini berguna jika Anda menjalankan Expect dengan ekstensi Tcl lainnya. Interpreter saat ini (dan jendela utama jika dalam lingkungan Tk) tetap sehingga ekstensi Tcl lainnya dapat dibersihkan. Jika Diharapkan keluar disebut lagi (namun ini mungkin terjadi), penangan tidak mengulang.

Setelah keluar, semua koneksi ke proses yang menghasilkan ditutup. Penutupan akan terdeteksi sebagai EOF dengan proses yang dibuat-buat. keluar tidak mengambil tindakan lain di luar apa yang dilakukan prosedur normal _exit (2). Dengan demikian, proses menelurkan yang tidak memeriksa EOF dapat terus berjalan. (Berbagai kondisi penting untuk menentukan, misalnya, apa sinyal yang proses melahirkan akan dikirim, tetapi ini tergantung pada sistem, biasanya didokumentasikan di bawah pintu keluar (3).) Proses spawn yang terus berjalan akan diwariskan oleh init.

status (atau 0 jika tidak ditentukan) dikembalikan sebagai status keluar dari Mengharapkan . keluar secara implisit dieksekusi jika akhir skrip tercapai.

exp_continue -continue_timer

Perintah exp_continue memungkinkan mengharapkan sendiri untuk terus mengeksekusi daripada kembali seperti biasanya. Secara default exp_continue me-reset timer timeout. Itu -continue_timer flag mencegah pengatur waktu dimulai ulang. (Lihat mengharapkan untuk informasi lebih lanjut.)

nilai exp_internal -f file

menyebabkan perintah lebih lanjut untuk mengirim informasi diagnostik internal ke Mengharapkan untuk stderr jika nilai tidak nol. Output ini dinonaktifkan jika nilai adalah 0. Informasi diagnostik mencakup setiap karakter yang diterima, dan setiap upaya yang dilakukan untuk mencocokkan keluaran saat ini dengan pola.

Jika opsional mengajukan disediakan, semua output normal dan debugging ditulis ke file itu (terlepas dari nilainya nilai ). File output diagnostik sebelumnya ditutup.

Itu -info flag menyebabkan exp_internal untuk mengembalikan deskripsi dari argumen non-info terbaru yang diberikan.

exp_open args -i spawn_id

mengembalikan pengidentifikasi file Tcl yang sesuai dengan id bibit asli. Pengenal file kemudian dapat digunakan seolah dibuka oleh Tcl Buka perintah. (Id bertelur tidak boleh digunakan lagi Tunggu seharusnya tidak dieksekusi.

Itu -biarkan terbuka flag meninggalkan id bibit terbuka untuk diakses melalui perintah Expect. SEBUAH Tunggu harus dieksekusi pada id bibit.

exp_pid -i spawn_id

mengembalikan id proses yang terkait dengan proses yang saat ini telah dibuat. Jika itu -saya digunakan, pid kembali sesuai dengan spawn id yang diberikan.

exp_send

adalah alias untuk Kirim .

exp_send_error

adalah alias untuk send_error .

exp_send_log

adalah alias untuk send_log .

exp_send_tty

adalah alias untuk send_tty .

exp_send_user

adalah alias untuk send_user .

exp_version -exit versi

berguna untuk memastikan bahwa skrip kompatibel dengan versi Harapan saat ini.

Tanpa argumen, versi saat ini Mengharapkan dikembalikan. Versi ini kemudian dapat dikodekan dalam skrip Anda. Jika Anda benar-benar tahu bahwa Anda tidak menggunakan fitur versi terbaru, Anda dapat menentukan versi sebelumnya.

Versi terdiri dari tiga angka yang dipisahkan oleh titik-titik. Pertama adalah angka utama. Skrip yang ditulis untuk versi Mengharapkan dengan nomor utama yang berbeda hampir pasti tidak akan berfungsi. exp_version mengembalikan kesalahan jika nomor utama tidak cocok.

Kedua adalah nomor kecil. Skrip yang ditulis untuk versi dengan jumlah minor yang lebih besar daripada versi saat ini mungkin bergantung pada beberapa fitur baru dan mungkin tidak berjalan. exp_version mengembalikan kesalahan jika nomor besar cocok, tetapi skrip nomor minor lebih besar daripada yang berjalan Mengharapkan .

Ketiga adalah angka yang tidak memainkan bagian dalam perbandingan versi. Namun, itu bertambah ketika Mengharapkan distribusi perangkat lunak diubah dengan cara apa pun, seperti dengan dokumentasi atau pengoptimalan tambahan. Ini diatur ulang ke 0 pada setiap versi minor baru.

Dengan -keluar bendera, Mengharapkan mencetak kesalahan dan keluar jika versinya kedaluwarsa.

harapkan -opts pat1 body1 … -opts patn bodyn

menunggu hingga salah satu pola sesuai dengan output proses yang telah dibuat, jangka waktu yang ditentukan telah berlalu, atau akhir-file dilihat. Jika tubuh final kosong, itu mungkin dihilangkan.

Pola dari yang terbaru expect_before perintah secara implisit digunakan sebelum pola lainnya. Pola dari yang terbaru expect_after perintah secara implisit digunakan setelah pola lainnya.

Jika argumen ke seluruh mengharapkan Pernyataan membutuhkan lebih dari satu baris, semua argumen dapat "diperkuat" menjadi satu sehingga untuk menghindari mengakhiri setiap baris dengan backslash. Dalam kasus yang satu ini, substitusi Tcl yang biasa akan terjadi meskipun kawat gigi.

Jika suatu pola adalah kata kunci eof , tubuh yang sesuai dijalankan pada akhir file. Jika suatu pola adalah kata kunci waktu habis , tubuh yang sesuai dieksekusi pada waktu habis. Jika tidak ada kata kunci timeout yang digunakan, tindakan null implisit dieksekusi pada waktu habis. Periode waktu default adalah 10 detik tetapi dapat diatur, misalnya ke 30, dengan perintah "tetapkan batas waktu 30". Batas waktu tak terbatas dapat ditentukan oleh nilai -1. Jika suatu pola adalah kata kunci default , tubuh yang sesuai dijalankan pada waktu habis atau akhir file.

Jika sebuah pola cocok, maka tubuh yang bersangkutan dieksekusi. mengharapkan mengembalikan hasil dari tubuh (atau string kosong jika tidak ada pola yang cocok). Dalam hal beberapa pola cocok, yang pertama muncul digunakan untuk memilih tubuh.

Setiap kali output baru tiba, itu dibandingkan dengan setiap pola dalam urutan yang terdaftar. Dengan demikian, Anda dapat menguji apakah tidak ada kecocokan dengan membuat pola terakhir sesuatu yang dijamin akan muncul, seperti prompt. Dalam situasi di mana tidak ada perintah, Anda harus menggunakannya waktu habis (seperti yang Anda lakukan jika Anda berinteraksi secara manual).

Pola ditentukan dalam tiga cara. Secara default, pola ditentukan seperti dengan Tcl pertandingan string perintah. (Pola seperti ini juga mirip dengan ekspresi reguler C-shell yang biasanya disebut sebagai pola "glob"). Itu -gl Bendera dapat digunakan untuk melindungi pola yang mungkin cocok mengharapkan bendera dari melakukannya. Pola apa pun yang diawali dengan "-" harus dilindungi dengan cara ini. (Semua string yang dimulai dengan "-" dicadangkan untuk opsi mendatang.)

Misalnya, fragmen berikut mencari proses masuk yang berhasil. (Perhatikan itu menggugurkan dianggap sebagai prosedur yang didefinisikan di tempat lain dalam skrip.)

harapkan {busy {puts busy n; exp_continue} gagal membatalkan "invalid password" membatalkan batas waktu abort tersambung}

Kutipan diperlukan pada pola keempat karena berisi spasi, yang akan memisahkan pola dari tindakan.Pola dengan aksi yang sama (seperti ke-3 dan ke-4) membutuhkan daftar tindakan lagi. Ini dapat dihindari dengan menggunakan pola gaya regexp (lihat di bawah). Informasi lebih lanjut tentang pembentukan pola gaya-glob dapat ditemukan dalam manual Tcl.

Pola gaya-regex mengikuti sintaks yang ditentukan oleh Tcl regexp (kependekan dari perintah "regular expression"). pola regexp diperkenalkan dengan bendera -kembali . Contoh sebelumnya dapat ditulis ulang menggunakan regexp sebagai:

harapkan {busy {puts busy n; exp_continue} -re "gagal | kata sandi tidak valid" batalkan timeout abort tersambung}

Kedua jenis pola "tidak dipasarkan". Ini berarti bahwa pola tidak harus cocok dengan seluruh string, tetapi dapat memulai dan mengakhiri pertandingan di mana saja dalam string (asalkan semuanya sesuai). Gunakan ^ untuk mencocokkan awal string, dan $ untuk mencocokkan bagian akhir. Perhatikan bahwa jika Anda tidak menunggu akhir dari suatu string, respons Anda dapat dengan mudah berakhir di tengah-tengah string saat mereka di-echo dari proses pembiakan. Meskipun masih menghasilkan hasil yang benar, hasilnya bisa terlihat tidak alami. Dengan demikian, penggunaan $ didorong jika Anda bisa menggambarkan karakter pada akhir string.

Perhatikan bahwa di banyak editor, yang ^ dan $ mencocokkan awal dan akhir baris masing-masing. Namun, karena mengharapkan tidak berorientasi baris, karakter ini cocok dengan awal dan akhir data (sebagai lawan dari garis) saat ini dalam buffer pencocokan yang sesuai. (Juga, lihat catatan di bawah ini pada "gangguan pencernaan sistem.")

Itu -ex Bendera menyebabkan pola dicocokkan sebagai string "tepat". Tidak ada interpretasi *, ^, dll yang dibuat (meskipun konvensi Tcl yang biasa harus tetap diperhatikan). Pola yang tepat selalu tidak digarap.

Itu -nocase Bendera menyebabkan karakter huruf besar dari output untuk membandingkan seolah-olah mereka karakter huruf kecil. Polanya tidak terpengaruh.

Saat membaca output, lebih dari 2000 byte dapat memaksa byte sebelumnya menjadi "terlupakan". Ini dapat diubah dengan fungsi match_max . (Perhatikan bahwa nilai-nilai yang terlalu besar dapat memperlambat matcher pola.) Jika patlist aku s full_buffer , tubuh yang sesuai dieksekusi jika match_max byte telah diterima dan tidak ada pola lain yang cocok. Apakah atau tidak full_buffer kata kunci digunakan, karakter yang terlupakan ditulis ke expect_out (buffer).

Jika patlist adalah kata kuncinya batal , dan nulls diperbolehkan (melalui remove_nulls perintah), tubuh yang sesuai dijalankan jika ASCII 0 tunggal dicocokkan. Tidak mungkin mencocokkan 0 byte melalui pola glob atau regexp.

Setelah mencocokkan pola (atau eof atau full_buffer), setiap output yang cocok dan sebelumnya tidak cocok disimpan dalam variabel expect_out (penyangga) . Hingga 9 pertandingan substring regexp disimpan dalam variabel expect_out (1, string) melalui expect_out (9, string) . Jika itu -indeks bendera digunakan sebelum pola, indeks awal dan akhir (dalam bentuk yang cocok untuk lrange ) dari 10 string disimpan dalam variabel expect_out (X, mulai) dan expect_out (X, akhir) di mana X adalah digit, sesuai dengan posisi substring di buffer. 0 mengacu pada string yang cocok dengan seluruh pola dan dihasilkan untuk pola glob serta pola regexp. Sebagai contoh, jika suatu proses telah menghasilkan output "abcdefgh n", hasil dari:

berharap "cd"

seolah-olah pernyataan berikut telah dieksekusi:

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

dan "efgh n" tersisa di buffer output. Jika suatu proses menghasilkan output "abbbcabkkkka n", hasil dari:

harapkan -indeks-b "b (b *). * (k +)"

seolah-olah pernyataan berikut telah dieksekusi:

set expect_out (0, mulai) 1 set expect_out (0, end) 10 set expect_out (0, string) bbbcabkkkk set expect_out (1, mulai) 2 set expect_out (1, end) 3 set expect_out (1, string) bb set expect_out (2, mulai) 10 set expect_out (2, akhir) 10 set expect_out (2, string) k set expect_out (buffer) abbbcabkkkk

dan "a n" tersisa di buffer output. Pola "*" (dan -re ". *") Akan menyiram buffer output tanpa membaca output lagi dari proses.

Biasanya, output yang cocok dibuang dari buffer internal Expect. Ini dapat dicegah dengan mengawali pola dengan -bukukan transfer bendera. Bendera ini sangat berguna dalam bereksperimen (dan dapat disingkat menjadi "-tidak" untuk kenyamanan saat bereksperimen).

ID spawn yang terkait dengan output yang cocok (atau eof atau full_buffer) disimpan di expect_out (spawn_id) .

Itu -waktu habis flag menyebabkan perintah ekspektasi saat ini untuk menggunakan nilai berikut sebagai timeout daripada menggunakan nilai dari variabel timeout.

Secara default, pola dicocokkan dengan output dari proses saat ini, namun -saya Bendera menyatakan output dari daftar spawn_id yang dinamakan akan dicocokkan dengan pola berikut (hingga yang berikutnya -saya ). Daftar spawn_id harus berupa daftar spawn_ids yang dipisahkan spasi atau variabel yang merujuk pada daftar spawn_id tersebut.

Sebagai contoh, contoh berikut menunggu "terhubung" dari proses saat ini, atau "sibuk", "gagal" atau "kata sandi tidak sah" dari spawn_id yang dinamai oleh $ proc2.

berharap {-i $ proc2 sibuk {menempatkan sibuk n; exp_continue} -re "gagal | kata sandi tidak valid" batalkan timeout abort tersambung}

Nilai variabel global any_spawn_id dapat digunakan untuk mencocokkan pola ke setiap spawn_ids yang diberi nama dengan yang lain -saya bendera dalam arus mengharapkan perintah. The spawn_id dari a -saya bendera tanpa pola terkait (yaitu, diikuti segera oleh yang lain -saya ) tersedia untuk pola lain yang sama mengharapkan perintah yang terkait dengan any_spawn_id.

Itu -saya Bendera juga dapat menamai variabel global yang dalam hal ini variabel dibaca untuk daftar ID bibit. Variabel tersebut membaca ulang kapan pun berubah. Ini menyediakan cara mengubah sumber I / O saat perintah sedang dieksekusi. Id bertelur disediakan dengan cara ini disebut "bibit bertelur" tidak langsung.

Tindakan seperti istirahat dan terus menyebabkan struktur kontrol (yaitu, untuk , proc ) untuk berperilaku seperti biasa. Perintah exp_continue memungkinkan mengharapkan sendiri untuk terus mengeksekusi daripada kembali seperti biasanya.

Ini berguna untuk menghindari loop eksplisit atau pernyataan harapan berulang. Contoh berikut adalah bagian dari fragmen untuk mengotomatiskan rlogin. Itu exp_continue menghindari harus menulis kedua mengharapkan pernyataan (untuk mencari prompt lagi) jika rlogin meminta kata sandi.

harapkan kata sandi {Password: {stty -echo send_user "(untuk $ user) pada $ host:" expect_user-re "(. *) n" send_user " n" kirim "$ expect_out (1, string) r" stty echo exp_continue} kesalahan {send_user "kata sandi atau akun tidak valid n" exit} timeout {send_user "koneksi ke $ host habis n" exit} eof {send_user "koneksi ke host gagal: $ expect_out (buffer)" exit} - kembali $ prompt}

Misalnya, fragmen berikut mungkin membantu pengguna memandu interaksi yang sudah sepenuhnya otomatis. Dalam hal ini, terminal dimasukkan ke mode mentah. Jika pengguna menekan "+", variabel bertambah. Jika "p" ditekan, beberapa pengembalian dikirim ke proses, mungkin untuk memicunya dalam beberapa cara, dan "i" memungkinkan pengguna berinteraksi dengan proses, secara efektif mencuri kontrol dari skrip. Dalam setiap kasus, itu exp_continue memungkinkan arus mengharapkan untuk melanjutkan pencocokan pola setelah mengeksekusi tindakan saat ini.

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

Secara default, exp_continue me-reset timer timeout. Pengatur waktu tidak dimulai kembali, jika exp_continue dipanggil dengan -continue_timer bendera.

expect_after expect_args

bekerja secara identik dengan expect_before kecuali itu jika pola dari keduanya mengharapkan dan expect_after bisa cocok, the mengharapkan pola digunakan. Lihat expect_before perintah untuk informasi lebih lanjut.

expect_background expect_args

mengambil argumen yang sama denganmengharapkan Namun, itu segera kembali. Pola diuji setiap kali masukan baru tiba. Polawaktu habis dandefault tidak ada artinyaexpect_background dan diam-diam dibuang. Jika tidak, ituexpect_background perintah digunakanexpect_before danexpect_after pola sepertimengharapkan tidak.

Kapanexpect_background tindakan sedang dievaluasi, pemrosesan latar belakang untuk id bibit yang sama diblokir. Pemrosesan latar belakang tidak terblokir saat tindakan selesai. Sementara pemrosesan latar belakang diblokir, dimungkinkan untuk melakukan (latar depan)mengharapkan pada id bibit yang sama.

Tidak mungkin untuk mengeksekusimengharapkan sementara sebuahexpect_background tidak diblokir.expect_background untuk ID spawn tertentu dihapus dengan mendeklarasikan expect_background baru dengan id bibit yang sama. Mendeklarasikanexpect_background tanpa pola menghilangkan id spawn yang diberikan dari kemampuan untuk mencocokkan pola di latar belakang.

expect_before expect_args

mengambil argumen yang sama denganmengharapkan Namun, itu segera kembali. Pola-pola pasang dari yang terbaruexpect_before dengan id bibit yang sama secara implisit ditambahkan ke setiap pengikutmengharapkan perintah. Jika sebuah pola cocok, itu diperlakukan seolah-olah itu telah ditentukan dalammengharapkan perintah itu sendiri, dan badan yang terkait dieksekusi dalam konteksmengharapkan perintah. Jika pola dari keduanyaexpect_before danmengharapkan bisa cocok, theexpect_before pola digunakan.

Jika tidak ada pola yang ditentukan, ID spawn tidak dicentang untuk pola apa pun.

Kecuali ditimpa oleh-saya bendera,expect_before sesuai dengan pola menelurkan id yang didefinisikan pada saat ituexpect_before perintah dieksekusi (bukan ketika polanya cocok).

Penyebab -info menyebabkanexpect_before untuk mengembalikan spesifikasi saat ini dari pola apa yang akan cocok. Secara default, ia melaporkan id bibit saat ini. Spesifikasi spawn id opsional dapat diberikan untuk informasi tentang spawn id tersebut. Sebagai contoh

expect_before -info -i $ proc

Paling banyak satu spesifikasi spawn id dapat diberikan. Bendera-langsung menekan id bibit langsung yang datang hanya dari spesifikasi tidak langsung.

Alih-alih spesifikasi spawn id, bendera "-all" akan menyebabkan "-info" melaporkan semua id spawn.

Output dari flag -info dapat digunakan kembali sebagai argumen yang diharapkan sebelumnya.

expect_tty expect_args

sepertimengharapkan tetapi membaca karakter dari / dev / tty (yaitu penekanan tombol dari pengguna). Secara default, pembacaan dilakukan dalam mode matang. Jadi, garis harus diakhiri dengan kembali untukmengharapkan untuk melihat mereka. Ini dapat diubah melaluistty (lihatstty perintah di bawah).

expect_user expect_args

sepertimengharapkan tetapi membaca karakter dari stdin (yaitu penekanan tombol dari pengguna). Secara default, pembacaan dilakukan dalam mode matang. Jadi, garis harus diakhiri dengan kembali untukmengharapkan untuk melihat mereka.Ini dapat diubah melaluistty (lihatstty perintah di bawah).

garpu

menciptakan proses baru. Proses baru adalah salinan persis dari arusMengharapkan proses. Pada kesuksesan,garpu mengembalikan 0 ke proses (anak) baru dan mengembalikan ID proses dari proses anak ke proses induk. Kegagalan (biasanya karena kurangnya sumber daya, misalnya, ruang swap, memori),garpu mengembalikan -1 ke proses induk, dan tidak ada proses anak yang dibuat.

Proses bercabang keluar melaluikeluar perintah, sama seperti proses aslinya. Proses bercabang diizinkan untuk menulis ke file log. Jika Anda tidak menonaktifkan debugging atau masuk ke sebagian besar proses, hasilnya bisa membingungkan.

Beberapa penerapan pty mungkin membingungkan oleh banyak pembaca dan penulis, bahkan untuk sementara. Jadi, paling aman untukgarpu sebelum proses pemijahan.

berinteraksi string1 body1 … stringn bodyn

memberikan kontrol dari proses saat ini kepada pengguna, sehingga penekanan tombol dikirim ke proses saat ini, dan stdout dan stderr dari proses saat ini dikembalikan.

Pasangan tali-tubuh dapat ditentukan sebagai argumen, dalam hal ini tubuh dieksekusi ketika string yang sesuai dimasukkan. (Secara default, string tidak dikirim ke proses saat ini.) Thepenerjemah perintah diasumsikan, jika badan terakhir hilang.

Jika argumen ke seluruhberinteraksi Pernyataan membutuhkan lebih dari satu baris, semua argumen dapat "diperkuat" menjadi satu sehingga untuk menghindari mengakhiri setiap baris dengan backslash. Dalam kasus yang satu ini, substitusi Tcl yang biasa akan terjadi meskipun kawat gigi.

Sebagai contoh, perintah berikut berjalan berinteraksi dengan pasangan string-body berikut: Ketika ^ Z ditekan,Mengharapkan ditangguhkan. (Itu-reset flag mengembalikan mode terminal.) Ketika ^ A ditekan, pengguna melihat "Anda mengetikkan kontrol-A" dan proses dikirim a ^ A. Ketika $ ditekan, pengguna melihat tanggal. Ketika ^ C ditekan,Mengharapkan keluar. Jika "foo" dimasukkan, pengguna melihat "bar". Ketika ~~ ditekan,Mengharapkan interpreter berjalan secara interaktif.

mengatur CTRLZ 032 berinteraksi {-reset $ CTRLZ {exec kill -STOP pid} 001 {send_user "Anda mengetik kontrol-A n"; kirim " 001"} $ {send_user "Tanggal adalah format jam jam detik."} 003 keluar foo {send_user "bar"} ~~}

Dalam pasangan string-body, string-string dicocokkan dalam urutan mereka terdaftar sebagai argumen. String yang sebagian cocok tidak dikirim ke proses saat ini sebagai antisipasi sisa yang datang. Jika karakter kemudian dimasukkan sehingga tidak mungkin ada kecocokan lagi, hanya bagian dari string yang akan dikirim ke proses yang tidak mungkin memulai pertandingan lain. Jadi, string yang merupakan substring dari pertandingan parsial dapat cocok nanti, jika string asli yang dicoba untuk cocok pada akhirnya gagal.

Secara default, pencocokan string tepat tanpa wild card. (Sebaliknya,mengharapkan perintah menggunakan pola gaya-glob secara default.)-ex bendera dapat digunakan untuk melindungi pola yang mungkin cocokberinteraksi bendera dari melakukannya. Pola apa pun yang diawali dengan "-" harus dilindungi dengan cara ini. (Semua string yang dimulai dengan "-" dicadangkan untuk opsi mendatang.)

Itu-kembali flag memaksa string untuk ditafsirkan sebagai pola gaya regexp. Dalam hal ini, pencocokan substring disimpan dalam variabel interact_out mirip dengan jalannyamengharapkan menyimpan outputnya dalam variabelexpect_out . Itu-indeks Bendera juga didukung.

Polaeof memperkenalkan tindakan yang dijalankan pada akhir file. Yang terpisaheof pola mungkin juga mengikuti-keluaran Bendera dalam hal ini dicocokkan jika eof terdeteksi saat menulis output. Defaultnyaeof tindakan adalah "kembali", jadi ituberinteraksi hanya mengembalikan pada setiap EOF.

Polawaktu habis memperkenalkan batas waktu (dalam detik) dan tindakan yang dijalankan setelah tidak ada karakter yang telah dibaca untuk waktu tertentu. Ituwaktu habis pola berlaku untuk proses yang baru-baru ini ditentukan. Tidak ada batas waktu default. "Batas waktu" variabel khusus (digunakan olehmengharapkan perintah) tidak berpengaruh pada batas waktu ini.

Misalnya, pernyataan berikut dapat digunakan untuk autologout pengguna yang belum mengetik apa pun selama satu jam tetapi yang masih mendapatkan pesan sistem sering:

interact-input $ user_spawn_id timeout 3600 return -output $ spawn_id

Jika polanya adalah kata kuncibatal , dan nulls diperbolehkan (melaluiremove_nulls perintah), tubuh yang sesuai dijalankan jika ASCII 0 tunggal dicocokkan. Tidak mungkin mencocokkan 0 byte melalui pola glob atau regexp.

Prefacing pola dengan bendera-saya menulis menyebabkan variabel interact_out (spawn_id) untuk diatur ke spawn_id yang cocok dengan pola (atau eof).

Tindakan sepertiistirahat danterus menyebabkan struktur kontrol (yaitu,untuk , proc ) untuk berperilaku seperti biasa. Namunkembali menyebabkan berinteraksi untuk kembali ke pemanggilnya, sementarainter_return penyebabberinteraksi menyebabkan kembalinya pemanggilnya. Misalnya, jika "proc foo" dipanggilberinteraksi yang kemudian dieksekusiinter_return , proc foo akan kembali. (Ini berarti bahwa jikaberinteraksi panggilanpenerjemah mengetik secara interaktifkembali akan menyebabkan interaksi berlanjut, sementarainter_return akan menyebabkan interaksi kembali ke pemanggilnya.)

Selamaberinteraksi , mode mentah digunakan sehingga semua karakter dapat dilewatkan ke proses saat ini.Jika proses saat ini tidak menangkap sinyal kontrol pekerjaan, itu akan berhenti jika mengirim sinyal berhenti (secara default ^ Z). Untuk memulai ulang, kirim sinyal terus (seperti dengan "kill -CONT"). Jika Anda benar-benar ingin mengirim SIGSTOP ke proses semacam itu (oleh ^ Z), pertimbangkan untuk memijah csh terlebih dahulu dan kemudian jalankan program Anda. Di sisi lain, jika Anda ingin mengirim SIGSTOP keMengharapkan sendiri, pertama panggil interpreter (mungkin dengan menggunakan karakter escape), lalu tekan ^ Z.

Pasangan string-body dapat digunakan sebagai singkatan untuk menghindari keharusan memasukkan interpreter dan mengeksekusi perintah secara interaktif. Mode terminal sebelumnya digunakan ketika tubuh pasangan string-body sedang dieksekusi.

Untuk kecepatan, tindakan dijalankan dalam mode mentah secara default. Itu-reset flag me-reset terminal ke mode yang dimilikinya sebelumnyaberinteraksi dieksekusi (selalu, mode matang). Perhatikan bahwa karakter yang dimasukkan ketika mode sedang dialihkan mungkin hilang (fitur yang tidak menguntungkan dari driver terminal pada beberapa sistem). Satu-satunya alasan untuk digunakan-reset adalah jika tindakan Anda bergantung pada berjalan dalam mode matang.

Itu-gema flag mengirimkan karakter yang cocok dengan pola berikut kembali ke proses yang menghasilkan mereka ketika setiap karakter dibaca. Ini mungkin berguna ketika pengguna perlu melihat umpan balik dari pola yang diketik sebagian.

Jika pola sedang digemakan tetapi akhirnya gagal untuk mencocokkan, karakter dikirim ke proses melahirkan. Jika proses melahirkan kemudian menggemakan mereka, pengguna akan melihat karakter dua kali.-gema mungkin hanya sesuai dalam situasi di mana pengguna tidak mungkin untuk tidak melengkapi pola. Sebagai contoh, kutipan berikut berasal dari rftp, skrip rekursif-ftp, di mana pengguna diminta untuk memasukkan ~ g, ~ p, atau ~ l, untuk mendapatkan, meletakkan, atau daftar direktori saat ini secara rekursif. Ini sangat jauh dari perintah ftp normal, bahwa pengguna tidak mungkin mengetik ~ diikuti oleh hal lain, kecuali keliru, dalam hal ini, mereka mungkin hanya mengabaikan hasilnya.

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

Itu-nobuffer flag mengirimkan karakter yang cocok dengan pola berikut ke proses output saat karakter dibaca.

Ini berguna ketika Anda ingin membiarkan suatu program menggemakan kembali pola tersebut. Misalnya, yang berikut ini mungkin digunakan untuk memantau di mana seseorang melakukan panggilan (modem bergaya Hayes). Setiap kali "atd" terlihat skrip masuk ke baris selanjutnya.

proc lognumber {} {interact -nobuffer-re "(. *) r" return puts $ log "format jam jam detik: dihubungi $ interact_out (1, string)"} interact -nobuffer "atd" lognumber

Selamaberinteraksi , penggunaan sebelumnya darilog_user diabaikan. Khususnya,berinteraksi akan memaksa outputnya untuk dicatat (dikirim ke output standar) karena dianggap pengguna tidak ingin berinteraksi secara membabi buta.

Itu-Hai Bendera menyebabkan pasangan kunci-tubuh berikut untuk diterapkan pada output dari proses saat ini. Ini dapat bermanfaat, misalnya, ketika berhadapan dengan host yang mengirim karakter yang tidak diinginkan selama sesi telnet.

Secara default,berinteraksi mengharapkan pengguna untuk menulis stdin dan membaca stdout dariMengharapkan proses itu sendiri. Itu-u bendera (untuk "pengguna") dibuatberinteraksi mencari pengguna sebagai proses yang dinamai berdasarkan argumennya (yang harus menjadi id yang berkembang).

Ini memungkinkan dua proses yang tidak terkait untuk digabungkan tanpa menggunakan loop eksplisit. Untuk membantu dalam debugging, Harapkan diagnostik selalu pergi ke stderr (atau stdout untuk informasi logging dan debugging tertentu). Untuk alasan yang sama,penerjemah perintah akan dibaca secara interaktif dari stdin.

Misalnya, fragmen berikut membuat proses masuk. Kemudian memanggil pengguna (tidak ditampilkan), dan akhirnya menghubungkan keduanya bersama. Tentu saja, proses apa pun dapat diganti untuk masuk. Shell, misalnya, akan memungkinkan pengguna untuk bekerja tanpa menyediakan akun dan kata sandi.

spawn login set login $ spawn_id spawn tip modem # panggil kembali ke pengguna # connect user untuk login berinteraksi -u $ login

Untuk mengirim output ke beberapa proses, daftar setiap daftar id spawn yang diawali oleh a-keluaran bendera. Input untuk sekelompok ID output spawn dapat ditentukan dengan daftar spawn id yang diawali dengan a-memasukkan bendera. (Kedua-memasukkan dan-keluaran dapat mengambil daftar dalam bentuk yang sama dengan-saya bendera dimengharapkan perintah, kecuali bahwa any_spawn_id tidak berarti diberinteraksi .) Semua flag dan string (atau pola) berikut berlaku untuk input ini sampai flag -put lain muncul. Jika tidak-memasukkan muncul,-keluaran menyiratkan "-input $ user_spawn_id -output". (Demikian pula dengan pola yang tidak ada-memasukkan .) Jika satu-memasukkan ditentukan, itu menimpa $ user_spawn_id. Jika sebentar-memasukkan ditentukan, itu menimpa $ spawn_id. Tambahan-memasukkan bendera dapat ditentukan.

Kedua proses input tersirat secara default memiliki output yang ditetapkan sebagai $ spawn_id dan $ user_spawn_id (secara terbalik). Jika sebuah-memasukkan bendera muncul tanpa-keluaran bendera, karakter dari proses itu dibuang.

Itu-saya flag memperkenalkan pengganti spawn_id saat ini ketika tidak ada yang lain-memasukkan atau-keluaran bendera digunakan. Bendera A -i mengimplikasikan flag -o.

Adalah mungkin untuk mengubah proses yang sedang diinteraksikan dengan menggunakan ID bibit tidak langsung. (Indirect spawn id dijelaskan di bagian pada perintah yang diharapkan.) Id tidak dapat dinaikkan secara tidak langsung dapat ditentukan dengan flag -i, -u, -input, atau -output.

interpreter args

menyebabkan pengguna diminta secara interaktifMengharapkan dan perintah Tcl. Hasil dari setiap perintah dicetak.

Tindakan sepertiistirahat danterus menyebabkan struktur kontrol (yaitu,untuk , proc ) untuk berperilaku seperti biasa. Namunkembali menyebabkan juru untuk kembali ke pemanggilnya, sementarainter_return penyebabpenerjemah menyebabkan kembalinya pemanggilnya. Misalnya, jika "proc foo" dipanggilpenerjemah yang kemudian dieksekusiinter_return , proc foo akan kembali. Penyebab perintah lainnyapenerjemah untuk terus mendorong perintah baru.

Secara default, prompt berisi dua bilangan bulat. Bilangan bulat pertama menggambarkan kedalaman tumpukan evaluasi (yaitu, berapa kali Tcl_Eval telah dipanggil). Bilangan bulat kedua adalah pengidentifikasi riwayat Tcl. Prompt dapat ditetapkan dengan mendefinisikan prosedur yang disebut "prompt1" yang mengembalikan nilai menjadi prompt berikutnya. Jika pernyataan memiliki tanda kutip terbuka, parens, tanda kurung, atau tanda kurung, prompt sekunder (secara default "+>") diterbitkan pada baris baru. Prompt sekunder dapat diatur dengan mendefinisikan prosedur yang disebut "prompt2".

Selamapenerjemah , mode matang digunakan, meskipun peneleponnya menggunakan mode mentah.

Jika stdin ditutup,penerjemah akan kembali kecuali-berarti bendera digunakan, dalam hal ini argumen berikutnya dipanggil.

log_file args -a file

Jika nama file disediakan,log_file akan mencatat transkrip sesi (dimulai pada titik itu) di file.log_file akan berhenti merekam jika tidak ada argumen yang diberikan. File log sebelumnya ditutup.

Alih-alih nama file, pengidentifikasi file Tcl dapat disediakan dengan menggunakan-Buka atau-biarkan terbuka bendera. Ini mirip denganmenelurkan perintah. (Lihatmenelurkan untuk info lebih lanjut.)

Itu-Sebuah kekuatan bendera keluaran yang akan dicatat yang ditekan olehlog_user perintah.

Secara default,log_file perintah menambahkan ke file lama daripada memangkasnya, karena kemudahan untuk menonaktifkan dan menonaktifkan log pada beberapa kali dalam satu sesi. Untuk memotong file, gunakan-tidak ada bendera.

Itu-info flag menyebabkan log_file mengembalikan deskripsi dari argumen non-info terbaru yang diberikan.

log_user -info | 0 | 1

Secara default, dialog kirim / harapkan dicatat ke stdout (dan logfile jika terbuka). Pencatatan ke stdout dinonaktifkan oleh perintah "log_user 0" dan diaktifkan kembali oleh "log_user 1". Logging ke logfile tidak berubah.

Itu-info flag menyebabkan log_user untuk mengembalikan deskripsi dari argumen non-info terbaru yang diberikan.

match_max -d -i spawn_id ukuran

mendefinisikan ukuran buffer (dalam byte) yang digunakan secara internal olehmengharapkan . Dengan tidak ukuran argumen, ukuran saat ini dikembalikan.

Dengan-d bendera, ukuran default diatur. (Default awal adalah 2000.) Dengan-saya bendera, ukuran diatur untuk id bibit bernama, jika tidak diatur untuk proses saat ini.

overlay - # spawn_id - # spawn_id … program args

mengeksekusi "program args "di tempat saat iniMengharapkan program, yang berakhir. Sebuah argumen tanda hubung kosong memaksa tanda hubung di depan nama perintah seolah-olah itu adalah shell login. Semua spawn_ids ditutup kecuali yang dinamakan sebagai argumen. Ini dipetakan ke pengidentifikasi file bernama.

Spawn_ids dipetakan ke pengidentifikasi file untuk mewarisi program baru. Sebagai contoh, baris berikut menjalankan catur dan memungkinkannya untuk dikendalikan oleh proses saat ini - katakanlah, seorang master catur.

overlay -0 $ spawn_id -1 $ spawn_id -2 $ catur spawn_id

Ini lebih efisien daripada "berinteraksi -u", namun, ia mengorbankan kemampuan untuk melakukan interaksi terprogram sejak ituMengharapkan proses tidak lagi memegang kendali.

Perhatikan bahwa tidak ada terminal pengendali yang disediakan. Jadi, jika Anda memutuskan atau memetakan kembali input standar, program yang melakukan kontrol pekerjaan (cangkang, login, dll) tidak akan berfungsi dengan baik.

paritas -d -i spawn_id value

menentukan apakah paritas harus dipertahankan atau dilucuti dari output proses yang dihasilkan. Jika nilai adalah nol, paritas dilucuti, jika tidak maka tidak dilucuti. Dengan tidak nilai argumen, nilai saat ini dikembalikan.

Dengan-d bendera, nilai paritas default ditetapkan. (Default awal adalah 1, mis., Paritas tidak dilucuti.) Dengan-saya bendera, nilai paritas diatur untuk id spawn bernama, jika tidak diatur untuk proses saat ini.

remove_nulls -d -i spawn_id value

mendefinisikan apakah nulls dipertahankan atau dihapus dari output proses menelurkan sebelum pencocokan pola atau penyimpanan dalam variabel expect_out atau interact_out . Jika nilai adalah 1, null dihapus. Jika nilai adalah 0, null tidak dihapus. Dengan tidak nilai argumen, nilai saat ini dikembalikan.

Dengan-d bendera, nilai default ditetapkan. (Default awal adalah 1, mis., Null dihapus.) Dengan-saya bendera, nilai ditetapkan untuk id spawn bernama, jika tidak diatur untuk proses saat ini.

Apakah atau tidak null dihapus,Mengharapkan akan mencatat byte nol ke log dan stdout.

kirim string -flags

Mengirim tali untuk proses saat ini. Misalnya, perintah

kirim "hello world r"

mengirim karakter-karakter, ke proses saat ini. (Tcl termasuk perintah printf-like (disebutformat ) yang dapat membuat string yang rumit secara acak.)

Karakter dikirim segera meskipun program dengan masukan buffer line tidak akan membaca karakter sampai karakter balasan dikirim. Karakter kembali dinotasikan " r".

Itu-- flag memaksa argumen berikutnya ditafsirkan sebagai string, bukan bendera.String apa pun dapat didahului oleh "-" apakah benar-benar terlihat seperti bendera atau tidak. Ini menyediakan mekanisme yang dapat diandalkan untuk menentukan string variabel tanpa tersandung oleh mereka yang secara tidak sengaja terlihat seperti bendera. (Semua string yang dimulai dengan "-" dicadangkan untuk opsi mendatang.)

Itu-saya bendera menyatakan bahwa string dikirim ke spawn_id bernama. Jika spawn_id adalah user_spawn_id , dan terminal dalam mode mentah, baris baru dalam string diterjemahkan ke urutan return-newline sehingga tampak seolah-olah terminal dalam mode matang. Itu-mentah bendera menonaktifkan terjemahan ini.

Itu-batal flag mengirim karakter null (0 byte). Secara default, satu nol dikirim. Integer dapat mengikuti-batal untuk menunjukkan berapa banyak nol yang dikirim.

Itu-istirahat Bendera menghasilkan kondisi istirahat. Ini hanya masuk akal jika id bibit mengacu pada perangkat tty yang dibuka melalui "spawn-open". Jika Anda telah menelurkan proses seperti tip, Anda harus menggunakan konvensi tip untuk menghasilkan istirahat.

Itu-s kekuatan bendera keluaran dikirim "pelan-pelan", sehingga hindari situasi umum di mana komputer mengalahkan input penyangga yang dirancang untuk manusia yang tidak akan pernah mengalahkan jenis penyangga yang sama. Output ini dikontrol oleh nilai variabel "send_slow" yang mengambil daftar dua elemen. Elemen pertama adalah integer yang menggambarkan jumlah byte untuk mengirim secara atom. Elemen kedua adalah bilangan real yang menjelaskan jumlah detik yang dikirimkan atom harus dipisahkan. Misalnya, "set send_slow {10 .001}" akan memaksa "mengirim -s" untuk mengirim string dengan 1 milidetik di antara setiap 10 karakter yang dikirim.

Itu-h kekuatan bendera keluaran yang akan dikirim (agak) seperti manusia yang benar-benar mengetik. Penundaan seperti manusia muncul di antara karakter. (Algoritma ini didasarkan pada distribusi Weibull, dengan modifikasi yang sesuai dengan aplikasi khusus ini.) Output ini dikendalikan oleh nilai variabel "send_human" yang mengambil daftar lima elemen. Dua elemen pertama adalah waktu antar waktu rata-rata karakter dalam hitungan detik. Yang pertama digunakan secara default. Yang kedua digunakan pada akhiran kata, untuk mensimulasikan jeda halus yang kadang-kadang terjadi pada transisi tersebut. Parameter ketiga adalah ukuran variabilitas di mana .1 cukup bervariasi, 1 cukup bervariasi, dan 10 cukup bervariasi. Yang ekstrem adalah 0 hingga tak terbatas. Dua parameter terakhir adalah, masing-masing, waktu interarrival minimum dan maksimum. Minimum dan maksimum digunakan terakhir dan "klip" waktu akhir. Rata-rata akhir dapat sangat berbeda dari rata-rata yang diberikan jika nilai minimum dan maksimum klip cukup.

Sebagai contoh, perintah berikut mengemulasi pengetik yang cepat dan konsisten:

set send_human {.1 .3 1 .05 2} kirim -h "Aku lapar. Ayo kita makan siang."

sementara yang berikut mungkin lebih cocok setelah hangover:

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

Perhatikan bahwa kesalahan tidak disimulasikan, meskipun Anda dapat mengatur sendiri situasi koreksi kesalahan dengan menanamkan kesalahan dan koreksi dalam argumen pengiriman.

Bendera untuk mengirim karakter nol, untuk mengirim istirahat, untuk memaksa output yang lambat dan untuk output gaya manusia saling eksklusif. Hanya yang ditentukan terakhir yang akan digunakan. Selanjutnya, tidak tali argumen dapat ditentukan dengan bendera untuk mengirim karakter nol atau istirahat.

Adalah ide yang baik untuk mendahului yang pertamaKirim untuk proses olehmengharapkan. mengharapkan akan menunggu proses untuk memulai, sementaraKirim tidak bisa. Khususnya, jika yang pertamaKirim selesai sebelum proses mulai berjalan, Anda berisiko kehilangan data Anda. Dalam situasi di mana program interaktif tidak menawarkan prompt awal, Anda dapat mendahuluiKirim oleh penundaan seperti pada:

# Untuk menghindari memberikan petunjuk kepada peretas tentang cara menerobos, # sistem ini tidak meminta kata sandi eksternal. # Tunggu selama 5 detik agar exec untuk menyelesaikan menelurkan telnet sangat.secure.gov tidur 5 mengirim kata sandi r

exp_send adalah alias untuk Kirim. Jika Anda menggunakan Expectk atau varian lain dari Expect di lingkungan Tk,Kirim didefinisikan oleh Tk untuk tujuan yang sama sekali berbeda.exp_send disediakan untuk kompatibilitas antar lingkungan. Alias ​​serupa disediakan untuk perintah pengiriman lainnya dari Expect.

string send_error -flags

sepertiKirim , kecuali bahwa output dikirim ke stderr daripada proses saat ini.

send_log - string

sepertiKirim , kecuali bahwa string hanya dikirim ke file log (lihatlog_file .) Argumen diabaikan jika tidak ada file log yang terbuka.

string send_tty -flags

sepertiKirim , kecuali bahwa output dikirim ke / dev / tty daripada proses saat ini.

string send_user -flags

sepertiKirim , kecuali bahwa output dikirim ke stdout daripada proses saat ini.

detik tidur

menyebabkan skrip tertidur selama beberapa detik yang ditentukan. Detik mungkin angka desimal. Interupsi (dan acara Tk jika Anda menggunakan Expectk) diproses saat Mengharapkan tidur.

program spawn args args

membuat proses baru berjalan "program args ". stdin, stdout dan stderr terhubung dengan Expect, sehingga mereka dapat dibaca dan ditulis oleh lainnyaMengharapkan perintah. Koneksi rusak olehdekat atau jika proses itu sendiri menutup salah satu pengidentifikasi file.

Ketika sebuah proses dimulai olehmenelurkan , variabelnya spawn_id diatur ke deskriptor yang mengacu pada proses itu. Proses yang dijelaskan oleh spawn_id dianggap sebagai "arus proses ". spawn_id dapat dibaca atau ditulis, yang pada dasarnya memberikan kontrol pekerjaan.

user_spawn_id adalah variabel global yang berisi deskriptor yang merujuk ke pengguna. Misalnya, kapan spawn_id diatur ke nilai ini,mengharapkan berperilaku sepertiexpect_user .

.SAYA error_spawn_id adalah variabel global yang mengandung deskriptor yang mengacu pada kesalahan standar. Misalnya, kapan spawn_id diatur ke nilai ini,Kirim berperilaku sepertisend_error .

tty_spawn_id adalah variabel global yang mengandung deskriptor yang mengacu pada / dev / tty. Jika / dev / tty tidak ada (seperti dalam skrip cron, at, atau batch), lalu tty_spawn_id tak terdefinisi. Ini dapat diuji sebagai:

jika {info vars tty_spawn_id} {# / dev / tty exists} else {# / dev / tty tidak ada # mungkin di cron, batch, atau di skrip}

menelurkan mengembalikan id proses UNIX. Jika tidak ada proses yang dihasilkan, 0 dikembalikan. Variabel spawn_out (budak, nama) diatur ke nama perangkat budak pty.

Secara default,menelurkan gema nama dan argumen perintah. Itu-noecho berhenti benderamenelurkan dari melakukan ini.

Itu-menghibur Bendera menyebabkan keluaran konsol akan dialihkan ke proses melahirkan. Ini tidak didukung di semua sistem.

Secara internal,menelurkan menggunakan pty, diinisialisasi dengan cara yang sama dengan tty pengguna. Ini diinisialisasi lebih lanjut sehingga semua pengaturan "waras" (menurut stty (1)). Jika variabelnya stty_init didefinisikan, itu ditafsirkan dalam gaya argumen stty sebagai konfigurasi lebih lanjut. Misalnya, "atur stty_init raw" akan menyebabkan semakin memunculkan terminal proses untuk memulai dalam mode mentah.-nottycopy melompati inisialisasi berdasarkan tty pengguna.-nottyinit melompati inisialisasi "waras".

Biasanya,menelurkan membutuhkan sedikit waktu untuk mengeksekusi. Jika Anda melihat spawn mengambil sejumlah besar waktu, itu mungkin menghadapi ptys yang terjepit. Sejumlah tes dijalankan pada ptys untuk menghindari keterlibatan dengan proses yang salah. (Ini membutuhkan waktu 10 detik per pty yang terjepit.) Menjalankan Harapkan dengan-d pilihan akan menunjukkan jikaMengharapkan sedang menghadapi banyak ptys di negara-negara aneh. Jika Anda tidak dapat membunuh proses di mana ptys ini dilampirkan, satu-satunya cara Anda mungkin untuk reboot.

Jika program tidak dapat berhasil dibangkitkan karena exec (2) gagal (mis. kapan program tidak ada), pesan kesalahan akan dikembalikan oleh yang berikutnyaberinteraksi ataumengharapkan perintah seolah program telah menjalankan dan menghasilkan pesan kesalahan sebagai output. Perilaku ini merupakan konsekuensi alami dari implementasimenelurkan . Secara internal, bertelur garpu, setelah proses melahirkan tidak memiliki cara untuk berkomunikasi dengan yang asliMengharapkan proses kecuali dengan komunikasi melalui spawn_id.

Itu-Buka Bendera menyebabkan argumen berikutnya ditafsirkan sebagai pengidentifikasi file Tcl (yaitu, dikembalikan olehBuka .) Id bibit kemudian dapat digunakan seolah-olah itu adalah proses yang menghasilkan. (Pengidentifikasi file seharusnya tidak lagi digunakan.) Ini memungkinkan Anda memperlakukan perangkat mentah, file, dan saluran pipa sebagai proses yang menghasilkan tanpa menggunakan pty. 0 dikembalikan untuk menunjukkan tidak ada proses terkait. Ketika koneksi ke proses menelurkan ditutup, begitu juga pengidentifikasi file Tcl. Itu-biarkan terbuka bendera mirip dengan-Buka kecuali itu-biarkan terbuka menyebabkan pengidentifikasi file dibiarkan terbuka bahkan setelah id spawn ditutup.

Itu-pty Bendera menyebabkan pty dibuka tetapi tidak ada proses melahirkan. 0 dikembalikan untuk menunjukkan tidak ada proses terkait. Spawn_id diatur seperti biasa.

Variabel spawn_out (budak, fd) diatur ke pengidentifikasi file yang terkait dengan budak pty. Ini bisa ditutup menggunakan "tutup-budak".

Itu-mengabaikan bendera menandakan sinyal untuk diabaikan dalam proses melahirkan. Jika tidak, sinyal mendapatkan perilaku default. Sinyal diberi nama seperti padaperangkap perintah, kecuali bahwa setiap sinyal membutuhkan bendera yang terpisah.

tingkat strace

menyebabkan pernyataan berikut akan dicetak sebelum dieksekusi. (Tcl melacak jejak jejak variabel.) tingkat menunjukkan seberapa jauh panggilan ke tumpukan untuk dilacak. Misalnya, perintah berikut berjalanMengharapkan saat melacak 4 tingkat panggilan pertama, tetapi tidak ada yang di bawahnya.

harapkan -c "strace 4" script.exp

Itu-info flag menyebabkan strace untuk mengembalikan deskripsi dari argumen non-info terbaru yang diberikan.

stty args

mengubah mode terminal sama dengan perintah stty eksternal.

Secara default, terminal pengendali diakses. Terminal lain dapat diakses dengan menambahkan "Permintaan untuk mengembalikan status sebagai hasil dari perintah. Jika tidak ada status yang diminta dan terminal pengontrol diakses, status sebelumnya dari atribut baku dan gema dikembalikan dalam bentuk yang nantinya dapat digunakan oleh perintah.

Misalnya, argumennyamentah atau-matang letakkan terminal ke mode mentah. Argumennya-mentah ataumatang ma