在启动的 telnet 会话中使用 expect 脚本

Using expect script inside started telnet session

我正在使用 expect 脚本与 telnet 会话进行交互,该会话从 bash 开始。该脚本不在命令行中监听符号。它只是在超时 运行 秒后发送命令。我确定,我在 expect () 中输入了正确的符号,因为脚本有效,当我 运行 它独立时。

我有要发送到 mikrotik 的命令列表(每行 1 个命令)。我的期望脚本将每个命令放在同一行,然后脚本发送它们。我用 ; 分隔命令并且它有效,但只是一个简短的命令。所以我决定将文件与命令分开到更小的文件中。然后我打开 telnet 会话(在 bash 中)并启动 expect 脚本,它会打开较小的文件并一遍又一遍地发送命令。所以我不需要一遍又一遍地重新启动同一个会话。问题是,expect 脚本在获取等待符号时不发送命令,但它在超时 运行s 后发送命令。

这是 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"

我将不胜感激任何关于我对符号的期望问题以及写入同一行的问题的建议。

您正在将 expect 输出 输送到 telnet;在这种情况下,expect 无法接收来自 telnet 进程的信息。

我会将其作为 expect 脚本链来处理 - 编写一个启动会话的脚本,然后将控制权移交给您现有的脚本。