Αναμείνετε είναι ένα πρόγραμμα που μιλάει με άλλα διαδραστικά προγράμματα σύμφωνα με ένα σενάριο. Μετά το σενάριο, η Expect γνωρίζει τι μπορεί να αναμένεται από ένα πρόγραμμα και ποια θα είναι η σωστή απάντηση. Μια ερμηνευμένη γλώσσα παρέχει διακλαδώσεις και δομές ελέγχου υψηλού επιπέδου για την κατεύθυνση του διαλόγου. Επιπλέον, ο χρήστης μπορεί να πάρει τον έλεγχο και να αλληλεπιδρά άμεσα όταν είναι επιθυμητό, μετά επιστρέφοντας τον έλεγχο στο σενάριο.
Το Expectk είναι ένα μίγμα του Expect και του Tk. Συμπεριέχει την επιθυμία του Expect και της Tk. Η προσδοκία μπορεί επίσης να χρησιμοποιηθεί απευθείας σε C ή C ++ χωρίς Tcl.
Το όνομα "Expect" προέρχεται από την ιδέα της αλληλουχίας αποστολής / αναμονής που διαδόθηκε από uucp, kermit και άλλα προγράμματα ελέγχου μόντεμ. Ωστόσο, σε αντίθεση με το uucp, το Expect είναι γενικευμένο ώστε να μπορεί να εκτελείται ως εντολή σε επίπεδο χρήστη με οποιοδήποτε πρόγραμμα και εργασία. Αναμείνετε ότι μπορείτε να μιλήσετε με πολλά προγράμματα ταυτόχρονα.
Τι προσδοκώ ότι μπορεί να κάνει
Για παράδειγμα, εδώ είναι μερικά πράγματα που μπορεί να κάνει η εντολή:
- Προκαλεί τον υπολογιστή σας να σας καλέσει πίσω, ώστε να μπορείτε να συνδεθείτε χωρίς να πληρώσετε για την κλήση.
- Ξεκινήστε ένα παιχνίδι και, αν δεν εμφανιστεί η βέλτιστη διαμόρφωση, επανεκκινήστε το ξανά και ξανά) μέχρι να το κάνει και, στη συνέχεια, παραδώστε τον έλεγχό σας σε εσάς.
- Εκτελέστε fsck και, απαντώντας στις ερωτήσεις σας, απαντήστε "ναι" ή "όχι" ή δώστε τον έλεγχο πίσω σας, βάσει προκαθορισμένων κριτηρίων.
- Συνδεθείτε σε άλλο δίκτυο και ανακτήστε αυτόματα την αλληλογραφία σας έτσι ώστε να εμφανίζεται σαν να είχε αρχικά αποσταλεί στο τοπικό σας σύστημα.
- Μεταφέρετε μεταβλητές περιβάλλοντος, τρέχοντα κατάλογο ή οποιουδήποτε είδους πληροφορίες σε ολόκληρο το rlogin, telnet, tip, su ή chgrp
Υπάρχουν διάφοροι λόγοι για τους οποίους το κέλυφος δεν μπορεί να εκτελέσει αυτές τις εργασίες. Όλα είναι δυνατά με το Expect.
Σε γενικές γραμμές, η προσδοκία είναι χρήσιμη για την εκτέλεση οποιουδήποτε προγράμματος που απαιτεί αλληλεπίδραση μεταξύ του προγράμματος και του χρήστη. Το μόνο που χρειάζεται είναι ότι η αλληλεπίδραση μπορεί να χαρακτηριστεί προγραμματικά. Η προσδοκία μπορεί επίσης να δώσει τον έλεγχο στον χρήστη χωρίς να σταματήσει το πρόγραμμα που ελέγχεται. Ομοίως, ο χρήστης μπορεί ανά πάσα στιγμή να επιστρέψει τον έλεγχο στο σενάριο.
Χρήση
Αναμένετε ότι διαβάζει το cmdfile για μια λίστα εντολών που θα εκτελεστούν. Η προσδοκία μπορεί να χρησιμοποιηθεί σιωπηρά σε συστήματα που υποστηρίζουν το #! σημειώνοντας σημειώνοντας το σενάριο ως εκτελέσιμο και κάνοντας την πρώτη γραμμή στο σενάριο:
#! / usr / local / bin / αναμονή -f
Φυσικά, το μονοπάτι πρέπει να περιγράφει με ακρίβεια πού περιμένουν τη ζωή. / usr / local / bin είναι μόνο ένα παράδειγμα.
Η -c σημαία προετοιμάζει μια εντολή που πρέπει να εκτελεστεί πριν από οποιοδήποτε από το σενάριο. Η εντολή πρέπει να αναφέρεται για να αποφευχθεί η διάλυση του κελύφους. Αυτή η επιλογή μπορεί να χρησιμοποιηθεί πολλές φορές. Πολλαπλές εντολές μπορούν να εκτελεστούν με ένα μόνο -c διαχωρίζοντάς τα με ερωτηματικά. Οι εντολές εκτελούνται με τη σειρά που εμφανίζονται. Όταν χρησιμοποιείτε το Expectk, αυτή η επιλογή ορίζεται ως -command.
Η σημαία -d επιτρέπει κάποια διαγνωστική έξοδο, η οποία αναφέρει κυρίως την εσωτερική δραστηριότητα των εντολών όπως η αναμονή και η αλληλεπίδραση. Αυτή η σημαία έχει το ίδιο αποτέλεσμα με το "exp_internal 1" στην αρχή ενός σεναρίου Expect, συν την εκτύπωση της έκδοσης Expect.
Η σημαία -D επιτρέπει ένα διαδραστικό εργαλείο εντοπισμού σφαλμάτων. Θα πρέπει να ακολουθήσει μια ακέραια τιμή. Το πρόγραμμα εντοπισμού σφαλμάτων θα πάρει τον έλεγχο πριν από την επόμενη διαδικασία Tcl εάν η τιμή είναι μηδενική ή εάν πατηθεί ένα πλήκτρο ^ C ή ένα σημείο διακοπής ή άλλη εντολή debugger εμφανίζεται στο script. Όταν χρησιμοποιείτε το Expectk, αυτή η επιλογή ορίζεται ως -Debug.
Η -f σημαία προετοιμάζει ένα αρχείο από το οποίο να διαβάζει τις εντολές. Η ίδια η σημαία είναι προαιρετική, καθώς είναι χρήσιμη μόνο όταν χρησιμοποιείτε το #! έτσι ώστε να μπορούν να παρέχονται και άλλα επιχειρήματα στη γραμμή εντολών. Όταν χρησιμοποιείτε το Expectk, αυτή η επιλογή ορίζεται ως αρχείο.
Από προεπιλογή, το αρχείο εντολών διαβάζεται στη μνήμη και εκτελείται στο σύνολό του. Είναι περιστασιακά επιθυμητό να διαβάζετε τα αρχεία μία γραμμή τη φορά. Για να αναγκάσετε να χειριστείτε αυθαίρετα αρχεία με αυτόν τον τρόπο, χρησιμοποιήστε τη σημαία -b. Όταν χρησιμοποιείτε το Expectk, αυτή η επιλογή ορίζεται ως -buffer.
Εάν η συμβολοσειρά "-" παρέχεται ως όνομα αρχείου, αντί να διαβάζεται η τυπική είσοδος. Χρησιμοποιήστε το "./-" για να διαβάσετε από ένα αρχείο που όντως ονομάζεται "-".
Η σημαία -i προκαλεί Προσδοκούμε να ζητήσουμε διαδραστικά εντολές αντί να τις διαβάσουμε από ένα αρχείο. Η προτροπή τερματίζεται με την εντολή εξόδου ή με το EOF. Η -i σημαία θεωρείται ότι δεν χρησιμοποιείται ούτε αρχείο εντολών ούτε -c. Όταν χρησιμοποιείτε το Expectk, αυτή η επιλογή ορίζεται ως -interactive.
- μπορεί να χρησιμοποιηθεί για να οριοθετήσει το τέλος των επιλογών. Αυτό είναι χρήσιμο εάν θέλετε να περάσετε ένα παράθυρο που μοιάζει με επιλογή με το σενάριό σας χωρίς να ερμηνεύεται από την Expect. Αυτό μπορεί να τοποθετηθεί χρήσιμα στο #! line για να αποτρέψετε τυχόν ερμηνείες από την Expect. Για παράδειγμα, τα παρακάτω θα αφήσουν τα αρχικά επιχειρήματα, συμπεριλαμβανομένου του ονόματος της δέσμης ενεργειών στη μεταβλητή argv .
#! / usr / local / bin / αναμονή -
Σημειώστε ότι οι συνηθισμένες συμβάσεις getopt (3) και execve (2) πρέπει να τηρούνται κατά την προσθήκη παραδειγμάτων στο #! γραμμή.
Το αρχείο $ exp_library / expect.rc προέρχεται αυτόματα εάν υπάρχει, εκτός και αν χρησιμοποιείται η σημαία -N. (Όταν χρησιμοποιείτε το Expectk, αυτή η επιλογή ορίζεται ως -NORC.) Αμέσως μετά από αυτό, το αρχείο ~ / .expect.rc προέρχεται αυτόματα, εκτός αν χρησιμοποιείται η σημαία -n. Εάν ορίζεται η μεταβλητή περιβάλλοντος DOTDIR, αντιμετωπίζεται ως κατάλογος και από εκεί διαβάζεται το .expect.rc. Όταν χρησιμοποιείτε το Expectk, αυτή η επιλογή ορίζεται ως -norc.Αυτή η προέλευση πραγματοποιείται μόνο μετά την εκτέλεση οποιασδήποτε σημαίας -c.
-v προκαλεί την προσδοκία να εκτυπώσετε τον αριθμό της έκδοσης και να εξέλθετε. Η αντίστοιχη σημαία στο Expectk, που χρησιμοποιεί τα μεγάλα ονόματα σημαίας, είναι -version.
Τα προαιρετικά args κατασκευάζονται σε μια λίστα και αποθηκεύονται στη μεταβλητή που ονομάζεται argv και. Το argc αρχικοποιείται στο μήκος του argv.
Το Argv0 ορίζεται ως το όνομα του σεναρίου ή του δυαδικού αρχείου αν δεν χρησιμοποιείται σενάριο. Για παράδειγμα, τα ακόλουθα εκτυπώνουν το όνομα της δέσμης ενεργειών και τα πρώτα τρία επιχειρήματα:
send_user "$ argv0 τόπος $ argv 0 2 n"
Εντολές
Αναμείνετε τη χρήση της γλώσσας εντολών εργαλείων. Tcl παρέχει ροή ελέγχου (αν, για, σπάσιμο), αξιολόγηση έκφρασης και πολλά άλλα χαρακτηριστικά, όπως επανάληψη και ορισμό διαδικασίας. Οι εντολές που χρησιμοποιούνται εδώ αλλά δεν έχουν καθοριστεί (set, if, exec) είναι εντολές Tcl. Αναμένετε ότι υποστηρίζετε πρόσθετες εντολές. Εκτός αν ορίζεται διαφορετικά, οι εντολές επιστρέφουν την κενή συμβολοσειρά.
Οι εντολές παρατίθενται αλφαβητικά, ώστε να μπορούν να εντοπιστούν γρήγορα. Ωστόσο, οι νέοι χρήστες ενδέχεται να είναι πιο εύκολο να ξεκινήσουν διαβάζοντας τις περιγραφές του spawn, να στείλουν, να περιμένουν και να αλληλεπιδρούν με αυτή τη σειρά.
κλείνω -σώτος -onexec 0 | 1 -i spawn_id
κλείνει τη σύνδεση με την τρέχουσα διαδικασία. Τα περισσότερα διαδραστικά προγράμματα θα ανιχνεύσουν τον EOF στο stdin και την έξοδο του. έτσι Κοντά συνήθως αρκεί να σκοτωθεί η διαδικασία επίσης. Η σημαία -i δηλώνει τη διαδικασία κλεισίματος που αντιστοιχεί στο όνομα spawn_id.
Και οι δύο περιμένουν και αλληλεπιδρούν θα εντοπίσουν όταν η τρέχουσα διαδικασία βγαίνει και σιωπηρά κλείσει, αλλά αν σκοτώσετε τη διαδικασία λέγοντας "exec kill killpid", πρέπει να καλέσετε ρητά.
Η σημαία -onexec καθορίζει αν το id spawn είναι κλειστό σε κάθε νέα διαδικασία που γεννήθηκε ή αν η διαδικασία έχει επικαλυφθεί. Για να αφήσετε ανοιχτό το id spawn, χρησιμοποιήστε την τιμή 0. Μία μη-μηδενική τιμή ακέραιος αναγκάζει το σπόρο να είναι κλειστό σε κάθε νέα διαδικασία.
Η σημαία-slave κλείνει τον σκλάβο που σχετίζεται με το αναγνωριστικό ωοτοκίας. Όταν η σύνδεση είναι κλειστή, ο σκλάβος κλείνει αυτόματα και αν είναι ακόμη ανοιχτός.
Ανεξάρτητα από το αν η σύνδεση κλείνει σιωπηρά ή ρητά, πρέπει να καλέσετε την αναμονή για να ξεκαθαρίσετε την αντίστοιχη υποδοχή επεξεργασίας πυρήνα. Η εντολή κλεισίματος δεν καλεί την αναμονή, αφού δεν υπάρχει εγγύηση ότι το κλείσιμο μιας σύνδεσης διεργασίας θα την αναγκάσει να βγεί.
debug -now 0 | 1
ελέγχει ένα εργαλείο εντοπισμού σφαλμάτων Tcl, το οποίο σας επιτρέπει να ακολουθήσετε τις δηλώσεις και να ορίσετε σημεία διακοπής.
Αν δεν υπάρχουν επιχειρήματα, επιστρέφει ένα 1 αν το πρόγραμμα εντοπισμού σφαλμάτων δεν εκτελείται, διαφορετικά επιστρέφεται ένα 0.
Με ένα όρισμα, ξεκινά το πρόγραμμα εντοπισμού σφαλμάτων. Με ένα όριο 0, το πρόγραμμα εντοπισμού σφαλμάτων διακόπτεται. Εάν προηγείται ένα όρισμα 1 από τη σημαία -now, το πρόγραμμα εντοπισμού σφαλμάτων εκκινείται αμέσως. Διαφορετικά, το πρόγραμμα εντοπισμού σφαλμάτων ξεκινά με την επόμενη εντολή Tcl.
Η εντολή εντοπισμού σφαλμάτων δεν αλλάζει παγίδες. Συγκρίνετε αυτό με την εκκίνηση Αναμένετε με τη σημαία -D.
Η εντολή αποσύνδεσης αποσυνδέει μια διχαλωτή διαδικασία από το τερματικό. Συνεχίζει να τρέχει στο παρασκήνιο. Η διαδικασία δίνεται στη δική της ομάδα επεξεργασίας. Το πρότυπο I / O μεταφέρεται στο / dev / null.
Το ακόλουθο κομμάτι χρησιμοποιεί αποσύνδεση για να συνεχίσει να εκτελείται το σενάριο στο παρασκήνιο.
αν αποσυνδεθείτε {fork! = 0}. . .
Το ακόλουθο σενάριο διαβάζει έναν κωδικό πρόσβασης και στη συνέχεια εκτελεί ένα πρόγραμμα κάθε ώρα που απαιτεί κωδικό πρόσβασης κάθε φορά που εκτελείται. Το σενάριο παρέχει τον κωδικό πρόσβασης, έτσι ώστε να χρειάζεται μόνο να το πληκτρολογήσετε μία φορά.
n "{} {} {} {} {if {} {} {} 1, συμβολοσειρά) r ". . . έξοδος}
Ένα πλεονέκτημα στη χρήση της αποσύνδεσης πάνω από το χαρακτηριστικό ασύγχρονης διεργασίας επεξεργασίας κελύφους (&) είναι ότι το Expect μπορεί να αποθηκεύσει τις παραμέτρους του τερματικού πριν από την αποσύνδεση και αργότερα να τις εφαρμόσει σε νέα ptys. Με το &, το Expect δεν έχει την ευκαιρία να διαβάσει τις παραμέτρους του τερματικού, αφού το τερματικό είναι ήδη αποσυνδεδεμένο από το χρόνο που ο Expect λαμβάνει τον έλεγχο.
exit -opts κατάσταση
Αιτίες Αναμένετε να αποχωρήσετε ή να προετοιμαστείτε με άλλον τρόπο.
ο -onexit η σημαία προκαλεί την χρήση του επόμενου επιχειρήματος ως χειριστή εξόδου. Χωρίς ένα όρισμα, επιστρέφεται ο τρέχων χειριστής εξόδου.
ο -Οχι εξοδος σημαία προκαλεί Αναμένω να προετοιμαστούν για έξοδο, αλλά να σταματήσουν να επιστρέφουν στην πραγματικότητα τον έλεγχο στο λειτουργικό σύστημα. Ο χειριστής εξόδου που έχει οριστεί από τον χρήστη εκτελείται καθώς και οι εσωτερικοί χειριστές της Expect. Δεν θα πρέπει να εκτελούνται άλλες εντολές αναμονής. Αυτό είναι χρήσιμο εάν εκτελείτε το πρόγραμμα Expect με άλλες επεκτάσεις Tcl. Ο τρέχων διερμηνέας (και το κύριο παράθυρο, αν υπάρχει στο περιβάλλον Tk) παραμένουν έτσι ώστε άλλες επεκτάσεις Tcl να καθαρίσουν. Αν το Expect's έξοδος (πάλι, αυτό μπορεί να συμβεί), οι χειριστές δεν επαναλαμβάνονται.
Κατά την έξοδο, όλες οι συνδέσεις στις διεργασίες που έχουν δημιουργηθεί κλείσουν. Το κλείσιμο θα ανιχνεύεται ως EOF από τις διεργασίες που έχουν δημιουργηθεί. έξοδος δεν κάνει άλλες ενέργειες πέρα από ό, τι κάνει η κανονική διαδικασία _exit (2). Έτσι, μπορούν να συνεχίσουν να τρέχουν διεργασίες που δεν έχουν ελεγχθεί για το EOF. (Μια ποικιλία συνθηκών είναι σημαντικές για τον προσδιορισμό, παραδείγματος χάριν, των σημάτων που θα αποσταλεί μια διαδικασία που γεννήθηκε, αλλά αυτά είναι εξαρτώμενα από το σύστημα, συνήθως τεκμηριωμένα κάτω από την έξοδο (3).) Οι διεργασίες που αναπτύσσονται και συνεχίζουν να τρέχουν θα κληρονομηθούν από το init.
κατάσταση (ή 0 εάν δεν έχει οριστεί) επιστρέφεται ως κατάσταση εξόδου του Αναμένω . έξοδος εκτελείται σιωπηρά αν επιτευχθεί το τέλος του σεναρίου.
exp_continue -continue_timer
Η εντολή exp_continue επιτρέπει αναμένω να συνεχίσει να εκτελεί παρά να επιστρέφει όπως συνήθως. Από προεπιλογή exp_continue επαναφέρει το χρονομετρητή χρονικού ορίου. ο -continue_timer η σημαία αποτρέπει την επανεκκίνηση του χρονοδιακόπτη. (Βλέπω αναμένω Για περισσότερες πληροφορίες.)
exp_internal -f αρχείο τιμή
προκαλεί περαιτέρω εντολές για την αποστολή εσωτερικών διαγνωστικών πληροφοριών Αναμένω να stderr εάν αξία είναι μη μηδέν. Αυτή η έξοδος είναι απενεργοποιημένη αν αξία είναι 0. Οι διαγνωστικές πληροφορίες περιλαμβάνουν κάθε ληφθέντα χαρακτήρα και κάθε προσπάθεια που έγινε για να ταιριάζει με την τρέχουσα έξοδο έναντι των μοτίβων.
Αν το προαιρετικό αρχείο παρέχεται, όλα τα κανονικά και την αποσφαλμάτωση εξόδου εγγράφεται σε αυτό το αρχείο (ανεξάρτητα από την τιμή του αξία ). Οποιοδήποτε προηγούμενο αρχείο διαγνωστικού ελέγχου είναι κλειστό.
ο -info η σημαία προκαλεί το exp_internal να επιστρέψει μια περιγραφή των πιο πρόσφατων μη-πληροφοριών παραδειγμάτων που δόθηκαν.
exp_open args -i spawn_id
επιστρέφει ένα αναγνωριστικό αρχείου Tcl που αντιστοιχεί στο αρχικό αναγνωριστικό αναπαραγωγής. Το αναγνωριστικό αρχείου μπορεί στη συνέχεια να χρησιμοποιηθεί σαν να ανοίγει από το Tcl Άνοιξε εντολή. (Το αναγνωριστικό αναπαραγωγής δεν πρέπει πλέον να χρησιμοποιείται Περιμένετε δεν πρέπει να εκτελεστεί.
ο -πλευρά η σημαία αφήνει το id spawn ανοιχτό για πρόσβαση μέσω των εντολών Expect. ΕΝΑ Περιμένετε πρέπει να εκτελεστεί στο id spawn.
exp_pid -i spawn_id
επιστρέφει το αναγνωριστικό διαδικασίας που αντιστοιχεί στην τρέχουσα διαδικασία. Αν το -Εγώ χρησιμοποιείται η σημαία, το pid που επιστρέφεται αντιστοιχεί σε εκείνο του συγκεκριμένου id spawn.
exp_send
είναι ένα ψευδώνυμο για στείλετε .
exp_send_error
είναι ένα ψευδώνυμο για send_error .
exp_send_log
είναι ένα ψευδώνυμο για send_log .
exp_send_tty
είναι ένα ψευδώνυμο για send_tty .
exp_send_user
είναι ένα ψευδώνυμο για send_user .
exp_version -exit έκδοση
είναι χρήσιμη για να βεβαιωθείτε ότι το σενάριο είναι συμβατό με την τρέχουσα έκδοση του Expect.
Χωρίς επιχειρήματα, η τρέχουσα έκδοση του Αναμένω επιστρέφεται. Αυτή η έκδοση μπορεί στη συνέχεια να κωδικοποιηθεί στη δέσμη ενεργειών σας. Εάν γνωρίζετε πραγματικά ότι δεν χρησιμοποιείτε χαρακτηριστικά πρόσφατων εκδόσεων, μπορείτε να ορίσετε μια παλαιότερη έκδοση.
Οι εκδόσεις αποτελούνται από τρεις αριθμούς που χωρίζονται από κουκκίδες. Ο πρώτος είναι ο σημαντικότερος αριθμός. Σενάρια γραμμένα για εκδόσεις του Αναμένω με διαφορετικό μεγάλο αριθμό, σχεδόν σίγουρα δεν θα λειτουργήσει. exp_version επιστρέφει ένα σφάλμα εάν οι κύριοι αριθμοί δεν ταιριάζουν.
Δεύτερος είναι ο μικρός αριθμός. Οι δέσμες ενεργειών γραμμένες για μια έκδοση με μικρότερο αριθμό από την τρέχουσα έκδοση ενδέχεται να εξαρτώνται από κάποια νέα δυνατότητα και ενδέχεται να μην εκτελούνται. exp_version επιστρέφει ένα σφάλμα αν οι κύριοι αριθμοί ταιριάζουν, αλλά ο μικρότερος αριθμός σεναρίου είναι μεγαλύτερος από αυτόν του τρέχοντος Αναμένω .
Το τρίτο είναι ένας αριθμός που δεν παίζει κανένα ρόλο στη σύγκριση της έκδοσης. Ωστόσο, αυξάνεται όταν το Αναμένω η διανομή λογισμικού αλλάζει με οποιονδήποτε τρόπο, όπως με πρόσθετη τεκμηρίωση ή βελτιστοποίηση. Επαναφέρει σε 0 σε κάθε νέα δευτερεύουσα έκδοση.
Με το -έξοδος σημαία, Αναμένω εκτυπώνει ένα σφάλμα και κλείνει αν η έκδοση είναι παλιά.
περιμένετε -opts pat1 body1 … -opts patn bodyn
περιμένει έως ότου ένα από τα πρότυπα ταιριάζει με την έξοδο μιας διεργασίας που γεννήθηκε, έχει περάσει μια συγκεκριμένη χρονική περίοδος ή έχει καταγραφεί ένα τέλος του αρχείου. Εάν το τελικό σώμα είναι άδειο, μπορεί να παραλειφθεί.
Μοτίβα από τα πιο πρόσφατα περιμένετε πριν Οι εντολές χρησιμοποιούνται σιωπηρά πριν από οποιαδήποτε άλλα σχέδια. Μοτίβα από τα πιο πρόσφατα αναμένω Οι εντολές χρησιμοποιούνται σιωπηρά μετά από οποιαδήποτε άλλα πρότυπα.
Αν τα επιχειρήματα στο σύνολο αναμένω η εντολή απαιτεί περισσότερες από μία γραμμές, όλα τα επιχειρήματα μπορούν να "ενισχυθούν" σε μία έτσι ώστε να αποφευχθεί η διακοπή κάθε γραμμής με αντίστροφη κάθετο. Σε αυτή τη περίπτωση, οι συνήθεις αντικαταστάσεις Tcl θα εμφανιστούν παρά τα τιράντες.
Αν ένα πρότυπο είναι η λέξη-κλειδί eof , το αντίστοιχο σώμα εκτελείται μετά το τέλος του αρχείου. Αν ένα πρότυπο είναι η λέξη-κλειδί τέλος χρόνου , το αντίστοιχο σώμα εκτελείται μετά το χρονοδιάγραμμα. Εάν δεν χρησιμοποιείται καμία λέξη-κλειδί χρονικού ορίου, εκτελείται μια σιωπηρή μηδενική ενέργεια μετά το χρονικό όριο. Η προεπιλεγμένη χρονική περίοδος είναι 10 δευτερόλεπτα, αλλά μπορεί να ρυθμιστεί, για παράδειγμα σε 30, με την εντολή "set timeout 30". Ένα άπειρο χρονικό όριο μπορεί να οριστεί με την τιμή -1. Αν ένα πρότυπο είναι η λέξη-κλειδί Προκαθορισμένο , το αντίστοιχο σώμα εκτελείται είτε κατά το χρονοδιάγραμμα είτε από το τέλος του αρχείου.
Εάν ένα πρότυπο ταιριάζει, τότε εκτελείται το αντίστοιχο σώμα. αναμένω επιστρέφει το αποτέλεσμα του σώματος (ή την κενή συμβολοσειρά εάν δεν υπάρχει αντιστοιχισμένο πρότυπο). Σε περίπτωση που αντιστοιχιστούν πολλά μοτίβα, η πρώτη που εμφανίζεται χρησιμοποιείται για την επιλογή ενός σώματος.
Κάθε φορά που φθάνει νέα έξοδος, συγκρίνεται με κάθε πρότυπο με τη σειρά που απαριθμούνται. Έτσι, μπορείτε να δοκιμάσετε για την απουσία ενός αγώνα κάνοντας το τελευταίο μοτίβο κάτι που εγγυάται την εμφάνισή του, όπως μια προτροπή. Σε περιπτώσεις όπου δεν υπάρχει προτροπή, πρέπει να χρησιμοποιήσετε τέλος χρόνου (όπως θα κάνατε αν χειρίζεστε χειροκίνητα).
Τα μοτίβα καθορίζονται με τρεις τρόπους. Από προεπιλογή, τα πρότυπα καθορίζονται όπως και με τα Tcl match match εντολή. (Τέτοια μοτίβα είναι επίσης παρόμοια με τις κανονικές εκφράσεις C-shell) που συνήθως αναφέρονται ως μοτίβα "glob". ο -gl η σημαία μπορεί να χρησιμοποιηθεί για την προστασία μοτίβων που διαφορετικά θα μπορούσαν να ταιριάξουν αναμένω σημαίες από αυτό. Κάθε μοτίβο που αρχίζει με ένα "-" πρέπει να προστατεύεται με αυτόν τον τρόπο. (Όλες οι συμβολοσειρές που αρχίζουν με "-" προορίζονται για μελλοντικές επιλογές.)
Για παράδειγμα, το ακόλουθο κομμάτι αναζητά μια επιτυχημένη σύνδεση. (Σημειώστε ότι αμβλώνω θεωρείται ότι είναι μια διαδικασία που ορίζεται αλλού στο σενάριο.)
περιμένετε {busy {θέτει πολυάριθμα n; exp_continue} απέτυχε να ακυρώσει "έγκυρο κωδικό" abort timeout abort συνδεδεμένος}
Τα αποσπάσματα είναι απαραίτητα για το τέταρτο μοτίβο αφού περιέχει ένα χώρο, που διαφορετικά θα διαχωρίζει το μοτίβο από τη δράση.Τα μοτίβα με την ίδια ενέργεια (όπως το 3ο και το 4ο) απαιτούν εκ νέου καταγραφή των ενεργειών. Αυτό μπορεί να αποφευχθεί χρησιμοποιώντας μοντέλα τύπου regexp (δείτε παρακάτω). Περισσότερες πληροφορίες σχετικά με το σχηματισμό μοτίβων στυλ σε σφαιρία μπορούν να βρεθούν στο εγχειρίδιο Tcl.
Τα μοτίβα τύπου Regexp ακολουθούν τη σύνταξη που ορίζεται από το Tcl regexp (κοντό για την "κανονική έκφραση") εντολή. τα μοντέλα regexp εισάγονται με τη σημαία -σχετικά με . Το προηγούμενο παράδειγμα μπορεί να ξαναγραφεί χρησιμοποιώντας ένα regexp ως:
περιμένετε {busy {θέτει πολυάριθμα n; exp_continue} -re "απέτυχε | μη έγκυρος κωδικός πρόσβασης" abort timeout abort συνδεδεμένος}
Και οι δύο τύποι μοτίβων είναι "μη σταθεροποιημένοι". Αυτό σημαίνει ότι τα μοτίβα δεν χρειάζεται να ταιριάζουν με ολόκληρη τη συμβολοσειρά, αλλά μπορούν να ξεκινήσουν και να τερματίσουν τον αγώνα οπουδήποτε στη συμβολοσειρά (εφ 'όσον ταιριάζουν όλα τα υπόλοιπα). Χρησιμοποιήστε το ^ για να ταιριάζει με την αρχή μιας συμβολοσειράς και $ για να ταιριάζει με το τέλος. Σημειώστε ότι αν δεν περιμένετε το τέλος μιας συμβολοσειράς, οι απαντήσεις σας μπορούν εύκολα να καταλήξουν στη μέση της συμβολοσειράς καθώς αντανακλώνται από τη διαδικασία που γεννήθηκε. Παρόλο που εξακολουθούν να παράγουν σωστά αποτελέσματα, η έξοδος μπορεί να φαίνεται αφύσικη. Έτσι, η χρήση του $ ενθαρρύνεται αν μπορείτε να περιγράψετε ακριβώς τους χαρακτήρες στο τέλος μιας συμβολοσειράς.
Σημειώστε ότι σε πολλούς επεξεργαστές τα ^ και $ ταιριάζουν με την αρχή και το τέλος των γραμμών αντίστοιχα. Ωστόσο, επειδή η προσδοκία δεν είναι γραμμική προσανατολισμένη, αυτοί οι χαρακτήρες ταιριάζουν με την αρχή και το τέλος των δεδομένων (σε αντίθεση με τις γραμμές) που βρίσκονται αυτήν τη στιγμή στο αναμενόμενο buffer αντιστοίχισης. (Επίσης, ανατρέξτε στη σημείωση παρακάτω σχετικά με τη "δυσπεψία του συστήματος.")
ο -πρώην σημαία προκαλεί την αντιστοίχιση του προτύπου ως "ακριβούς" συμβολοσειράς. Δεν γίνεται ερμηνεία των *, ^, κλπ (αν και πρέπει να τηρούνται οι συνηθισμένες συμβάσεις Tcl). Τα ακριβή μοτίβα είναι πάντοτε αβασάνιστα.
ο - νύχτα σημαία προκαλεί κεφαλαία γράμματα της εξόδου για σύγκριση σαν να ήταν πεζά χαρακτήρες. Το μοτίβο δεν επηρεάζεται.
Κατά την ανάγνωση της εξόδου, περισσότερα από 2000 bytes μπορούν να εξαναγκάσουν να ξεχαστούν τα προηγούμενα byte. Αυτό μπορεί να αλλάξει με τη λειτουργία match_max . (Σημειώστε ότι οι υπερβολικά μεγάλες τιμές μπορούν να επιβραδύνουν την αντιστοίχιση μοτίβου.) Εάν patlist είναι full_buffer , το αντίστοιχο σώμα εκτελείται εάν match_max έχουν ληφθεί τα byte και δεν έχουν αντιστοιχιστεί άλλα μοτίβα. Είτε πρόκειται για το full_buffer χρησιμοποιείται η λέξη-κλειδί, οι ξεχασμένοι χαρακτήρες γράφονται στο expect_out (buffer).
Αν patlist είναι η λέξη-κλειδί μηδενικό , και επιτρέπονται οι μηδενικές (μέσω του remove_nulls εντολή), το αντίστοιχο σώμα εκτελείται αν αντιστοιχιστεί ένα μόνο ASCII 0. Δεν είναι δυνατή η αντιστοίχιση 0 byte μέσω μοτίβων glob ή regexp.
Μετά την αντιστοίχιση ενός προτύπου (ή eof ή full_buffer), οποιαδήποτε αντιστοίχιση και προηγουμένως απαράμιλλη έξοδος αποθηκεύεται στην μεταβλητή expect_out (buffer) . Μέχρι και 9 αντιστοιχίσεις υποζώνης regexp αποθηκεύονται στις μεταβλητές expect_out (1, συμβολοσειρά) διά μέσου expect_out (9, συμβολοσειρά) . Αν το -ενδείξεις σημαία χρησιμοποιείται πριν από ένα πρότυπο, τους δείκτες έναρξης και λήξης (σε μορφή κατάλληλη για διακυμάνσεις ) των 10 συμβολοσειρών αποθηκεύονται στις μεταβλητές expect_out (X, αρχή) και expect_out (X, τέλος) όπου το Χ είναι ένα ψηφίο, αντιστοιχεί στη θέση υποστέλεσης στο buffer. Το 0 αναφέρεται σε χορδές που αντιστοιχούν σε ολόκληρο το πρότυπο και παράγονται για πρότυπα σφαιρών καθώς και για μορφές regexp. Για παράδειγμα, αν μια διαδικασία έχει παραγάγει την παραγωγή του "abcdefgh n", το αποτέλεσμα:
περιμένετε "cd"
είναι σαν να είχαν εκτελέσει οι ακόλουθες δηλώσεις:
set expect_out (0, συμβολοσειρά) cd set expect_out (buffer) abcd
και το "efgh n" παραμένει στο buffer εξόδου. Αν μια διαδικασία παρήγαγε την έξοδο "abbbcabkkkka n", το αποτέλεσμα:
αναμένουν -indices -re "b (b *). * (k +)"
είναι σαν να είχαν εκτελέσει οι ακόλουθες δηλώσεις:
(1, τέλος) set expect_out (0, αρχή) 1 set expect_out (0, τέλος) 10 set expect_out (0, τέλος) (2, έναρξη) 10 set expect_out (2, τέλος) 10 set expect_out (2, συμβολοσειρά) k set expect_out (buffer) abbbcabkkkk
και "a n" παραμένει στο buffer εξόδου. Το μοτίβο "*" (και -re ". *") Θα ξεπλύνει την προσωρινή μνήμη εξόδου χωρίς να διαβάσει άλλη έξοδο από τη διαδικασία.
Κανονικά, η αντιστοιχισμένη έξοδος απορρίπτεται από τα εσωτερικά αποθέματα του Expect. Αυτό μπορεί να αποφευχθεί προθέτοντας ένα μοτίβο με το -η μεταφορά σημαία. Αυτή η σημαία είναι ιδιαίτερα χρήσιμη στον πειραματισμό (και μπορεί να συντομευτεί για "-not" για ευκολία κατά τη διάρκεια πειραματισμού).
Το id spawn που σχετίζεται με την αντίστοιχη έξοδο (ή eof ή full_buffer) αποθηκεύεται στο expect_out (spawn_id) .
ο -τέλος χρόνου σημαία προκαλεί την τρέχουσα αναμονή εντολή να χρησιμοποιήσει την ακόλουθη τιμή ως χρονικό όριο αντί να χρησιμοποιήσει την τιμή της μεταβλητής χρονικού ορίου.
Από προεπιλογή, τα μοτίβα συμφωνούν με την έξοδο από την τρέχουσα διαδικασία, ωστόσο το -Εγώ η σημαία δηλώνει ότι η έξοδος από την ονομαζόμενη λίστα spawn_id αντιστοιχεί σε οποιαδήποτε από τα παρακάτω μοτίβα (μέχρι την επόμενη -Εγώ ). Η λίστα spawn_id θα πρέπει είτε να είναι μια διαχωρισμένη λίστα λευκών λωρίδων spawn_ids ή μια μεταβλητή που αναφέρεται σε μια τέτοια λίστα των spawn_ids.
Για παράδειγμα, το ακόλουθο παράδειγμα περιμένει για "συνδεδεμένο" από την τρέχουσα διαδικασία ή "απασχολημένος", "απέτυχε" ή "μη έγκυρος κωδικός πρόσβασης" από το spawn_id που ονομάζεται από $ proc2.
περιμένετε {-i $ proc2 απασχολημένος {θέτει απασχολημένος n; exp_continue} -re "απέτυχε | μη έγκυρος κωδικός πρόσβασης" abort timeout abort συνδεδεμένος}
Η τιμή της παγκόσμιας μεταβλητής any_spawn_id μπορεί να χρησιμοποιηθεί για να ταιριάζει με τα πρότυπα σε οποιαδήποτε spawn_ids που ονομάζονται με όλα τα άλλα -Εγώ σημαίες στο ρεύμα αναμένω εντολή. Το spawn_id από ένα -Εγώ σημαία χωρίς σχετικό μοτίβο (δηλαδή, ακολουθούμενο αμέσως από άλλο -Εγώ ) διατίθεται σε άλλα σχέδια στο ίδιο αναμένω εντολή που σχετίζεται με any_spawn_id.
ο -Εγώ η σημαία μπορεί επίσης να ονομάσει μια σφαιρική μεταβλητή, οπότε η μεταβλητή διαβάζεται για μια λίστα με αναγνωριστικά σπέρματος. Η μεταβλητή επαναδιατυπώνεται κάθε φορά που αλλάζει. Αυτό παρέχει έναν τρόπο αλλαγής της πηγής I / O ενώ η εντολή εκτελείται. Τα ξένα σπέρματα με τον τρόπο αυτό ονομάζονται "έμμεσοι" όχλοι.
Ενέργειες όπως Διακοπή και να συνεχίσει προκαλούν δομές ελέγχου (δηλ. Για , proc ) να συμπεριφέρονται με τον συνήθη τρόπο. Η εντολή exp_continue επιτρέπει αναμένω να συνεχίσει να εκτελεί παρά να επιστρέφει όπως συνήθως.
Αυτό είναι χρήσιμο για την αποφυγή ρητών βρόχων ή επανειλημμένων αναμενόμενων δηλώσεων. Το ακόλουθο παράδειγμα είναι μέρος ενός τμήματος για την αυτοματοποίηση του rlogin. ο exp_continue αποφεύγει να γράφει ένα δευτερόλεπτο αναμένω (για να αναζητήσετε ξανά την ερώτηση) εάν το rlogin ζητήσει κωδικό πρόσβασης.
αναμένετε τον κωδικό πρόσβασης {password: {stty -echo send_user "για $ user) στο $ host:" expect_user -re "(. *) n" send_user " n" send "$ expect_out echo exp_continue} λανθασμένη {send_user "μη έγκυρος κωδικός πρόσβασης ή λογαριασμός n" εξόδου} timeout {send_user "σύνδεση με $ host timed out n" έξοδος} eof {send_user re $ prompt}
Για παράδειγμα, το ακόλουθο κομμάτι μπορεί να βοηθήσει ένα χρήστη να καθοδηγήσει μια αλληλεπίδραση που είναι ήδη πλήρως αυτοματοποιημένη. Σε αυτή την περίπτωση, το τερματικό τίθεται σε ακατέργαστη λειτουργία. Εάν ο χρήστης πιέσει "+", αυξάνεται μια μεταβλητή. Εάν πιεστεί το "p", αποστέλλονται αρκετές επιστροφές στη διαδικασία, ίσως για να το σπρώξουν με κάποιο τρόπο και το "i" επιτρέπει στον χρήστη να αλληλεπιδράσει με τη διαδικασία, απομακρύνοντας αποτελεσματικά τον έλεγχο από το σενάριο. Σε κάθε περίπτωση, το exp_continue επιτρέπει το ρεύμα αναμένω για να συνεχίσετε την αντιστοίχιση προτύπων μετά την εκτέλεση της τρέχουσας ενέργειας.
stty ακατέργαστο -έχει αναμένει_από {-i $ user_spawn_id "p" {send " r r r"; exp_continue} "+" {incr foo; exp_continue} "i" {αλληλεπίδραση; exp_continue} "έξοδος" έξοδος}
Από προεπιλογή, exp_continue επαναφέρει το χρονομετρητή χρονικού ορίου. Ο χρονοδιακόπτης δεν επανεκκινείται, αν exp_continue καλείται με το -continue_timer σημαία.
expect_after expect_args
λειτουργεί ταυτόσημα με το περιμένετε πριν εκτός από το αν τα μοτίβα και από τα δύο αναμένω και αναμένω μπορεί να ταιριάξει, το αναμένω χρησιμοποιείται. Δείτε το περιμένετε πριν εντολή για περισσότερες πληροφορίες.
expect_background expect_args
παίρνει τα ίδια επιχειρήματα όπωςαναμένω , αλλά επιστρέφει αμέσως. Τα μοτίβα ελέγχονται κάθε φορά που φθάνουν νέες εισροές. Το μοτίβοτέλος χρόνου καιΠροκαθορισμένο δεν έχουν νόημαexpect_background και σιωπούν απορρίπτονται. Διαφορετικά, τοexpect_background εντολές χρήσηςπεριμένετε πριν καιαναμένω σχέδια όπως ακριβώςαναμένω κάνει.
Πότεexpect_background οι ενέργειες αξιολογούνται, η επεξεργασία φόντου για το ίδιο αναγνωριστικό ωοτοκίας παρεμποδίζεται. Η επεξεργασία του φόντου ξεκλειδώνεται όταν ολοκληρωθεί η ενέργεια. Ενώ η επεξεργασία φόντου είναι αποκλεισμένη, είναι δυνατό να γίνει ένα (πρωτεύον)αναμένω στο ίδιο αναγνωριστικό ωοτοκίας.
Δεν είναι δυνατή η εκτέλεση ενόςαναμένω ενώ έναexpect_background είναι απεμπλοκή.expect_background για ένα συγκεκριμένο id spawn διαγράφεται δηλώνοντας ένα νέο πεδίο αναμονής expectback με το ίδιο id spawn. Δηλώνειexpect_background χωρίς μοτίβο δεν αφαιρεί το δεδομένο id spawn από την ικανότητα να ταιριάζει με τα μοτίβα στο παρασκήνιο.
περιμένετε πριν expect_args
παίρνει τα ίδια επιχειρήματα όπωςαναμένω , αλλά επιστρέφει αμέσως. Ζεύγη μοτίβων-δράσης από τα πιο πρόσφαταπεριμένετε πριν με το ίδιο αναγνωριστικό ωοτοκίας προστίθενται σιωπηρά σε οποιαδήποτε από τις ακόλουθεςαναμένω εντολές. Εάν ένα πρότυπο ταιριάζει, αντιμετωπίζεται σαν να είχε καθοριστεί στοαναμένω η ίδια η εντολή και το συναφές σώμα εκτελείται στο πλαίσιο τουαναμένω εντολή. Εάν υπάρχουν μοτίβα και από τα δύοπεριμένετε πριν καιαναμένω μπορεί να ταιριάξει, τοπεριμένετε πριν χρησιμοποιείται.
Αν δεν έχει καθοριστεί πρότυπο, το αναγνωριστικό αναπαραγωγής δεν ελέγχεται για τυχόν μοτίβα.
Αν δεν αντικατασταθεί από a-Εγώ σημαία,περιμένετε πριν τα πρότυπα ταιριάζουν με το αναγνωριστικό ωοτοκίας που ορίζεται κατά το χρόνο που τοπεριμένετε πριν εντολή εκτελέστηκε (όχι όταν το μοτίβο της αντιστοιχεί).
Η αιτία -info προκαλείπεριμένετε πριν για να επιστρέψετε τις τρέχουσες προδιαγραφές σχετικά με τα πρότυπα που θα ταιριάζουν. Από προεπιλογή, αναφέρει το τρέχον αναγνωριστικό αναπαραγωγής. Μπορεί να δοθεί μια προαιρετική προδιαγραφή για το id spawn για πληροφορίες σχετικά με αυτό το id spawn. Για παράδειγμα
περιμένετε_εμφανίσετε -info -i $ proc
Μπορεί να δοθεί το πολύ μία προδιαγραφή id spawn. Η σημαία -η άμεση καταστέλλει τα άμεσα ευρήματα που προέρχονται από έμμεσες προδιαγραφές.
Αντί της προδιαγραφής id spawn, η σημαία "-all" θα προκαλέσει "-info" για να αναφέρει όλα τα σπέρματα.
Η έξοδος της σημαίας -info μπορεί να επαναχρησιμοποιηθεί ως το επιχείρημα για να περιμένετε πριν.
expect_tty expect_args
είναι σαναναμένω αλλά διαβάζει χαρακτήρες από το / dev / tty (δηλαδή πληκτρολογήσεις από τον χρήστη). Από προεπιλογή, η ανάγνωση πραγματοποιείται σε κατάσταση μαγειρέματος. Έτσι, οι γραμμές πρέπει να τελειώνουν με μια επιστροφή για νααναμένω για να τα δουν. Αυτό μπορεί να αλλάξει μέσωstty (βλstty εντολή παρακάτω).
expect_user expect_args
είναι σαναναμένω αλλά διαβάζει χαρακτήρες από stdin (δηλ. πληκτρολογήσεις από τον χρήστη). Από προεπιλογή, η ανάγνωση πραγματοποιείται σε κατάσταση μαγειρέματος. Έτσι, οι γραμμές πρέπει να τελειώνουν με μια επιστροφή για νααναμένω για να τα δουν.Αυτό μπορεί να αλλάξει μέσωstty (βλstty εντολή παρακάτω).
πιρούνι
δημιουργεί μια νέα διαδικασία. Η νέα διαδικασία είναι ένα ακριβές αντίγραφο του ρεύματοςΑναμένω επεξεργάζομαι, διαδικασία. Με την επιτυχία,πιρούνι επιστρέφει 0 στη νέα (παιδική) διαδικασία και επιστρέφει το αναγνωριστικό διαδικασίας της διαδικασίας του παιδιού στη γονική διαδικασία. Σε περίπτωση αποτυχίας (πάντοτε λόγω έλλειψης πόρων, π.χ. χώρος ανταλλαγής, μνήμης),πιρούνι επιστρέφει -1 στη γονική διεργασία και δεν δημιουργείται καμία διαδικασία παιδιού.
Οι εξελισσόμενες διεργασίες εξέρχονται μέσω τουέξοδος όπως ακριβώς και η αρχική διαδικασία. Μπορείτε να γράψετε στα αρχεία καταγραφής τις διεργασίες με πεσέτες. Εάν δεν απενεργοποιήσετε την εκσφαλμάτωση ή την καταγραφή των περισσότερων διαδικασιών, το αποτέλεσμα μπορεί να προκαλέσει σύγχυση.
Ορισμένες υλοποιήσεις pty μπορεί να συγχέονται από πολλούς αναγνώστες και συγγραφείς, ακόμη και στιγμιαία. Έτσι, είναι πιο ασφαλέςπιρούνι πριν από τις διαδικασίες ωοτοκίας.
αλληλεπιδράσει string1 body1 … stringn bodyn
δίνει τον έλεγχο της τρέχουσας διαδικασίας στον χρήστη, έτσι ώστε οι πληκτρολογήσεις αποστέλλονται στην τρέχουσα διαδικασία και επιστρέφουν το stdout και stderr της τρέχουσας διαδικασίας.
Τα ζεύγη συμβολοσειράς-σώματος μπορούν να οριστούν ως επιχειρήματα, οπότε το σώμα εκτελείται όταν εισαχθεί η αντίστοιχη συμβολοσειρά. (Από προεπιλογή, η συμβολοσειρά δεν αποστέλλεται στην τρέχουσα διαδικασία)διερμηνέας η εντολή υποτίθεται, εάν λείπει το τελικό σώμα.
Αν τα επιχειρήματα στο σύνολοαλληλεπιδρώ η εντολή απαιτεί περισσότερες από μία γραμμές, όλα τα επιχειρήματα μπορούν να "ενισχυθούν" σε μία έτσι ώστε να αποφευχθεί η διακοπή κάθε γραμμής με αντίστροφη κάθετο. Σε αυτή τη περίπτωση, οι συνήθεις αντικαταστάσεις Tcl θα εμφανιστούν παρά τα τιράντες.
Για παράδειγμα, η ακόλουθη εντολή τρέχει αλληλεπιδρούν με τα ακόλουθα ζεύγη συμβολοσειράς-σώματος: Όταν πατηθεί το ^ Z,Αναμένω αναστέλλεται. (Ο-επαναφορά η φράση επαναφέρει τις λειτουργίες τερματικού.) Όταν πατήσετε το πλήκτρο ^ A, ο χρήστης βλέπει "πληκτρολογήσατε ένα χειριστήριο-Α" και η διαδικασία αποστέλλεται a ^ A. Όταν πατηθεί το $, ο χρήστης βλέπει την ημερομηνία. Όταν πατηθεί το πλήκτρο ^ C,Αναμένω εξόδους. Αν εισάγεται "foo", ο χρήστης βλέπει "bar". Όταν πιέσετε το ~~, τοΑναμένω ο διερμηνέας διαδραματίζει διαδραστικά.
set CTRLZ 032 αλληλεπιδρούν {-αποζημίωση $ CTRLZ {exec kill -STOP pid} 001 {send_user "πληκτρολογήσατε τον έλεγχο-A n"; αποστολή " 001"} $ {send_user "Η ημερομηνία είναι μορφή ωρολογίου δευτερόλεπτα δευτερόλεπτα"} 003 exit foo {send_user "bar"} ~~}
Στα ζεύγη συμβολοσειράς-σώματος, οι συμβολοσειρές αντιστοιχίζονται με τη σειρά που αναφέρονται ως επιχειρήματα. Οι χορδές που ταιριάζουν εν μέρει δεν αποστέλλονται στην τρέχουσα διαδικασία εν αναμονή του υπολοίπου που έρχεται. Αν οι χαρακτήρες εισάγονται έτσι ώστε να μην υπάρχει πλέον πιθανότητα ταίριασμα, μόνο το τμήμα της συμβολοσειράς θα σταλεί στη διαδικασία που δεν μπορεί να αρχίσει άλλο ταιριάζει. Επομένως, οι συμβολοσειρές που είναι υποστοιχίες των μερικών αντιστοιχιών μπορούν να ταιριάζουν αργότερα, αν οι αρχικές συμβολοσειρές που προσπαθούσαν να τακτοποιηθούν τελικά αποτύχουν.
Από προεπιλογή, η αντιστοίχιση συμβολοσειρών είναι ακριβής, χωρίς να υπάρχουν άγριες κάρτες (Αντίθετα, τοαναμένω Η εντολή χρησιμοποιεί πρότυπα σε σχήμα σφαιρών από προεπιλογή-πρώην μπορεί να χρησιμοποιηθεί για την προστασία προτύπων που διαφορετικά θα μπορούσαν να ταιριάζουναλληλεπιδρώ σημαίες από αυτό. Κάθε μοτίβο που αρχίζει με ένα "-" πρέπει να προστατεύεται με αυτόν τον τρόπο. (Όλες οι συμβολοσειρές που αρχίζουν με "-" προορίζονται για μελλοντικές επιλογές.)
ο-σχετικά με σημαία αναγκάζει τη συμβολοσειρά να ερμηνευτεί ως μοτίβο τύπου regexp. Σε αυτή την περίπτωση, στη μεταβλητή αποθηκεύονται τα υποστοιχεία που ταιριάζουν interact_out ομοίως με τον τρόποαναμένω αποθηκεύει την παραγωγή της στη μεταβλητήexpect_out . ο-ενδείξεις σημαία υποστηρίζεται ομοίως.
Το μοτίβο




