2013-07-23 4 views
1

Рассмотрим следующий код RubyИзменение переменной среды значение во время выполнения

sleep 10 
puts "Foo is #{ENV['foo']}" 

Сохранение этого файла в envtest.rb

Запуск этого из оболочки:

export foo=bar 
ruby envtest.rb & 
export foo=baz 
(... 10 seconds later ...) 
=> Foo is bar 

Оказывается, что в окружающую среду оценивается при запуске рубинового интерпретатора. Возможно ли обновить переменные среды во время выполнения и отразить ли эти изменения в запущенных процессах? Если да, то как?

+0

Связанный и, возможно, дубликат того или иного объекта: http://stackoverflow.com/q/2967762 http://stackoverflow.com/q/205064 http://stackoverflow.com/q/9360679 http: // stackoverflow.com/q/6094805 http://stackoverflow.com/q/263005 – tchrist

ответ

3

Вы можете изменить значение во время выполнения - внутри сценария рубина - с помощью:

ENV['VARIABLE_NAME'] = 'value' 

Там нет возможности изменять значение среды из вне процесса после того, как он был запущен. Это по дизайну, так как среда будет передана при запуске процесса.

1

№ Это невозможно. Один процесс никогда не может напрямую манипулировать средой другого уже запущенного процесса. Все, что вы можете сделать, это установить среду на неродившихся детей, а затем создать их.

Единственный другой подход - это активная, согласованная связь с родителем. Поэтому вывод от tset (1) (то есть от tset -s) всегда оценивается родителем.

Смежные вопросы