Here is my use case for expect script ( one of few i have)
I want to run multiple sed
command over ssh. Its like pre-build environment setup.
I want to run something like this :-
#!/usr/bin/expect
set timeout -1
spawn -noecho bash -c "ssh -t user@host 'sed -i <some_stuff1> <file1>'"
spawn -noecho bash -c "ssh -t user@host 'sed -i <some_stuff2> <file2>'"
spawn -noecho bash -c "ssh -t user@host 'sed -i <some_stuff3> <file3>'"
expect {
-re ".*sword.*" {
exp_send "$env(PASS_WORD)\n"
exp_continue
}
}
But only last sed
command will execute. 1st and 2nd will be skipped.
What could be the hidden gem i am missing?
Here is what i looked at so far but not helpful
You don't really need multiple (means parallel) spawn
here.
#!/usr/bin/expect
set timeout 60
set cmds [list "ssh host1 ..." "ssh host2 ..." "ssh host3 ..."]
foreach cmd $cmds {
spawn -noecho bash -c $cmd
expect {
-nocase "password" {
exp_send "$env(PASS_WORD)\r"
exp_continue
}
eof { wait } ; # at this time the last spawn'ed process has exited
}
}