Linux期望没有交互指令的命令不起作用

时间:2017-01-22 09:50:43

标签: linux command expect

我想自动从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指令脚本工作不正确?感谢。

1 个答案:

答案 0 :(得分:1)

如果没有interact,Expect脚本将在最后一个命令expect "]#"之后退出,并且它会终止生成的进程。它就像你在shell运行时关闭SSH客户端应用程序(如PuTTY)窗口一样。

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