[ ecode = 0 ]
должно быть[[ "$ecode" -eq 0 ]]
:
[[
— это особый случай, когда в этом случае вам строго не нужны знаки доллара или кавычки)-eq
для целочисленного сравнения Когда вы выполняете spawn...
в expect
, создается pty-терминал, который наследует настройки текущего tty, в котором запущена программа.
Таким образом, при тестировании скрипта в терминале, например, с 24 строками (строками ), программа vpn увидит это и будет действовать соответствующим образом, запрашивая ввод через каждые 24 строки вывода.
Если теперь вы запускаете свой скрипт из модуля systemd, например, нет tty для наследования настроек, а количество строк и столбцов по умолчанию равно 0. Поэтому программа vpn ведет себя по-другому.
Решение состоит в том, чтобы явно указать желаемое количество строк и столбцов перед выполнением spawn
. В expect
это делается установкой переменной перед строкой spawn...
:
set stty_init "rows 24 cols 80"
Возможно, вы даже сможете установить rows 999
и избежать всех приглашений на страницу.
Я не понимаю разницы между загрузкой и не -загрузкой.
Тем не менее, это то, как зациклиться на этом «нажмите ввод»:
expect {
-exact "press enter for next page" {
send -- "\r"
exp_continue
}
-exact "Enter a number to select the location\r"
}
send -- "2\r"