[#24112] ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。原因を追求してたのですが、力尽きました。

19 messages 2004/08/18
[#24127] Re: ruby/tk crashes on bcc32 — Hidetoshi NAGAI <nagai@...> 2004/08/19

永井@知能.九工大です.

[#24131] Re: ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/08/19

山本です。

[#24135] Re: ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/08/19

山本です。試行錯誤の結果、これで落ちなくなりました。

[ruby-dev:24144] Re: ヒアドキュメント形式の外部コマンド実行時の不具合(mswin版)?

From: "Kenichi.Tamura" <sgs02516@...>
Date: 2004-08-20 13:29:58 UTC
List: ruby-dev #24144
たむらです。

ご自分でも書かれている通り、ヒアドキュメントの内容が、"ls.exe\n" である
以上、当然の結果だと思います。

C:\Documents and Settings\kenchi>type con >bar.rb
bar =<<EOM
ls.exe
EOM

p bar
^C

C:\Documents and Settings\kenchi>ruby bar.rb
"ls.exe\n"

ヒアドキュメントを利用する必要性を考えるべきだと思うのですが。

OKADOME Junichi wrote:

> ■現象
> ヒアドキュメント形式で外部コマンド(<-なんといえばよいのでしょうか)
> を実行すると、プログラムが見つからないといわれて実行に失敗します。
> コマンド出力 `command` 形式ではOKです。
> 
> ■エラーメッセージの例
> debug.rb:14:in ``': No such file or directory - ls.exe (Errno::ENOENT)
> 
> ■プログラムの例
> #bad
> p <<`EOC`
> ls.exe
> EOC
> #good
> p `ls.exe`
> 
> ■デバッグ
> 少しだけ、コードを追いかけてみました。
> win32/win32.c の CreateChild の中で、CreateProcess が呼ばれていますが、
> これに引き渡される cmd は 'ls.exe\n' となっています。
> つまり、行末の'\n'がchompされないままなので、失敗しています。
> 同じように、以下のようなRubyプログラムの場合
> 
> #bad2 (indented)
>   p <<-`EOC`
>   ls.exe
>   EOC
> 
> やはり、先行するwhitespaceまで含めて引き渡されるので、
> そのようなファイルは無いということになってしまいます。
> 
> ■対応案
> 遅くとも win32/win32.c の CreateChildの中で、isInternalCmd() で、
> cmd文字列中にパイプやリダイレクトも含まれず、内部コマンドでない
> と判断されたあとで、先行するwhitespaceと行末の改行をけずってやる
> 必要があると思われます。


In This Thread