Как мне создать команду BASH в ожидании?

  1. Поместите все файлы openvpn * .conf в / etc / openvpn / .
  2. Отредактируйте / etc / default / openvpn . Раскомментируйте это:

     AUTOSTART = "all" 
     
  3. Запустите systemctl daemon-reload .

  4. Запустить сервис openvpn start .
1
07.02.2018, 18:39
1 ответ

Синтаксис для доступа к переменным среды в 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воспринимается как шаблон для поиска в выводе ранее порожденной команды, если таковая имеется, или из стандартный ввод, если нет.

2
27.01.2020, 23:44

Теги

Похожие вопросы