Question: What I am trying to do is to:

1. Create a `.exp` file, which will read from the `*.txt` file from the same directory and parse all the content in the text file into a string variable in the expect script.
2. Loop the string, which contains a series of host names, and excecute a series of command until the string is enumerated.

So what the script does, is read a series of hostname from a `txt` file in the same directory, and then read them into a string, and the `.exp` file will auto log into each of them and excecute a series of commands.

I have the following code written but it's not working:

```
#!/usr/bin/expect

set timeout 20
set user test
set password test

set fp [open ./*.txt r]
set scp [read -nonewline $fp]
close $fp

spawn ssh $user@$host

expect "password"
send "$password\r"

expect "host1"
send "$scp\r"

expect "host1"
send "exit\r"

```

Any help is greatly appreciated....

Answer: 
I'd refactor a bit:

```
#!/usr/bin/expect

set timeout 20
set user test
set password test

proc check_host {hostname} {
    global user passwordt

    spawn ssh $user@$hostname
    expect "password"
    send "$password\r"
    expect "% "                ;# adjust to suit the prompt accordingly
    send "some command\r"
    expect "% "                ;# adjust to suit the prompt accordingly
    send "exit\r"
    expect eof
}

set fp [open commands.txt r]
while {[gets $fp line] != -1} {
    check_host $line
}
close $fp

```
Using any of the two solutions here, I would also create a logfile that you can view at a later time. Makes it easy to troubleshoot any problems after the script is run, especially if you're configuring several hundred hosts. 

Add:

> 
> log\_file -a [log file name]
> 
> 
> 

Before your loop.

Cheers,

K