【发布时间】: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"
我将不胜感激任何关于我的期望符号问题以及写入同一行的建议。
【问题讨论】:
标签: bash expect telnet mikrotik