我想自动从192.168.119.128
登录到192.168.119.129
并运行一些命令,所以我写了一个期望脚本。
a.sh
#!/usr/bin/expect -f
set timeout 5
spawn ssh root@192.168.119.129
expect "password" {send "123456\r"}
expect "]#" {send "touch /tmp/a.txt\r"}
#interact
输出结果为:
kaiwen@kaiwen-virtual-machine:~/Work$ ./a.sh
spawn ssh root@192.168.119.129
root@192.168.119.129's password:
Last login: Sun Jan 22 17:36:21 2017 from 192.168.119.128
[root@localhost ~]# kaiwen@kaiwen-virtual-machine:~/Work$
我成功登录,但似乎touch /tmp/a.txt
命令没有运行。
当我取消注释 a.sh 的最后一行#interact
时,它会正常工作,并且会创建文件a.txt。
#!/usr/bin/expect -f
set timeout 5
spawn ssh root@192.168.119.129
expect "password" {send "123456\r"}
expect "]#" {send "touch /tmp/a.txt\r"}
interact
这是输出:
kaiwen@kaiwen-virtual-machine:~/Work$ ./a.sh
spawn ssh root@192.168.119.129
root@192.168.119.129's password:
Last login: Sun Jan 22 17:41:23 2017 from 192.168.119.128
[root@localhost ~]# touch /tmp/a.txt
[root@localhost ~]#
为什么没有interact
指令脚本工作不正确?感谢。
答案 0 :(得分:1)
如果没有interact
,Expect脚本将在最后一个命令expect "]#"
之后退出,并且它会终止生成的进程。它就像你在shell运行时关闭SSH客户端应用程序(如PuTTY)窗口一样。
interact
是一个长时间运行的命令,它等待生成的进程退出。