Search code examples
bashpipestderr

With bash, how can I pipe standard error into another process?


It's well known how to pipe the standard ouput of a process into another processes standard input:

proc1 | proc2

But what if I want to send the standard error of proc1 to proc2 and leave the standard output going to its current location? You would think bash would have a command along the lines of:

proc1 2| proc2

But, alas, no. Is there any way to do this?


Solution

  • There is also process substitution. Which makes a process substitute for a file.
    You can send stderr to a file as follows:

    process1 2> file
    

    But you can substitute a process for the file as follows:

    process1 2> >(process2)
    

    Here is a concrete example that sends stderr to both the screen and appends to a logfile

    sh myscript 2> >(tee -a errlog)