Bug #2552
closed
HOME 変数を空にして起動すると、再度空にできなくなる
Added by wanabe (_ wanabe) almost 15 years ago.
Updated over 13 years ago.
ruby -v:
ruby 1.9.2dev (2010-01-02 trunk 26229) [i386-mingw32]
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
=begin
・putenv()で設定したものは、getenv()でもGetEnvironmentVariable()でも取得できる
・SetEnvironmentVariable()で設定したものは、GetEnvironmentVariable()では取得できるがgetenv()では取得できない
ので、Windows版では必ずGetEnvironmentVariable()で取得するようにした方が良いのではないでしょうか。
putenv()は既にruby_setenv()に統一されているようなので、¶
getenv()もruby_getenv()を作って統一するとか。¶
=end
=begin
元々msvcrtのgetenvは使っていません。
win32/win32.cのrb_w32_getenvを参照してください。
ところで、元の話(HOMEを削除しても子プロセスでは復活している件)ですが、
不整合うんぬんじゃなくて、単にrubyがinit_env()でHOMEが空なら自力で
設定しているせいのような気がしますが、そういう話じゃないですか?
その挙動が是か非かという議論は歓迎です。¶
=end
=begin
HOMEを自力で設定していること自体は(少なくともチケット作成時は)
問題と思っていませんでした。
子プロセス起動時に "C:/" が設定されたあと、改めて ENV.delete "HOME" しているのに
これが無視されてしまうことを問題にしています。
蛇足ですが、delete の直前に ENV["HOME"]="foo" などとすると正常に delete されます。
=end
=begin
なるほど、現象を誤解していました。
というわけで対応してみました。汚いけど。
=end
- 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
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0Like0