From: Wybo Dekker Date: 2005-06-16T19:37:45+09:00 Subject: stubborn program using readline Hi, I've been on the list a few days ago with a readline-problem, for which there doesn't seem to be a quick fix. I'm now trying a dirty fix... but this seems to be a very stubborn problem. Here is my original test program # rltest - test for readline # run me like this: (i.e. operating on a file) # # ruby rltest rltest # # and all is fine. But run me like so: (i.e. operating on stdin) # # ruby rltest < rltest # # and see that I successfully count my own lines, # then also print the "type return to quit" prompt, # but finally seem to be looping in the readline function, and # can only be stopped with ctrl-C, # ( not even with ctrl-D - I'm not looking at the terminal) require 'readline' include Readline # count lines in stdin (the mail message): n=0; while gets: n+=1 end puts "#{n} lines" readline("type return to quit: ") puts "quitting..." I tried to get around this problem by testing if input is from stdin, and if so, making a temporary copy of stdin and re-running the program on that copied file: file = ARGV.shift || '' if file == '' require 'tempfile' f = Tempfile.new('vpp') name = f.path puts "Making temporary file: #{name}" n = 0 while gets f.puts n += 1 end f.close puts "Wrote #{n} lines" system($0, name) else require 'readline' include Readline puts "reading #{file}" # count lines in stdin (the mail message): n = 0 open(file).each do n+=1 end puts "Saw #{n} lines" readline("type return to quit: ") puts "quitting..." end Running this with: ruby rltest rltest says: reading rltest Saw 30 lines type return to quit: quitting... But to my astonishment, running with: ruby rltest < rltest stays in a loop, like the original test program: Making temporary file: /data/tmp/vpp19009.0 Wrote 30 lines reading /data/tmp/vpp19009.0 Saw 30 lines type return to quit: ./rltest:28:in `readline': Interrupt from ./rltest:28 Can anybody explain this? -- Wybo