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