finchd
12/6/2019 - 8:19 AM

Redirect a bash script's output and error to syslog

Redirect a bash script's output and error to syslog

#!/usr/bin/env bash

# The pattern `exec > $X 2>&1` does two things: the last bit redirects standard 
# error to go to standard output, and the first bit sends standard output to the
# file $X. Here our $X is the process substitution `>( $process )` which takes  
# the standard input of $process and presents it as a file handle. Putting          
# these two together, we have both our standard out and our standard error         
# going to the standard input of $process. Our $process here first runs tee,       
# which sends its standard input to both standard out and to the file listed.   
# We then pipe our standard out into the logger command, which sends it to syslog.
# The use of /dev/console is left as an exercise to the reader

exec > >(tee /var/log/myscript.log|logger -t myscript -s 2>/dev/console) 2>&1


# The bulk of the script goes here