期望脚本从文件中读取并将所有内容放在同一行

时间:2019-04-01 12:48:12

标签: expect telnet mikrotik

期望脚本应从文件中读取命令,并通过telnet逐行发送命令,但它将所有内容置于同一行

我有带命令的文件,我的任务是连接到telnet,从文件中读取命令并发送。我必须对文件中的所有命令执行此操作。我准备了脚本,但是它将所有命令放在同一行上并作为一个发送。

这是带有命令的文件内容(仅仅是测试命令)

add chain=forward src-address=1.1.1.1 action=log;
add chain=forward src-address=1.1.1.1 action=log;
add chain=forward src-address=1.1.1.1 action=log;
add chain=forward src-address=2.2.2.2 action=log;
add chain=forward src-address=2.2.2.2 action=log;
add chain=forward src-address=2.2.2.2 action=log;
add chain=forward src-address=2.2.2.2 action=log;
add chain=forward src-address=2.2.2.2 action=log;
add chain=forward src-address=3.3.3.3 action=log;
add chain=forward src-address=3.3.3.3 action=log;
add chain=forward src-address=3.3.3.3 action=log;

这是我正在使用的脚本

set timeout 1
set fid [open /home/toor/file.txt]
set content [read $fid]
close $fid

###
start telnet and login
###

set records [split $content "\r"]

foreach record $records {
   lassign $records \
         commands
   expect "> "
   send  "$commands\r"
}
sleep 1
expect "> "
send "quit\r"

任何可以帮助我分别发送每个命令的建议都会对我有帮助,我将非常感谢您

1 个答案:

答案 0 :(得分:0)

您的命令文件可能有\n行结尾而不是\r

set fid [open /home/toor/file.txt]
set records [split [read -nonewline $fid] "\n"]
# ..........................................^
close $fid

您的lassign命令没有作用。您可以send "$record\r"