使用expect脚本启动telnet会话

问题描述 投票:0回答:1

我正在使用expect脚本与之前从bash开始的telnet会话进行交互。脚本不要在命令行中监听符号。它只是在超时用完后发送命令。我确信,我输入正确的符号expect (),因为脚本工作,当我独立运行它。

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

这是bash脚本的一部分。在Expect中完成整个脚本可能更容易,但是我没有添加循环,如果还有条件,当我尝试创建一些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"

对于我对符号的期望以及写入同一行的问题,我将不胜感激。

bash expect telnet mikrotik
1个回答
0
投票

你把expect的输出管道输入telnet;在这种情况下,expect无法从telnet流程接收信息。

我会把它作为一个expect脚本链接来 - 编写一个启动会话,然后将控制交给现有脚本。

© www.soinside.com 2019 - 2024. All rights reserved.