Ссылка на атрибут в строке пути Windows

У меня есть следующее выполнить в шеф-повара:

#execute
execute 'service-api install' do
  command 'c:\buildinfo\service-api\api\approot\web-#{node['default']['env']}.cmd'
end

он работает в windows и #{node['default']['env']} - это атрибут, на который я пытаюсь ссылаться в приведенной выше строке пути.

Когда я запускаю это, я получаю следующую ошибку:

> SyntaxError
> ==> default: -----------
> ==> default: C:\vagrant-chef\319622f1791bb50a8f9441fd4c1ff806\cookbooks\djcm_paypal_win\recipes\installService.rb:76:
> syntax error, unexpected tIDENTIFIER, expecting keyword_end
> ==> default: ...api\approot\web-#{node['default']['env']}.cmd'

Если я попробую:

 #execute
    execute 'service-api install' do
      command "c:\buildinfo\service-api\api\approot\web-#{node['default']['env']}.cmd"
    end

Косые черты отображаются другим цветом (escape-символ?), И я получаю следующую ошибку:

[execute] The filename, directory name, or volume label syntax is incorrect.
 command "c:\buildinfo ervice-api\api\approotweb-integration.cmd"

Таким образом, это портит косые черты, но получает атрибут. Как я могу дать атрибут в строке с косой чертой?

правка 1: я попробовал и двойную косую черту, и другое решение, хотя теперь оно пытается найти правильный путь, но все равно выдает ошибку, даже если файл присутствует в этом точном месте, и я могу запустить его вручную. Есть идеи?

ошибка сейчас:

* execute[service-api install] action run
==> default:     [execute] The system cannot find the path specified.
==> default:     
==> default: 
==> default:     ================================================================================
==> default:     Error executing action `run` on resource 'execute[service-api install]'
==> default:     ================================================================================
==> default:     
==> default:     Mixlib::ShellOut::ShellCommandFailed
==> default:     ------------------------------------
==> default:     Expected process to exit with [0], but received '1'
==> default:     ---- Begin output of c:\buildinfo\service-api\api\approot\web-integration.cmd ----
==> default:     STDOUT: 
==> default:     STDERR: The system cannot find the path specified.
==> default:     ---- End output of c:\buildinfo\service-api\api\approot\web-integration.cmd ----
==> default:     Ran c:\buildinfo\service-api\api\approot\web-integration.cmd returned 1

1 ответ

Решение

Использование одинарных кавычек не допускает интерполяции. Использование двойных кавычек придаст обратному слешу особое значение, поэтому \b означает "возврат".

Вы можете пойти на компромисс с помощью % оператор для добавления контента printf-стиль:

command('c:\buildinfo\service-api\api\approot\web-%s.cmd' % node['default']['env'])
Другие вопросы по тегам