From: dogatana@... Date: 2016-09-11T09:49:45+00:00 Subject: [ruby-dev:49791] [Ruby trunk Bug#12748] irb の評価結果が2回表示されます Issue #12748 has been updated by Toshihiko Ichida. io.c の io_fwrite() に問題があるようです。 この関数内で #ifdef _WIN32 内の、rb_w32_write_console() と、その下の io_binwrite() の両方が呼び出されるために、2回出力されています。 リダイレクトすると片方だけになります。 ~~~ > ruby -e 'p 1' # io_fwrite: rb_w32 handle: 14c dwMode: 7 1# io_fwrite: io_binwrite # io_fwrite: rb_w32 handle: 14c dwMode: 7 # io_fwrite: io_binwrite 1 > ruby -e 'p 1' > dump.txt # io_fwrite: io_binwrite # io_fwrite: io_binwrite ~~~ 同様の記述が rb_write_error_str() にもあり、こちらも確認が必要かもしれません。 rb_w32_write_console() と コンソール出力かどうかの判定方法が異なるのが気になります。 win32.c の rb_w32_write_console() を眺めたところ、ENABLE_VIRTUAL_TERMINAL_PROCESSING を判定しているので、色出力を対応するための処理のようですね。 2.4 からの追加でしょうか。 ---------------------------------------- Bug #12748: irb の評価結果が2回表示されます https://bugs.ruby-lang.org/issues/12748#change-60470 * Author: Toshihiko Ichida * Status: Feedback * Priority: Normal * Assignee: * ruby -v: ruby 2.4.0preview2 (2016-09-09 trunk 56129) [i386-mswin32_140] * Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN ---------------------------------------- irbを実行すると次のように評価結果が2回表示されます。 副作用のある呼び出しをしても副作用そのものは1回だけ実行されているので、表示上だけの問題でないかと思います。 作成: Visual Studio 2015 Community 実行: Windows 10 Pro 64bit ~~~ *****@*****-PC C:\usr\local\bin > irb irb(main):001:0> irb(main):001:0> 1 => 1 => 1 irb(main):002:0> irb(main):002:0> 1 + 2 => 3 => 3 irb(main):003:0> irb(main):003:0> "ruby" => "ruby" => "ruby" irb(main):004:0> irb(main):004:0> exit ~~~ -- https://bugs.ruby-lang.org/