Linux 期望没有交互指令的命令不起作用
Linux expect command without interact directive not working
我想从 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
指令脚本工作不正确?谢谢。
如果没有 interact
,Expect 脚本将在最后一个命令 expect "]#"
后退出,并且它会终止生成的进程。这就像您在 shell 仍然存在时关闭 SSH 客户端应用程序(如 PuTTY)window 运行。
interact
是一个 long-running 命令,它等待生成的进程退出。
我想从 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
指令脚本工作不正确?谢谢。
如果没有 interact
,Expect 脚本将在最后一个命令 expect "]#"
后退出,并且它会终止生成的进程。这就像您在 shell 仍然存在时关闭 SSH 客户端应用程序(如 PuTTY)window 运行。
interact
是一个 long-running 命令,它等待生成的进程退出。