在启动的 telnet 会话中使用期望脚本
Posted
技术标签:
【中文标题】在启动的 telnet 会话中使用期望脚本【英文标题】:Using expect script inside started telnet session 【发布时间】:2019-08-22 10:21:16 【问题描述】:我正在使用一个期望脚本与 telnet 会话进行交互,该会话之前从 bash 开始。该脚本不侦听命令行中的符号。它只是在超时用完后发送命令。我敢肯定,我在expect ()
中输入了正确的符号,因为脚本在我独立运行时有效。
我有要发送到 mikrotik 的命令列表(每行 1 个命令)。我的期望脚本将每个命令放在同一行,然后脚本将它们发送。我用;
分隔命令并且它工作,但只是一个简短的命令。所以我决定用命令将文件分隔成更小的文件。然后我打开 telnet 会话(在 bash 中)并启动期望脚本,该脚本会打开较小的文件并一遍又一遍地发送命令。所以我不需要一遍又一遍地重新启动同一个会话。问题是,expect 脚本在收到等待符号时不发送命令,但在超时后发送命令。
这是 bash 脚本的一部分。在 Expect 中执行整个脚本可能更容易,但我还没有添加循环和 if 条件,当我尝试创建一些 while 或 if 结构时,我失败了。
(
echo open "12.12.13.44"
sleep 2
echo "admin+t"
sleep 2
echo "admin"
sleep 2
/usr/bin/expect /home/toor/expect2.sh
) | telnet
这是预期的符号
expect "> "
这里是expect脚本的一部分,它将所有命令放在同一行(没有sleep 1
命令,脚本在读取文件的过程中发送quit
)
set timeout 1
set fid [open /home/toor/file.txt]
set content [read $fid]
close $fid
set records [split $content "\r"]
foreach record $records
lassign $records \
commands
expect "> "
send "$commands\r"
sleep 1
expect "> "
send "quit\r"
我将不胜感激任何关于我的期望符号问题以及写入同一行的建议。
【问题讨论】:
【参考方案1】:您正在将expect
的输出 传送到telnet
;在这种情况下,expect
无法从telnet
进程接收信息。
我会将其作为expect
脚本链来处理 - 编写一个启动会话的脚本,然后将控制权移交给您现有的脚本。
【讨论】:
以上是关于在启动的 telnet 会话中使用期望脚本的主要内容,如果未能解决你的问题,请参考以下文章