/ etc / openvpn /
. Отредактируйте / etc / default / openvpn
. Раскомментируйте это:
AUTOSTART = "all"
Запустите systemctl daemon-reload
.
сервис openvpn start
. Синтаксис для доступа к переменным среды в TCL(expect
— интерпретатор TCL )— $env(VARNAME)
, поэтому:
spawn docker run -v $env(OVPN_DATA):/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki
Если вы хотите запустить оболочку для интерпретации некоторого кода оболочки, вы должны запуститьsh -c the-code
(или bash -c
, хотя здесьbash
-нет ничего особенного в этом коде оболочки ). Это то, для чего предназначена функция system()
большинства языков.
spawn sh -c {
docker run -v "$OVPN_DATA:/etc/openvpn" --rm -it kylemanna/openvpn ovpn_initpki
}
{...}
— сильные кавычки в TCL. Я также добавил отсутствующие кавычки вокруг расширения переменной оболочки, так как в противном случае это был бы больше синтаксис zsh
/ rc
/ fish
, чем синтаксис sh
.
Кроме того, вы бы spawn
перед любым оператором expect...
. Команда spawn
предназначена для запуска команды, с которой вы хотите взаимодействовать, инструкция expect...
предназначена для ожидания определенного вывода этой команды.
В приведенном выше коде вы вообще не запускаете spawn
, этот spawn
внутри аргумента expect
воспринимается как шаблон для поиска в выводе ранее порожденной команды, если таковая имеется, или из стандартный ввод, если нет.