[mdlug] [HOWTO request] filter stderrr without altering stdout
    Robert Meier 
    eaglecoach at wwnet.com
       
    Wed Apr 11 07:43:42 EDT 2007
    
    
  
Carl
Thank you for your response.
>> How can I write a wrapper that filters stderr (fd 2) without altering
>> stdout (fd 1) using ksh?
> I'm not sure I understand what you're trying to do.  It sounds
> like you want a script that will call a function.  And I'm guessing
> that you don't want to see any errors from the function, but not
> filter errors from the script.
Actually I do want to see errors from the function, except for
a few known errors that have been handled by the script.
Detail:
   # I have an interactive function, part of a large package.
   # It reports to both stdout and stderr
   # Unfortunately, it also reports a warning to stderr even though
   #   the warning has been successfully dealt with.
   ksh> echo help | func 1>stdout 2>stderr
   ksh> cat stdout
   This is a nice function that does something interactively.
   ksh> cat stderr
   Warning: Unable to find my config file in /etc/func
   Found the config file in /opt/etc/func
   usage: func ...
   # I don't wish to alter stdout at all, so the user can continue
   #   normal use.
   # I do want to remove the warning successfully dealt with lest the
   #   the user ignore all errors and warnings.
   # I do want the remaining warnings and errors to be seen, so the
   #   user can take corrective action.
   ksh> echo help | func-wrapper 1>wrapped-stdout 2>wrapped-stderr
   ksh> cat wrapped-stdout
   This is a nice function that does something interactively.
   ksh> cat wrapped-stderr
   usage: func ...
   # The necessary feature is that only a few well-defined warnings
   # be removed from stderr, while all of stdout and the remainder of
   # stderr are passed unaltered.
   ksh> diff stdout wrapped-stdout
   #    no difference
   ksh> diff stderr wrapped-stderr
   < Warning: Unable to find my config file in /etc/func
   < Found the config file in /opt/etc/func
   
   ksh> cat func-wrapper
   #!/bin/sh
   ????
   func $*
   ????
For instance, is there a redirection usage that can carry interactive stdout
past grep, and apply grep to stderr only?
THE FOLLOWING DOES NOT WORK AS WRITTEN:
   ksh> cat func-wrapper
   #!/bin/sh
   func $* 1>3 2>1 |
     grep -v 'Warning: Unable to find my config file in /etc/func' |
     grep -v 'Found the config file in /opt/etc/func' |
     cat 1>2 3>1
THE ABOVE DOES NOT WORK AS WRITTEN
TIA,
-- 
Dr. Robert J. Meier
    
    
More information about the mdlug
mailing list