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

Expect script reads from file and puts everything on the same line

Expect 脚本应该从文件中读取命令并通过 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"

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

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

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

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