Bug #2552
closedHOME 変数を空にして起動すると、再度空にできなくなる
Description
=begin
WindowsXP にて、環境変数 HOME が設定されていない状態でインタプリタを起動すると
ENV.delete "HOME" が無効になります。
$ cat test.rb
ENV.delete "HOME"
if ARGV[0]
p ENV["HOME"]
else
system("ruby -v #{$0} child")
end
$ ruby test.rb
ruby 1.9.2dev (2010-01-02 trunk 26229) [i386-mingw32]
"C:/"
init_env() 中の SetEnvironmentVariableW() と ruby_setenv() 中の putenv() で
不整合が起きているようです。
=end
Updated by pegacorn (pegacorn jp) almost 15 years ago
Updated by usa (Usaku NAKAMURA) almost 15 years ago
=begin
元々msvcrtのgetenvは使っていません。
win32/win32.cのrb_w32_getenvを参照してください。
ところで、元の話(HOMEを削除しても子プロセスでは復活している件)ですが、
不整合うんぬんじゃなくて、単にrubyがinit_env()でHOMEが空なら自力で
設定しているせいのような気がしますが、そういう話じゃないですか?
その挙動が是か非かという議論は歓迎です。¶
=end
Updated by wanabe (_ wanabe) almost 15 years ago
=begin
HOMEを自力で設定していること自体は(少なくともチケット作成時は)
問題と思っていませんでした。
子プロセス起動時に "C:/" が設定されたあと、改めて ENV.delete "HOME" しているのに
これが無視されてしまうことを問題にしています。
蛇足ですが、delete の直前に ENV["HOME"]="foo" などとすると正常に delete されます。
=end
Updated by usa (Usaku NAKAMURA) almost 15 years ago
=begin
なるほど、現象を誤解していました。
というわけで対応してみました。汚いけど。
=end
Updated by usa (Usaku NAKAMURA) almost 15 years ago
- Status changed from Open to Closed
- % Done changed from 0 to 100
=begin
This issue was solved with changeset r26296.
_, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
=end