Project

General

Profile

Actions

Bug #2552

closed

HOME 変数を空にして起動すると、再度空にできなくなる

Added by wanabe (_ wanabe) over 14 years ago. Updated almost 13 years ago.

Status:
Closed
Target version:
ruby -v:
ruby 1.9.2dev (2010-01-02 trunk 26229) [i386-mingw32]
Backport:

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

Actions #1

Updated by pegacorn (pegacorn jp) over 14 years ago

=begin
・putenv()で設定したものは、getenv()でもGetEnvironmentVariable()でも取得できる
・SetEnvironmentVariable()で設定したものは、GetEnvironmentVariable()では取得できるがgetenv()では取得できない

ので、Windows版では必ずGetEnvironmentVariable()で取得するようにした方が良いのではないでしょうか。

putenv()は既にruby_setenv()に統一されているようなので、

getenv()もruby_getenv()を作って統一するとか。

=end

Actions #2

Updated by usa (Usaku NAKAMURA) over 14 years ago

=begin
元々msvcrtのgetenvは使っていません。
win32/win32.cのrb_w32_getenvを参照してください。

ところで、元の話(HOMEを削除しても子プロセスでは復活している件)ですが、
不整合うんぬんじゃなくて、単にrubyがinit_env()でHOMEが空なら自力で
設定しているせいのような気がしますが、そういう話じゃないですか?

その挙動が是か非かという議論は歓迎です。

=end

Actions #3

Updated by wanabe (_ wanabe) over 14 years ago

=begin
HOMEを自力で設定していること自体は(少なくともチケット作成時は)
問題と思っていませんでした。
子プロセス起動時に "C:/" が設定されたあと、改めて ENV.delete "HOME" しているのに
これが無視されてしまうことを問題にしています。

蛇足ですが、delete の直前に ENV["HOME"]="foo" などとすると正常に delete されます。
=end

Actions #4

Updated by usa (Usaku NAKAMURA) over 14 years ago

=begin
なるほど、現象を誤解していました。
というわけで対応してみました。汚いけど。
=end

Actions #5

Updated by usa (Usaku NAKAMURA) over 14 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

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0