Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
AUTOEXPECT(1)		     General Commands Manual		   AUTOEXPECT(1)

NAME
     autoexpect - generate an Expect script from watching a session

SYNOPSIS
     autoexpect [ args ] [ program args...  ]

INTRODUCTION
     autoexpect  watches you interacting with another program and creates an Ex-
     pect 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  program  name  and
     arguments, autoexpect spawns that program.  For example:

	  % autoexpect ftp ftp.cme.nist.gov

     Once your spawned program is running, interact normally.  When you have ex-
     ited  the	shell  (or program that you specified), 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 ftp.cme.nist.gov" and stores the  resulting
     Expect script in the file "nist".

	  % autoexpect -f nist ftp ftp.cme.nist.gov

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

	    *	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 up at one spot, try adding a short sleep just before the
		previous send.

		You  can  force this behavior throughout by overriding the vari-
		able "force_conservative" near the beginning  of  the  generated
		script.  This "conservative" mode makes autoexpect automatically
		pause  briefly (one tenth of a second) before sending each char-
		acter.	This pacifies every program I know of.

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

		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	behavior
		all the time but typically have a switch to disable it.  For ex-
		ample, rn's -T flag disables this behavior.

		The following example starts autoexpect in conservative mode.

		     autoexpect -c

		The -C flag defines a key to toggle conservative mode.	The fol-
		lowing 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  conservative  mode
		with ^L as the toggle.

		     autoexpect -c -C ^L

	    *	Echoing.   Many  program  echo	characters.  For example, if you
		type "more" to a shell, what autoexpect actually sees is:

		     you typed 'm',
		     computer typed 'm',
		     you typed 'o',
		     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 typ-
		ing  the  next.   If autoexpect sees characters being echoed, it
		assumes that it can send them all as a group rather than  inter-
		leaving  them  the way they originally appeared.  This makes the
		script more pleasant to read.  However, it could conceivably  be
		incorrect  if  you  really  had  to  wait  to see each character
		echoed.

	    *	Change.  Autoexpect records every character from the interaction
		in the script.	This is desirable because it gives you the abil-
		ity 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  out-
		put.   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  out-
		put  - which is usually the prompt.  This handles the date prob-
		lem (see above) and most others.

		The following example starts autoexpect in prompt mode.

		     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 control-P.

		     autoexpect -P ^P

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

		     autoexpect -p -P ^P

OTHER FLAGS
     The -quiet flag disables informational messages produced by autoexpect.

     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

STYLE
     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, auto-
     expect 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 worthwhile things.   For
     example,  you can see how any string must be quoted in order to use it in a
     Tcl script simply by running the strings through autoexpect.

SEE ALSO
     "Exploring Expect: A Tcl-Based Toolkit for Automating Interactive Programs"
     by Don Libes, O'Reilly and Associates, January 1995.

AUTHOR
     Don Libes, National Institute of Standards and Technology

     expect and autoexpect are in the public domain.  NIST and I would	appreci-
     ate credit if these programs or parts of them are used.

				  30 June 1995			   AUTOEXPECT(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=expect_autoexpect&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help