From: OKADOME Junichi Date: 2004-08-20T20:00:21+09:00 Subject: [ruby-dev:24143] ヒアドキュメント形式の外部コマンド実行時の不具合(mswin版)? まつもとさん、みなさん、はじめまして。 とめ と申します。つい最近始めたRuby初心者です。 早速ではありますが、不具合らしき現象を発見しましたので 報告いたします。バージョンは ruby 1.8.1 (2003-12-25) [i386-mswin32] です。 ■現象 ヒアドキュメント形式で外部コマンド(<-なんといえばよいのでしょうか) を実行すると、プログラムが見つからないといわれて実行に失敗します。 コマンド出力 `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と行末の改行をけずってやる 必要があると思われます。 いかがでしょうか。 #過去ログの検索はしてみたつもりですが、既出でしたらすみません。 日立造船情報システム(株)システム開発部 基本システムグループ 岡留 淳一(Junichi OKADOME)