1

我正在尝试登录远程设备并将其输出写入文件。我想出了这个代码。但在 rez.txt 文件中我得到行“(缓冲区)”

我的代码非常基本 - 从手册中,我不知道出了什么问题:

/usr/bin/expect << SSHLOGIN

spawn ssh -l $user $host

set timeout 100

expect {
"assword: " {
        send "$password\r"
        }
}
expect {
">" {
        send "?\r"
        }
}
expect {
"?" {
        puts [open rez.txt w] $expect_out(buffer)
        }
}

expect {
">" {
        send "exit\r"
        }
}
SSHLOGIN
4

2 回答 2

1

您似乎在 bash 脚本中调用 Expect。

$expect_out部分$expect_out(buffer)被外壳取代。由于$expect_out没有设置任何东西,Expect 程序实际上是这样做的:

puts [open rez.txt w] (buffer)

所以它基本上是把这个词(buffer)

要解决此问题,您需要转义$expect_out,以便它不会被 shell 扩展并正确传递给 Expect,如下所示:

puts [open rez.txt w] \$expect_out(buffer)
于 2015-03-08T21:44:02.853 回答
0

expect 的默认匹配模式是“glob”?是一个特殊的 glob 字符。在您发送“?”之后,当 expect 看到一个字符时,您的输出文件就会被写入。

如果你期待一个文字?,那么你想使用精确匹配:

expect -ex "?" {
    puts [open rez.txt w] $expect_out(buffer)
}
于 2013-11-13T13:22:40.197 回答