Skip to content

Instantly share code, notes, and snippets.

@kyanny
Last active May 2, 2024 15:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kyanny/227a6a5e54abf3a0db95b6160260dd5e to your computer and use it in GitHub Desktop.
Save kyanny/227a6a5e54abf3a0db95b6160260dd5e to your computer and use it in GitHub Desktop.
Prevent "`winsize': Inappropriate ioctl for device (Errno::ENOTTY)" error with irb bundled with ruby 3.1.2 https://github.com/ruby/irb/pull/353
❯ ruby -v
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin21]
❯ irb -v
irb 1.4.1 (2021-12-25)
❯ echo n=1 | irb | cat
Switch to inspect mode.
n=1
/Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb/input-method.rb:43:in `winsize': Inappropriate ioctl for device (Errno::ENOTTY)
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb/input-method.rb:43:in `winsize'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb.rb:819:in `output_value'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb.rb:582:in `block (2 levels) in eval_input'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb.rb:770:in `signal_status'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb.rb:558:in `block in eval_input'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb/ruby-lex.rb:268:in `block (2 levels) in each_top_level_statement'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb/ruby-lex.rb:250:in `loop'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb/ruby-lex.rb:250:in `block in each_top_level_statement'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb/ruby-lex.rb:249:in `catch'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb/ruby-lex.rb:249:in `each_top_level_statement'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb.rb:557:in `eval_input'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb.rb:491:in `block in run'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb.rb:490:in `catch'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb.rb:490:in `run'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb.rb:419:in `start'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/irb-1.4.1/exe/irb:11:in `<top (required)>'
from /Users/kyanny/.rbenv/versions/3.1.2/bin/irb:25:in `load'
from /Users/kyanny/.rbenv/versions/3.1.2/bin/irb:25:in `<main>'
Maybe IRB bug!
❯ echo n=1 | irb --echo-on-assignment | cat
Switch to inspect mode.
n=1
1
❯ echo 'IRB.conf[:ECHO_ON_ASSIGNMENT]=true; n=1' | irb | cat
Switch to inspect mode.
IRB.conf[:ECHO_ON_ASSIGNMENT]=true; n=1
/Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb/input-method.rb:43:in `winsize': Inappropriate ioctl for device (Errno::ENOTTY)
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb/input-method.rb:43:in `winsize'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb.rb:819:in `output_value'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb.rb:582:in `block (2 levels) in eval_input'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb.rb:770:in `signal_status'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb.rb:558:in `block in eval_input'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb/ruby-lex.rb:268:in `block (2 levels) in each_top_level_statement'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb/ruby-lex.rb:250:in `loop'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb/ruby-lex.rb:250:in `block in each_top_level_statement'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb/ruby-lex.rb:249:in `catch'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb/ruby-lex.rb:249:in `each_top_level_statement'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb.rb:557:in `eval_input'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb.rb:491:in `block in run'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb.rb:490:in `catch'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb.rb:490:in `run'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/3.1.0/irb.rb:419:in `start'
from /Users/kyanny/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/irb-1.4.1/exe/irb:11:in `<top (required)>'
from /Users/kyanny/.rbenv/versions/3.1.2/bin/irb:25:in `load'
from /Users/kyanny/.rbenv/versions/3.1.2/bin/irb:25:in `<main>'
Maybe IRB bug!
❯ echo 'irb_context.echo_on_assignment=true; n=1' | irb | cat
Switch to inspect mode.
irb_context.echo_on_assignment=true; n=1
1
❯ echo 'IRB.CurrentContext.echo_on_assignment=true; n=1' | irb | cat
Switch to inspect mode.
IRB.CurrentContext.echo_on_assignment=true; n=1
1
@kyanny
Copy link
Author

kyanny commented Aug 12, 2022

See also ruby/irb@5af637b for about IRB.conf[:ECHO_ON_ASSIGNMENT], irb_context.echo_on_assignment, and IRB.CurrentContext.echo_on_assignment.

@MrEcco
Copy link

MrEcco commented May 2, 2024

You saved me tens of hours of development. Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment