LinuxForum.Fans
Тема

EXPECT передача переменной скрипту

Автор: Munsera 28 сообщений 17649 просмотров
#135342

Все понял!
СПАСИБО БОЛЬШОЕ!!!!!

#135344

Просто написал

text
nano /home/local SWITCH_IP 

В программе. И все заработало! Значение передалось!))
Большое спасибо за помощь!!!

#135346

А можно еще вопрос:
Как сделать так, чтобы expect понимал "*". Т.е. мне нужно:

text
switch10027(config)#"
send -- "ip acce        "
expect -exact "\r
switch10027(config)#ip access-list "
send -- "e 

А вот так:

text
*(config)#"
send -- "ip acce        "
expect -exact "\r
*(config)#ip access-list "
send -- "e 

Для того чтобы сделать скрипт универсальным.

#135368
Munsera написал:
Как сделать так, чтобы expect понимал "*". Т.е. мне нужно:

вы знает,.. Не помню. Как-то можно, но не нужно. expect я только в крайнем случае юзаю - если надо что-то передать интерактивной программе. В самом крайнем случае, я меняю сам скрипт. Например, как я понимаю, вам нужно сменить switch10027 скажем на switch10028?
ок, пишем

text
sed -i "s/switch10027/switch10028/g" script.expect

а ещё лучше будет сделать так:
[console]sed "s/#SWITCH#/$SWITCH/g" script.tpl >script.expect[/console]
тут $SWITCH это переменная шелла, с нужным параметром, а script.tpl это шаблон, в котором вместо параметра написано #SWITCH#
т.е. по шаблону мы генерируем нужные скрипты на данный случай. ибо в самом экспекте программировать невозможно - кажется, что его специально запутывали. :(

#135371

Сделал подругому. Правда геморно, но зато все видно и на лицо)))

text
set sw [lindex $argv 0]
set witch10027 192,168,0,2
set witch10026 192,168,0,5

if {$sw==$witch10027} {set nom switch10027}

$nom#" send -- "conf t\r" expect -exact "conf t\r Enter configuration commands, one per line. End with CNTL/Z.\r $nom(config)#"

#135372

Единственная проблема:
$nom(config)#"
понимает как массив. Как можно переменную вставить в середину слова???

#250855

Столкнулся со схожей проблемой, пока не могу найти решение
http://www.opennet.ru/openforum/vsluhforumID9/9447.html#3
суть такова, в теле expect скрипта вызываю любую команду shell, результат который возвращает команда shell нужно присвоить переменной в скрипте expect.

#261627

Здравствуйте, коллеги!
А expect умеет "выдергивать" из переменной символы?
Допустим есть скрипт, которому передаю значение переменной

text
# /home/local 192.168.0.1
text
#!/usr/bin/expect -f

set timeout -1 spawn telnet $SWITCH_IP match_max 100000 expect -exact "Trying $SWITCH_IP...\r\r Connected to $SWITCH_IP ($SWITCH_IP).\r\r Escape character is '^\]'.\r\r \r \r User Access Verification\r \r Username: " send -- "логин\r" expect -exact "логин\r Password: " send -- "пароль\r" expect -exact "\r \r switch10027#" send -- "conf t\r" expect -exact "conf t\r Enter configuration commands, one per line. End with CNTL/Z.\r

Можно ли сделать так, чтобы при "длинне" переменной выше 11 символов, скрипт "Обрезал" ее до 11.

Допустим мы передаем

text
# /home/local 192.168.0.19875

Скрипт проверяет переменную и обрезфет ее до 192.168.0.1.

Спасибо.

Войдите или зарегистрируйтесь, чтобы ответить.