如何使用expect

时间:2016-07-23 13:35:27

标签: linux ssh tcl expect

我正在使用expect连接我的SSH服务器:

#!/bin/expect

set command [lindex $argv 0]
set command_connect "connect"

proc connect {} {
    spawn ssh username@192.168.1.101
    expect "password"
    send "password\r"
    interact
}

if {$command == $command_connect} {
    connect
}

一切顺利,我可以连接到服务器,但我无法输入命令!不知怎的,所有命令都进入我的电脑!如果我试图清除屏幕:

proc connect {} {
    spawn ssh username@192.168.1.101
    expect "password"
    send "password\r"
    spawn clear
    interact
}

然后我清除了计算机上的屏幕并断开了SSH连接(我回到了我的控制台)!

为什么会发生这种情况以及如何继续在SSH服务器上输入命令?

2 个答案:

答案 0 :(得分:1)

如果要将命令发送到远程服务器,则需要通过生成的SSH进程发送命令:

expect "$"
send "clear\r"

第一行是确保远程服务器上的提示出现。

答案 1 :(得分:1)

另外,因为您install.packages('ggplot2', repos = 'http://cran.us.r-project.org') 在一个过程中,spawn变量将具有本地范围。如果您打算在proc中封装连接,但能够在该过程之外使用生成的进程,则需要将spawn_id添加到过程体。