I\'ve created a console Ruby script that uses ARGF to load data from a file or stdin, that then calls Pry.
This works great when I pass a file in (Pry pauses) but fa
Try ARGF
with simple:
require 'rubygems'
require 'pry'
binding.pry
Now IO
operations are not covered internally by ARGF.read
and it became evident what’s wrong here. ARGF
is “glued” to STDIN
, therefore whatever is being passed to STDIN
goes directly to pry
’s input.
I do not know exactly, what instruction in your file.txt
forces pry to quit, but there is one.
UPDATE
It looks like if a Ruby script yields anything on stdin
(e. g. through a pipe,) both $stdin
and STDIN
are set to this pipe, messing up pry
’s “where am I run from” detection.
I came up with this not-so-elegant solution:
# read input from ARGF
text = ARGF.read
# prepare new stdin to satisfy pry
pry_fd_stdin = IO.sysopen("/dev/tty")
pry_stdin = IO.new(pry_fd_stdin, "r")
# load pry and cheat it with our stdio
require 'pry'
Pry.config.input = pry_stdin
binding.pry
This solution has some glitches (e.g. pry prompt is shown only after input).