man pages section 1: User Commands

Exit Print View

Updated: July 2014

autoexpect (1)


autoexpect - sion


autoexpect [ args ] [ program args...  ]


User Commands                                       AUTOEXPECT(1)

     autoexpect  - generate an Expect script from watching a ses-

     autoexpect [ args ] [ program args...  ]

     autoexpect watches you interacting with another program  and
     creates  an Expect script that reproduces your interactions.
     For straightline scripts, autoexpect saves substantial  time
     over  writing  scripts  by  hand.  Even if you are an Expect
     expert, you will find it convenient  to  use  autoexpect  to
     automate  the  more  mindless  parts of interactions.  It is
     much  easier  to  cut/paste  hunks  of  autoexpect   scripts
     together  than to write them from scratch.  And if you are a
     beginner, you may be able to get away with learning  nothing
     more about Expect than how to call autoexpect.

     The  simplest  way  to use autoexpect is to call it from the
     command line with no arguments.  For example:

          % autoexpect

     By default, autoexpect spawns a shell for you.  Given a pro-
     gram  name  and  arguments,  autoexpect spawns that program.
     For example:

          % autoexpect ftp

     Once your spawned program  is  running,  interact  normally.
     When  you  have exited the shell (or program that you speci-
     fied), autoexpect will create a  new  script  for  you.   By
     default,  autoexpect  writes the new script to "script.exp".
     You can override this with the -f flag  followed  by  a  new
     script name.

     The following example runs "ftp" and stores
     the resulting Expect script in the file "nist".

          % autoexpect -f nist ftp

     It is important to understand that autoexpect does not guar-
     antee  a  working script because it necessarily has to guess
     about certain things - and occasionally  it  guesses  wrong.
     However,  it  is usually very easy to identify and fix these
     problems.  The typical problems are:

          o   Timing.  A surprisingly large  number  of  programs
              (rn,  ksh,  zsh,  telnet,  etc.) and devices (e.g.,
              modems) ignore keystrokes that arrive "too quickly"
              after prompts.  If you find your new script hanging

SunOS 5.11          Last change: 30 June 1995                   1

User Commands                                       AUTOEXPECT(1)

              up at one spot,  try  adding  a  short  sleep  just
              before the previous send.

              You  can force this behavior throughout by overrid-
              ing  the  variable  "force_conservative"  near  the
              beginning of the generated script.  This "conserva-
              tive" mode  makes  autoexpect  automatically  pause
              briefly (one tenth of a second) before sending each
              character.  This pacifies every program I know  of.

              This  conservative  mode is useful if you just want
              to quickly reassure yourself that the problem is  a
              timing  one  (or if you really don't care about how
              fast the script  runs).   This  same  mode  can  be
              forced  before  script  generation  by using the -c

              Fortunately, these  timing  spots  are  rare.   For
              example,   telnet  ignores  characters  only  after
              entering its escape sequence.  Modems  only  ignore
              characters immediately after connecting to them for
              the first time.  A few programs exhibit this behav-
              ior  all  the  time  but typically have a switch to
              disable it.  For example,  rn's  -T  flag  disables
              this behavior.

              The  following example starts autoexpect in conser-
              vative mode.

                   autoexpect -c

              The -C flag defines a key  to  toggle  conservative
              mode.   The following example starts autoexpect (in
              non-conservative  mode)  with  ^L  as  the  toggle.
              (Note  that  the  ^L  is  entered literally - i.e.,
              enter a real control-L).

                   autoexpect -C ^L

              The following example starts autoexpect in  conser-
              vative mode with ^L as the toggle.

                   autoexpect -c -C ^L

          o   Echoing.   Many program echo characters.  For exam-
              ple, if you type "more" to a shell, what autoexpect
              actually sees is:

                   you typed 'm',
                   computer typed 'm',
                   you typed 'o',

SunOS 5.11          Last change: 30 June 1995                   2

User Commands                                       AUTOEXPECT(1)

                   computer typed 'o',
                   you typed 'r',
                   computer typed 'r',

              Without  specific  knowledge  of the program, it is
              impossible to know if you are waiting to  see  each
              character  echoed before typing the next.  If auto-
              expect sees characters  being  echoed,  it  assumes
              that  it  can  send them all as a group rather than
              interleaving them the way they originally appeared.
              This  makes the script more pleasant to read.  How-
              ever, it could  conceivably  be  incorrect  if  you
              really had to wait to see each character echoed.

          o   Change.   Autoexpect  records  every character from
              the interaction in the script.  This  is  desirable
              because it gives you the ability to make judgements
              about what is important and what  can  be  replaced
              with a pattern match.

              On the other hand, if you use commands whose output
              differs from run to run, the generated scripts  are
              not  going  to be correct.  For example, the "date"
              command always produces different output.  So using
              the date command while running autoexpect is a sure
              way to produce a script that will  require  editing
              in order for it to work.

              The -p flag puts autoexpect into "prompt mode".  In
              this mode, autoexpect will only look  for  the  the
              last  line of program output - which is usually the
              prompt.  This handles the date problem (see  above)
              and most others.

              The  following  example starts autoexpect in prompt

                   autoexpect -p

              The -P flag defines a key to  toggle  prompt  mode.
              The  following  example  starts autoexpect (in non-
              prompt mode) with ^P as the toggle.  Note that  the
              ^P  is  entered literally - i.e., enter a real con-

                   autoexpect -P ^P

              The following example starts autoexpect  in  prompt
              mode with ^P as the toggle.

SunOS 5.11          Last change: 30 June 1995                   3

User Commands                                       AUTOEXPECT(1)

                   autoexpect -p -P ^P

     The  -quiet flag disables informational messages produced by

     The -Q flag names a quote character which  can  be  used  to
     enter  characters  that  autoexpect  would otherwise consume
     because they are used as toggles.

     The following example shows a number  of  flags  with  quote
     used to provide a way of entering the toggles literally.

          autoexpect -P ^P -C ^L -Q ^Q

     I  don't  know if there is a "style" for Expect programs but
     autoexpect should definitely not be held up as any model  of
     style.  For example, autoexpect uses features of Expect that
     are intended specifically for computer-generated  scripting.
     So  don't  try to faithfully write scripts that appear as if
     they were generated by autoexpect.  This is not useful.

     On the other hand, autoexpect scripts do  show  some  worth-
     while  things.  For example, you can see how any string must
     be quoted in order to use it in a Tcl script simply by  run-
     ning the strings through autoexpect.

     See   attributes(5)   for   descriptions  of  the  following

     |Availability   | shell/expect     |
     |Stability      | Uncommitted      |
     "Exploring Expect: A Tcl-Based Toolkit for Automating Inter-
     active Programs" by Don Libes, O'Reilly and Associates, Jan-
     uary 1995.

     Don Libes, National Institute of Standards and Technology

     expect and autoexpect are in the public domain.  NIST and  I

SunOS 5.11          Last change: 30 June 1995                   4

User Commands                                       AUTOEXPECT(1)

     would  appreciate  credit if these programs or parts of them
     are used.

     This  software  was   built   from   source   available   at    The  original
     community  source  was   downloaded   from    http://source-

     Further information about this software can be found on  the
     open source community website at

SunOS 5.11          Last change: 30 June 1995                   5