Ссылка на атрибут в строке пути 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'])