From: Robert Klemme Date: 2006-05-19T00:05:30+09:00 Subject: Re: Command Line Processing / Pipes 2006/5/18, Stuart Holden : > Hi, > > I'm trying to create a script that that is flexible enough to accept > input that is read from a file whose filename is passed as a command > line argument, or from STDIN via a pipe. > (This is on a WinXP platform rather than Unix) > > By way of a simple example, I want both of the following to produce the > same results: > > 1: myScript.rb *.txt > 2: cat *.txt | myScript.rb > > I have had some joy with the first approach... > > while line = ARGF.gets > #-- Do the interesting stuff here... or just > print the line. > print line > end > > However, I cannot get anything to work for the pipe approach. I thought > that this would handle piped along STDIN > > while gets() > line = $_ > print line > end > > but it chucks the following error: > > U:\dev\WM&CAPS\capsfiles>cat testfile.caps | caps.rb > c:/scripts/caps.rb:1:in `gets': Bad file descriptor > (Errno::EBADF) > from c:/scripts/caps.rb:1 Works for me: 17:02:50 [~]: ruby -e 'while l=gets; p l; end' x "foo\n" 17:03:07 [~]: cat x | ruby -e 'while l=gets; p l; end' "foo\n" 17:03:12 [~]: uname -a CYGWIN_NT-5.2-WOW64 PDBXPWSRK38 1.5.19(0.150/4/2) 2006-01-20 13:28 i686 Cygwin 17:03:16 [~]: ruby -v ruby 1.8.4 (2005-12-24) [i386-cygwin] I guess, you use the windows installer. I prefer the cygwin version as it has better unix like behavior. Maybe that's an option for you too. Kind regards robert -- Have a look: http://www.flickr.com/photos/fussel-foto/