I'm trying to write an expect script that reads commands from a file and executes them, as explained in this topic. Here is my script called script.sh
:
#!/usr/bin/expect
set f [open "script_cmds.txt"]
set cmds [split [read $f] "\n"]
close $f
foreach cmd $cmds {
spawn cmd
}
expect eof
close
And the file script_cmds.txt
, situated in the same folder, looks like this:
mkdir cmdlisttest1
mkdir cmdlisttest2
To compile and run the script on cygwin I use
chmod +x script.sh
d2u script.sh
./script.sh
The output I get reads
spawn cmd
spawn cmd
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\cygwin\home\user>
and then it stops there without exiting. The folders cmdlisttest1
and cmdlisttest2
are not created.
I'm fairly new to expect scripts; can anyone spot the mistake(s)?
You're executing
spawn cmd
instead ofspawn $cmd
.With
$cmd
you're reading the value stored in the variablecmd
and that's what you want.