expect脚本中使用expect eof 和使用interact的区别

    技术2024-08-05  73

    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 会停留在目标用户。

    Processed: 0.023, SQL: 9