Project

General

Profile

Bug #14162

Invoking binding.irb destructively shifts ARGV

Added by k0kubun (Takashi Kokubun) over 2 years ago. Updated over 2 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
ruby -v:
ruby 2.5.0dev (2017-12-05 trunk 61034) [x86_64-linux]
[ruby-core:84135]

Description

$ ruby -v
ruby 2.5.0dev (2017-12-05 trunk 61034) [x86_64-linux]
$ cat script.rb
binding.irb
binding.irb
$ ruby script.rb a b c

From: script.rb @ line 1 :

 => 1: binding.irb
    2: binding.irb

irb(main):001:0> p ARGV
["b", "c"]
=> ["b", "c"]
irb(main):002:0>

From: script.rb @ line 2 :

    1: binding.irb
 => 2: binding.irb

irb(main):001:0> p ARGV
["c"]
=> ["c"]

Is this intentional? This is reproductive on both Ruby 2.4 and 2.5.

Updated by k0kubun (Takashi Kokubun) over 2 years ago

Also, the shifted value becomes $0 (and @CONF[:SCRIPT]).

I guessed they are not intentional and created a patch that skips parsing ARGV for binding.irb https://github.com/ruby/ruby/pull/1770.

#2

Updated by k0kubun (Takashi Kokubun) over 2 years ago

  • Status changed from Open to Closed

Applied in changeset trunk|r61149.


irb.rb: preserve ARGV on binding.irb

This is not perfectly good solution (at least we don't want to have ARGV
as default value of argv argument), but unfortunately IRB.setup and
IRB.parse_opts are public methods and we can't make breaking change to
those methods.

We may deprecate using them and then make them private in the future,
but the removal should not be in Ruby 2.5. So I kept their interface for
now.

[Bug #14162] [close GH-1770]

Updated by nagachika (Tomoyuki Chikanaga) over 2 years ago

  • Backport changed from 2.3: DONTNEED, 2.4: REQUIRED to 2.3: DONTNEED, 2.4: DONE

ruby_2_4 r62185 merged revision(s) 61149,61150,61151,61167.

Also available in: Atom PDF