function expect_password {
expect -c "\
set timeout 90
set env(TERM)
spawn $1
expect \"password:\"
send \"$password\r\"
expect eof
"
}
expect_password "scp /home/kit.ho/folder/file1 root@$IP:/usr/bin"
The above expect_password works perfect!
However, I want to transfer multiple files in that directory, so I tried:
expect_password "scp /home/kit.ho/folder/* root@$IP:/usr/bin"
But an error comes up:
/home/kit.ho/folder/*: No such file or directory
Killed by signal 1.
It seems that expect doesn’t recognize *. How can I transfer files in that way?
There is a possible answer using rsync but I can’t use that.
The manpage of expect says “If program cannot be spawned successfully because exec(2) fails”, so I assume that expect uses exec internally. exec doesn’t call any shell to do wildcard expansion and such magic, which means that your ssh sees the asterisk and can’t handle it. Have you tried to call your shell explicitely like
(maybe you need to omit the single quotes)?
edit:
use \” instead of ‘