मैंने अभी यह कोशिश की और यह अच्छा लग रहा है।
cmd = "echo \"FOO is \\\"$FOO\\\"\"";
system(cmd);
# Run some Ruby code (same program) in the child process
fork do
puts "In child process. parent pid is #$$"
ENV['FOO']='foo in sub process';
system(cmd);
exit 99
end
child_pid = Process.wait
puts "Child (pid #{child_pid}) terminated with status #{$?.exitstatus}"
system(cmd);
यह अच्छी तरह से काम करने लगता है - कम से कम MacOSX पर
मैं
FOO is ""
In child process. parent pid is 1388
FOO is "foo in sub process"
Child (pid 1388) terminated with status 99
FOO is ""
अच्छा लगता है में यह पहली स्थिति पुनर्स्थापित करता है स्वचालित रूप से
ठीक है - अब के रूप में एक अलग से एक करने की कोशिश की यह 2 subprocesses
Use Process.spawn(env,command)
pid = Process.spawn({ 'FOO'=>'foo in spawned process'}, cmd);
pid = Process.wait();
नहीं है 210
यह सी सिस्टम कॉल की तरह कार्य करता है और आपको पाइप और अन्य सभी सामान भी निर्दिष्ट करने की अनुमति देता है।
मैंने देखा [एक समान प्रश्न] (http://stackoverflow.com/questions/190168/persisting-an-environment-variable-through-ruby) लेकिन मैं मैं संतुष्ट नहीं हूँ मंच-विशिष्ट उत्तर के साथ एड। – wilhelmtell