Работа с переменными и параметрами командной строки
Для объявления переменных в expect-скриптах используется команда set. Например, для того, чтобы присвоить значение 5 переменной VAR1, используется следующая конструкция:
set VAR1 5
Для доступа к значению переменной перед её именем надо добавить знак доллара — $. В нашем случае это будет выглядеть как $VAR1.
Для того, чтобы получить доступ к аргументам командной строки, с которыми вызван expect-скрипт, можно поступить так:
set VAR [lindex $argv 0]
Тут мы объявляем переменную VAR и записываем в неё указатель на первый аргумент командной строки, $argv 0.
Для целей обновлённого expect-скрипта мы собираемся записать значение первого аргумента, представляющее собой имя пользователя, которое будет использовано в программе, в переменную my_name. Второй аргумент, символизирующий то, что пользователю нравится, попадёт в переменную my_favorite. В результате объявление переменных будет выглядеть так:
set my_name [lindex $argv 0]
set my_favorite [lindex $argv 1]
Отредактируем скрипт answerbot, приведя его к такому виду:
#!/usr/bin/expect -f
set my_name [lindex $argv 0]
set my_favorite [lindex $argv 1]
set timeout -1
spawn ./questions
expect "Hello, who are you? "
send -- "Im $my_name "
expect "Can I ask you some questions? "
send -- "Sure "
expect "What is your favorite topic? "
send -- "$my_favorite "
expect eof
Запустим его, передав в качестве первого параметра SomeName, в качестве второго — Programming:
$ ./answerbot SomeName Programming

Expect-скрипт, использующий переменные и параметры командной строки
Как видите, всё работает так, как ожидалось. Теперь expect-скрипт отвечает на вопросы bash-скрипта, пользуясь переданными ему параметрами командной строки.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОК