Это синтаксическая ошибка, но не одна в вашем коде Ruby как таковая.Это незавершенное утверждение в коде оболочки, которое вы выполняете из сценария Ruby.
Это может произойти, если вы оставите блок закрытым.Парсер ожидает найти его конец, но встречает конец сценария.
Давайте посмотрим на ту часть, где вы выполняете команду оболочки
$my_script = %{
if is_exist == false
if ! some-command status; then
#Do some staff
fi
end
# do some staff
}
Теперь давайте разберем Rubyчасти у вас есть вокруг него.Назначение $my_script =
по-прежнему является кодом Ruby.Часть в фигурных скобках - это строковый литерал в нотации % , который вы позже выполняете как скрипт оболочки, используя inline
Vagrant. Однако, похоже, что вы переключаетесьвернуться к синтаксису Ruby перед окончанием строкового литерала.
То, что интерпретатор анализирует как сценарий оболочки, такова:
if is_exist == false
if ! some-command status; then
#Do some staff
fi
end
# do some staff
Обратите внимание, что все внешнее выражение if
использует Ruby's if
синтаксис.Это недопустимая команда оболочки, поэтому ошибка.
Я не уверен, какова семантика этого выражения в вашем случае, но вам нужно преобразовать его в оболочку if
или переместить его за пределы строкибуквально вы переходите к Vagrant, используя опцию inline
.С другой стороны, логика внутри кажется странной.Вы звоните some-command
, если has_program("some-command")
возвращает false.Но это отдельная история:)