The -f Flag
The -f flag names a file from which to read commands, i.e., a script. Interactively, this may seem pointless. If you say "expect script“, it is assumed that you meant "expect -f script" anyway. In fact, there is no reason to ever use -f from the command line. It is only provided so that it can be used from the #! line as:
#!/usr/local/bin/expect -f
Just as with "—“, when a script starts out with this -f line and is invoked just by its name (without "expect“), it behaves as you had entered the following command:
% expect -f script args
Now you can use Expect flags such as -c and they will be correctly handled. Since the "-f script" looks like a flag, Expect continues looking and finds the -c and interprets this as a flag, too.
% echo.exp -c "set debug 1" foo bar 17
argv0: echo.exp
arg 0: foo
arg 1: bar
arg 2: 17The drawback, of course, is that if you want to pass flags to your own script, you then have to also use "—“. For example:
% echo.exp—-e -ZZ -c
-e and -ZZ are not flags known to Expect, but you must still use the — or else Expect will tell you that you have used an illegal flag.
% echo.exp -e -ZZ -c
expect: illegal option—e