expect 命令
本人喜欢用shell写一些同步逻辑,但是会需要用到同步文件,并远程执行脚本的需求
使用expect命令的时候,我是嵌在shell里面执行的
下面是拷贝文件过去的例子:
expect -c "
set timeout 30;
spawn scp /home/data/fname.txt root@100.10.140.3:/home/data/
expect {
\"*assword\" { send \"$password\r\"; exp_continue;}
\"*yes/no*\" {send \"yes\r\"; exp_continue;}
eof { send_user \"error response\"}
}
"
set timeout 30; 是为了防止同步的时候文件过大,导致会话被提前中断, 所以设置了30秒超时
下面是远程执行命令的例子:
expect -c "
set timeout 30;
spawn ssh root@100.10.140.3 \"pwd;cd /root;sh exec_cmd.sh;\"
expect {
\"*assword\" { send \"$password\r\"; exp_continue;}
\"*yes/no*\" {send \"yes\r\"; exp_continue;}
eof { send_user \"error response\"}
}
"
上面两个例子都用到一个很关键的set timeout,这个设置时常,可以防止命令提前终止,如果遇到超大文件,或者更慢的命令,需要设置更长的时间,才能保证expect能达到预期的效果