In some circumstances ncurses will emit messages on STDERR when calling clear. 
The below patch will ensure the “cls” does not add to the screen output.

clear.c: 
        setupterm(term, fd, (int *) 0);
lib_setup.c:
        setupterm(const char *tname, int Filedes, int *errret)
        ...
            return _nc_setupterm(tname, Filedes, errret, FALSE);
        _nc_setupterm(const char *tname, int Filedes, int *errret, int reuse)
        ...
            if (TINFO_SETUP_TERM(&termp, tname, Filedes, errret, reuse) == OK) {
        TINFO_SETUP_TERM(TERMINAL **tp, const char *tname, int Filedes, int 
*errret, int reuse)
           ret_error0(TGETENT_ERR, "Invalid parameter, internal error.\n");
curses.priv.h:
        #define ret_error0(code, msg)           if (errret) {\
                                                    *errret = code;\
                                                    returnCode(SETUP_FAIL);\
                                                } else {\
                                                    fprintf(stderr, msg);\
                                                    ExitTerminfo(EXIT_FAILURE);\
                                                }

Patch, redirects stderr to dev null

diff --git a/postfix/auxiliary/qshape/qshape.pl 
b/postfix/auxiliary/qshape/qshape.pl
index 2ad88e17..0cd9d847 100755
--- a/postfix/auxiliary/qshape/qshape.pl
+++ b/postfix/auxiliary/qshape/qshape.pl
@@ -186,7 +186,7 @@ $minsub = $opts{"m"} if (exists $opts{"m"} && $opts{"m"} > 
0);
 if ( -t STDOUT ) {
     $batch_msg_count = 1000 unless defined($batch_msg_count = $opts{"N"});
     $batch_top_domains = 20 unless defined ($batch_top_domains = $opts{"n"});
-    $cls = `clear`;
+    $cls = `clear 2>/dev/null`;
 } else {
     $batch_msg_count = 0;
     $batch_top_domains = 0;

-Jason

Reply via email to