interact | 执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。 |
expect eof | 与spawn对应,表示捕捉终端输出信息终止,结束交互。 |
1、 interact的使用
如上所述:使用interact会保持在终端而不会退回到原终端,
比如切换到root用户,会一直在root用户状态下;
比如ssh到另一服务器,会一直在目标服务器终端下,而不会切回的原服务器。
举例:
//test.sh
#!/usr/bin/expect
spawn su root
expect ":"
send "root\r"
send "ls\r"
interact
ps: 因为ubuntu中密码后的冒号是中文冒号,注意expect ":" 中也要是中文冒号。
如上可以看到,使用interact 会一直保持在目标终端,此时必须手动输入其他命令。即interact后的命令不起作用,比如interact后添加exit ,并不会退出root用户------>interact的作用就是要将把控制权交给控制台
2、expect eof的使用
#!/usr/bin/expect
spawn su root
expect ":"
send "root\r"
send "ls\r"
expect eof
因为expect脚本默认的是等待10s,当执行完ls命令后,停留在root@ubuntu:/home/python/Desktop/Test/day22#10s后,自动切回了原用户。(10s内再输入其他命令也不会在root终端执行)
3、总结:
expect eof 和interact 二者可以根据情况选一个作为结尾,一般我们使用 expect eof 。
expect eof 表示交互结束,退回到原用户;
interact 会停留在目标用户。