2016-08-13 1 views
2

Мне нужно установить некоторые переменные среды перед выполнением команды на машине Windows, вызывающей ее внутри скрипта ruby. В Linux, вы можете сделатьСистемный вызов Ruby с переменными окружения в окнах

cmd = 'echo $FOO' 
system({'FOO' => '123'}, cmd) 

OUTPUT is "123" 

Но на окнах это не работает, выход $ FOO

Как я могу установить переменные окружения на окнах рубина системных вызовов. Я несколько вариантов ENV и получил ошибки или все еще не работает.

system({$ENV[:VAR1] => "WIN7"}, 'echo $ENV[:VAR1]') 
+0

Что такая команда, которую вы пытаетесь выдать вашу оболочку? –

+0

Я пытаюсь получить доступ к переменным окружения, как указано в примере, который я использую в Windows $ ENV [: var], но доступ к этой переменной окружения не работает. – ibaralf

ответ

3

Руби system() вызывает то, что по умолчанию оболочка хоста является, так вы должны говорить на языке этой оболочки в.

Стандартная оболочка в Windows - cmd.exe, где для переменной окружения FOO необходимо указать %FOO%.

Таким образом, ваш код должен быть:

cmd = 'echo %FOO%' 
system({'FOO' => '123'}, cmd) 
+0

Привет mkelement, с обычными переменными, да, он работает нормально, но то, что я пытался сделать, это использовать переменные окружения (ENV). Имеет ли это смысл? Извините, если я был не очень ясен. – ibaralf

+0

@ibaralf: В 'cmd.exe', _all_ переменные являются переменными _environment_, поэтому'% FOO% 'действительно ссылается на переменную окружения' FOO'. – mklement0