不带interact指令的Linux expect命令不工作

不带interact指令的Linux expect命令不工作,linux,command,expect,Linux,Command,Expect,我想从192.168.119.128自动登录到192.168.119.129并运行一些命令,因此我编写了一个expect脚本 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-m

我想从
192.168.119.128
自动登录到
192.168.119.129
并运行一些命令,因此我编写了一个expect脚本

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
指令,脚本工作不正确?谢谢。

如果没有
交互
Expect脚本将在最后一个命令
Expect“]#”
后退出,它将终止生成的进程。这就像在shell仍在运行时关闭SSH客户端应用程序(如PuTTY)窗口一样

interact
是一个长时间运行的命令,它等待生成的进程退出。

是的,我解决了,将最后一个“#interact”更改为“expect”]#“{close}”将起作用。