Ожидайте, что скрипт читает из файла и помещает все в одну строку - PullRequest
0 голосов
/ 01 апреля 2019

Ожидается, что скрипт должен читать команды из файла и посылать их построчно через 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 голосов
/ 01 апреля 2019

Ваш командный файл, вероятно, имеет \n окончания строк, а не \r

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

Ваша команда lassign не имеет цели. Вы можете просто send "$record\r"

...