send
会将expect
脚本中需要的信息发送给spawn
启动的那个进程,而send_user
只是回显用户发出的信息,类似于shell
中的echo
而已。
如下例所示,使用send
发送密码给spawn
启动的进程,使用send_user
发送提示信息回显给用户。
#!/usr/bin/env bash
username="xxxx"
password="xxxx"
host="47.105.xx.xxx"
/usr/bin/expect <<- EOF
# 在该语句开始执行后,expect开始捕获终端的输出信息,然后做出对应的操作
spawn ssh ${username}@${host}
expect {
"Connection refused" {send_user "拒绝链接\n"}
"yes/no*" { send "yes\n"; exp_continue }
"password:" {send "${password}\n";}
}
expect "Permission denied" {send_user "\n密码错误\n";exit}
expect EOF
EOF
puts
在输出字符串的尾部自动添加换行符而send_user
不会自动添加,除了换行符外,如果在Expect
脚本中使用日志文件,则通过发送的语句send_user
会将其放入日志文件,而通过发送的语句puts
则不会。
大部分时候puts
和send_user
可以互相取代,只要注意其中的不同即可。
====================================================================================================
作者:星木
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果有不当之处,还请不吝赐教。