On Fri, 25 Aug 2006 12:27:35 -0700, bradjpeek wrote: > Inside a ruby script I want to: > > 1) redirect STDERR to /dev/null > 2) Issue a system call (e.g. system(tar xf tarfile file) ) > 3) revert to normal STDERR output > > I have a script that issues 3-4 system calls that are returning the > following message to STDERR: > > warning: Insecure world writable dir /opt, mode 040777 > > I'd like to suppress these messages (Let's assume that I can't change > the permissions on /opt). > > An example of one of the lines that is throwing the error is: > > x = `tar tf mytar.tar` # envoke the unix tar command > print x > > I can suppress the messages by: > > $stderr.reopen('/dev/null', 'w') # send STDERR to /dev/null > STDERR.puts "can you see me?" # message is suppressed > > But I haven't been able to figure out how to revert STDERR back to > before the the reopen. I only want to suppress this particular > message, but not others that may prove to be useful such as error > messages from the ruby interpreter. > > I've tried variations of: > > stderr = $stderr # save current STDERR IO instance > $stderr.reopen('/dev/null', 'w') # send STDERR to /dev/null > STDERR.puts "can you see me?" # message is suppressed > $stderr.reopen(stderr) # revert to default behavior (doesn't > work) > STDERR.puts "what about me? # I want to see this but I don't > > Any suggestions? Tar is being run in a shell, so you could run: system("tar xf mytar.tar 2>/dev/null") You could also use the open3 library (from the standard library) documented on p708 of Pickaxe or at http://www.ruby-doc.org/stdlib/libdoc/open3/rdoc/index.html --Ken -- Ken Bloom. PhD candidate. Linguistic Cognition Laboratory. Department of Computer Science. Illinois Institute of Technology. http://www.iit.edu/~kbloom1/