LINUX.ORG.RU
ФорумAdmin

помогите кто силён в expect

 ,


0

2

В bash скрипте использую expect, запускаю его следующим образом:

#!/bin/bash

expect -c "set timeout 120
spawn -noecho команда
expect \"ответ\"
send \"ввод\n\"
expect \"ответ\"
send \"здесь в вводе надо передать кавычки\n\"
expect eof"

Как в send передать двойные кавычки, то есть что бы они набрались в выводе. Следующие варианты не работают:

send \"\"ввод\"\n\"
send \"""ввод""\n\"
send \"'"ввод"'\n\"

Использовать expect надо именно в bash скрипте.

Прошу строго не ругать, в мане не смог найти ответ, в интернете то же.

★★

#!/bin/bash

Почему бы сразу expect сюда не вписать ?

joy4eg ★★★★★ ()
expect -c 'set timeout 120
spawn -noecho команда
expect "ответ"
send "ввод\n"
expect "ответ"
send "здесь в \"вводе надо передать\" кавычки\n"
expect eof'

Не проверял

anonymous ()

как насчёт генерации скрипта через autoexpect?

zolden ★★★★★ ()
Ответ на: комментарий от anonymous

да так работает, но теперь не могу в expect передать переменную раньше передавал вот так:

#!/bin/bash

perem1="переменная-1"
perem2="переменная-2"

expect -c "set timeout 120
spawn -noecho команда $perem1
expect \"ответ\"
send \"ввод $perem2\n\"
expect \"ответ\"
send \"здесь в вводе надо передать кавычки\n\"
expect eof"

v4567 ★★ ()
Ответ на: комментарий от v4567

autoexpect-том не пользовался

при попытке запуска, написало вот что:

autoexpect --help
/usr/bin/autoexpect: line 4: exec: tclsh: не найден
v4567 ★★ ()
Ответ на: комментарий от v4567

Всем спасибо за помощь!

Заработал вот такой вариант:

#!/bin/bash

perem1="переменная-1"
perem2="переменная-2"

expect -c 'set timeout 120
spawn -noecho команда '$perem1'
expect "ответ"
send "ввод '$perem2'\n"
expect "ответ"
send "здесь в \"вводе надо передать\" кавычки\n"
expect eof'
v4567 ★★ ()
Последнее исправление: v4567 (всего исправлений: 1)
Ответ на: комментарий от das_tier

Так он же аккурат перед подстановкой закрывает одинарные кавычки и открывает заново после.

Кстати, v4567, это сломается, если в значении переменной будут пробелы. Нужно так:

expect -c 'set timeout 120
spawn -noecho команда '"$perem1"'
expect "ответ"
send "ввод '"$perem2"'\n"
expect "ответ"
send "здесь в \"вводе надо передать\" кавычки\n"
expect eof'
intelfx ★★★★★ ()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от vash_sa

man expect, Ёпта!

       stty args
             changes terminal modes similarly to the external stty command.

...

             The  following  example  illustrates  how  to temporarily disable
             echoing.  This could be used in  otherwise-automatic  scripts  to
             avoid  embedding passwords in them.  (See more discussion on this
             under EXPECT HINTS below.)

                 stty -echo
                 send_user "Password: "
                 expect_user -re "(.*)\n"
                 set password $expect_out(1,string)
                 stty echo

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.