Запускать нужно без указания интерпритатора (sh), т.к он указан в шабанге (первая строка).
Спасибо, часть ошибок исправлена. Запустил так:
./test.sh
Но в 41 строке вот такоe
./test.sh
spawn x11vnc -storepasswd ~/vnc-test/passwd
Enter VNC password: 1
Verify password: extra characters after close-quote
while executing
"expect "(yes/no)?*"{"
(file "./test.sh" line 41)
Вот эта строка вызывает ошибку
expect "(yes/no)?*"
expect "(yes/no)?*"{
send "yes\r"
# не забывайте про \r в конце строки, перед кавычками.
}
Код полностью
#!/usr/bin/expect -f
# Expect читает и исполняет команды из файла.
# Expect может быть также вызван на системах
# поддерживающих нотацию #!, используемую для
# метки исполняемого сценария, в этом случае,
# первая строка в вашем сценарии должна быть такой
# как указано выше
# По умолчанию, период таймаута установлен в 10 секунд,
# но также можноустановить, к примеру, в 2, командой "set timeout 2".
set timeout 2
# Объявляем и инициализируем переменные
set dir "~/vnc-test/passwd"
set pass "1"
# создаёт новый процесс запускающий программу с аргументами
spawn x11vnc -storepasswd $dir
# Указываем образец строки
# который ожидаем от программы x11vnc
expect "Enter VNC password:"
# Посылаем запрашиваемый пароль, и ждем приглашения
# на ввод пароля для подтверждения.
# посылаем пароль
# /r - это управляющий символ возврата каретки (переход на новую строку)
send "$pass\r"
expect "Verify password:"
send "$pass\r"
# Автоматизируем ответ на запрос о записи пароля в файл
expect "(yes/no)?*"{
send "yes\r"
# не забывайте про \r в конце строки, перед кавычками.
}
send "exit\r"
expect eof
Пользователь добавил сообщение 21 Апреля 2017, 09:13:02:
А сам expect установлен?
да, сразу установил
Нашел, ошибка в регулярном выражении, так как x11vnc выдает совсем другой запрос,
и отправлять ответ на запрос, можно просто -
yНеправильно:
expect "(yes/no)?*"{
send "yes\r"
# не забывайте про \r в конце строки, перед кавычками.
}
Вот такая строка получается, которую выдает программа x11vnc
Write password to /home/alex/.vnc-test/passwd3? [y]/n
Как посоветуете оформить регулярное выражение, написать шаблон для этой строки...
Пользователь добавил сообщение 21 Апреля 2017, 10:39:18:
Оформил регулярное выражение и немного переделал скрипт:
#!/usr/bin/expect -f
# Expect .
# Expect
# #!,
# , ,
#
#
# , 10 ,
# , , 2, "set timeout 2".
# exp_internal 1 -
#exp_internal 1
set timeout 2
#
set dir "/home/alex/.vnc-test/passwd4"
set pass "1"
#
spawn x11vnc -storepasswd $dir
#
# x11vnc
expect "Enter VNC password:"
# ,
# .
#
# /r - ( )
send "$pass\r"
expect "Verify password:"
send "$pass\r"
#
expect { "(Write password to)*"
{ send "y\r"
# \r , .
}
}
sleep 2
send "exit\r"
expect eof
Вопрос: Почему
expect - не принимает вот такой путь?
set dir "~/.vnc-test/passwd4"
Пришлось исправить на полный
set dir "/home/alex/.vnc-test/passwd4"
Поясните пожалуйста, может есть решение?