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

Posted

技术标签:

【中文标题】期望脚本从文件中读取并将所有内容放在同一行【英文标题】:Expect script reads from file and puts everything on the same line 【发布时间】:2019-08-22 15:24:33 【问题描述】:

期望脚本应该从文件中读取命令并通过 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】:

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

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

您的 lassign 命令没有任何用途。你可以send "$record\r"

【讨论】:

以上是关于期望脚本从文件中读取并将所有内容放在同一行的主要内容,如果未能解决你的问题,请参考以下文章

在Shell脚本中,读取键盘输入的内容并将其赋值给Shell变量的命令是啥?

读取文件并将其分隔后,将文件移动到文件夹

打开一个文本文件,每次读取一行内容,将每一行作为String读入,并将Sring对象置入LinkedList中,按相反顺序打印出LinkList所有行.

从文本文件中读取一行,然后用新文本 C# 替换同一行

如果字符串和数字在同一行,是否可以读取它们(从TXT文件中)。

如何读取图片文件,并且放在一个byte数组当中?