From: "Rebhan, Gilbert" Date: 2007-03-05T23:08:11+09:00 Subject: [Solved]RE: IO.popen puts Hi, -----Original Message----- From: Jan Svitok [mailto:jan.svitok@gmail.com] Sent: Monday, March 05, 2007 12:48 PM To: ruby-talk ML Subject: Re: IO.popen puts On 3/5/07, Rebhan, Gilbert wrote: > > Hi, > > i want to do a cvs login for a list of cvsrepositories > with IO.popen > > the normal login via Windows shell looks like = > > Y:\>cvs -d :pserver:username@cvshost:d:/cvsrepos/test login > Logging in to :pserver:username@cvshost:2401:d:/cvsrepos/test > CVS password: ******** > > > i tried with = > > cvsrepos=%w[test,test1,test2] > cvsrepos.each {|x| > IO.popen("#{CVSEXE} -d #{CVSROOT}/#{x} login", 'r+') do |pipe| > pipe << "password" > pipe.close_write > puts pipe.read > end > } > > but the script hangs with the output > CVS password: > > What went wrong ? /* just a guess: 1. try adding newline 2. try redirecting stdin on the command line without ruby (maybe cvs reads the keyboard directly) */ Found a working solution that is much simpler = cvsrepos=%w[...] cvspass=gets.chomp cvsrepos.each {|x| puts "Login CVS Repository >> #{x} ..." IO.popen("#{CVSEXE} -d :pserver:#{ENV["USERNAME"]}:#{cvspass}@cvshost:d:/cvsrepos/#{x} login") } the CVSROOT string takes a password too Regards, Gilbert