Sponsored Content
Top Forums UNIX for Advanced & Expert Users How to set font color for STDIN,STDOUT and STDERR? Post 302542402 by Corona688 on Wednesday 27th of July 2011 12:27:16 PM
Old 07-27-2011
The terminal can't tell what's printing to standard output vs standard error -- they both go to literally the same file. You could intercept standard error with a fifo and process it...
Code:
#!/bin/bash

# On exit, close stderr and delete the fifo so we don't leave dangling background processes.
trap "exec 2<&- ; rm ~/.tmpfifo" EXIT

rm -f ~/.tmpfifo

mkfifo ~/.tmpfifo
# Create a subshell that reads from fifo, writes to stderr.
# it gets its own copy of stderr, so redirecting stderr later won't change this.
(       while read LINE
        do
                printf "\x1b[01;31m%s\x1b[01;m\n" "$LINE"
        done < ~/.tmpfifo ) &

exec 2>~/.tmpfifo

# Thing that should print standard error in red
touch /

Code:
$ ./errfilter.sh
touch: setting times of `/': Permission denied
$

This only works for scripts, not for interactive terminals, because bash frequently uses stderr for its own things when in interactive mode.

---------- Post updated at 10:27 AM ---------- Previous update was at 10:11 AM ----------

Actually, here's a way that'll work in interactive mode:

Code:
trap "exec 5>~/.tmpfifo-$$ ; rm -f ~/.tmpfifo-$$ ; exec 5<&-" EXIT

mkfifo ~/.tmpfifo-$$

(       while [ -e ~/.tmpfifo-$$ ]
        do
                while read LINE
                do
                        printf "\x1b[01;31m%s\x1b[01;m\n" "$LINE"
                done < ~/.tmpfifo-$$ >&2
        done
 ) &

function err
{
        "$@" 2>/.tmpfifo-$$
}

Do this in your shell:
Code:
$ source errfilter.sh
$ err touch /
touch: setting times of `/': Permission denied
$

and any commands you run with err will have stderr color-coded.
This User Gave Thanks to Corona688 For This Post:
 

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Redirect stdout and stderr

How can I redirect and append stdout and stderr to a file when using cron? Here is my crontab file: */5 * * * * /dir/php /dir/process_fns.php >>& /dir/dump.txt Cron gives me an 'unexpected character found in line' when trying to add my crontab file. Regards, Zach Curtis POPULUS (8 Replies)
Discussion started by: zcurtis
8 Replies

2. Shell Programming and Scripting

precedence of stderr and stdout

#!/usr/bin/perl open(STDOUT, ">>$Textfile") open(STDERR, ">>$Textfile") print "program running\n"; $final = join("+", $initial,$final) #5 close (STDOUT); close (STDERR);Hi all, above is my perl code. Notice i have captured the stdout and stderr to the same textfile. my code is expected to... (1 Reply)
Discussion started by: new2ss
1 Replies

3. Programming

stdout/stdin + flushing buffers

Hi all I've run into a snag in a program of mine where part of what I entered in at the start of run-time, instead of the current value within printf() is being printed out. After failing with fflush() and setbuf(), I tried the following approach void BufferFlusher() { int in=0;... (9 Replies)
Discussion started by: JamesGoh
9 Replies

4. Shell Programming and Scripting

How to use tee with stdout and stderr?

I have been doing this: make xyz &> xyz.log &; tail -f xyz.log The problem with this is that you never can ge sure when "make xyz" is done. How can I pipe both stderr and stdout into tee so both stderr and stdout are copied both to the display and to the log file? Thanks, Siegfried (3 Replies)
Discussion started by: siegfried
3 Replies

5. Shell Programming and Scripting

can't close stdin/stdout in shell

#!/bin/sh exec 0</dev/null exec 1>/dev/null ls -l /proc/self/fd >&2 produces total 0 lr-x------ 1 tyler users 64 Feb 18 10:38 0 -> /proc/7886/fd lrwx------ 1 tyler users 64 Feb 18 10:38 1 -> /dev/pts/4 lrwx------ 1 tyler users 64 Feb 18 10:38 2 -> /dev/pts/4 I've verified the shell is... (10 Replies)
Discussion started by: Corona688
10 Replies

6. Shell Programming and Scripting

stderr/stdout

Can somebody explain to me why the diff output is not going to stderr? Yet when I issue a diff from the command line the return code is -ne 1. I am guessing diff always writes to stdout??? Is there away I can force the difff to write to stderr USING THE CURRENT template. If possible, I... (5 Replies)
Discussion started by: BeefStu
5 Replies

7. UNIX for Dummies Questions & Answers

STDIN and STDOUT

Hallo, i have a script like: if ;then echo "OK" else echo "ERROR $2 is missing" fi; if ;then touch $2 fi; if ;then cat $1 | grep xy > $2 (1 Reply)
Discussion started by: eightball
1 Replies

8. Shell Programming and Scripting

stdout, stderr redirection

Hi all, can someone help me with the next redirection? i want to redirect the stdout+stderr of a command to the same file (this i can do by prog &> file) but in addition i want to redirect only the stderr to a different file. how can i do this please? (in BASH) thanks. (4 Replies)
Discussion started by: eee
4 Replies

9. Shell Programming and Scripting

Redirect string from bash stderr to user stdin

Hi there, I need to execute a command in the bash. The program prints some standard (output and) error and then wants the user to choose one of several options and type the according input. I am trying to solve this issue in a bash script but also running into some circular dependency. How can I... (7 Replies)
Discussion started by: fredestet
7 Replies
fifo(3tcl)																fifo(3tcl)

NAME
fifo - Create and manipulate u-turn fifo channels SYNOPSIS
package require Tcl package require memchan fifo DESCRIPTION
fifo creates a stream-oriented in-memory channel and returns its handle. There is no restriction on the ultimate size of the channel, it will always grow as much as is necessary to accommodate the data written into it. In contrast to the channels generated by memchan a channel created here effectively represents an U-turn. All data written into it can be read out, but only in the same order. This also means that a fifo channel is not seekable. The channels created here can be transferred between interpreters in the same thread and between threads, but only as a whole. It is not possible to use them to create a bi- or unidirectional connection between two interpreters. Memory channels created by fifo provide two read-only options which can be queried via the standard fconfigure command. These are -length The value of this option is the number of bytes currently stored in the queried memory channel. -allocated The value of this option is the number of bytes currently allocated by the queried memory channel. This number is at least as big as the value of -length. As the channels generated by fifo grow as necessary they are always writable. This means that a writable fileevent-handler will fire con- tinuously. The channels are also readable if they contain more than zero bytes. Under this conditions a readable fileevent-handler will fire continu- ously. NOTES
One possible application of memory channels created by memchan or fifo is as temporary storage device to collect data coming in over a pipe or a socket. If part of the processing of the incoming data is to read and process header bytes or similar fifo are easier to use as they do not require seeking back and forth to switch between the assimilation of headers at the beginning and writing new data at the end. SEE ALSO
fifo2, memchan, null KEYWORDS
channel, fifo, i/o, in-memory channel, memchan, stream COPYRIGHT
Copyright (c) 1996-2003 Andreas Kupries <andreas_kupries@users.sourceforge.net> Memory channels 2.1 fifo(3tcl)
All times are GMT -4. The time now is 03:15 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy