1、网上最多的办法是在spawn中加入bash -c,如下:
#!/usr/bin/expect -f
set HOST
"192.168.102.1"
set USER
"codefor"
set PASS
"codefor"
set BOOKFILE
"/home/codefor"
#upload
spawn bash -c
"scp *.zip $USER@$HOST:$BOOKFILE"
expect {
"*password*"
{send
"$PASS\r"
;}
}
expect eof;
二、使用该方法后发现在后面追加删除发送过的文件时,文件名带*还是无法识别,于是采用了下面的办法:
#!/bin/bash
for FILE in $(ls /home/d5000/sichuan/uap-server/cimsvg_todbus1/base64/*)
do
expect<<EOF
spawn scp $FILE 198.80.1.11:/home/d5000/sichuan/cimsvg/in/
expect {
"yes/no" {send "yes\r";exp_continue;}
"password:" {send "scpw_5200\r";}
}
expect eof
exit
EOF
mv $FILE /home/d5000/sichuan/uap-server/cimsvg_todbus1/base64.bak/
done
该方法将*通配符放在了expect段的外面,于是可以识别*