Advertisement
kipkoan

Multiple Pipes

Feb 19th, 2012
243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.21 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. PROGNAME=$(basename $(readlink -f $0))
  4. LOG="$PROGNAME.log"
  5. PIPE_LOG="$PROGNAME-$$-log"
  6. PIPE_ECHO="$PROGNAME-$$-echo"
  7.                                                                                                                      
  8. # program output to log file and optionally echo to screen (if $1 is "-e")
  9. log () {
  10.   if [ "$1" = '-e' ]; then
  11.     shift
  12.     $@ > $PIPE_ECHO 2>&1
  13.   else
  14.     $@ > $PIPE_LOG 2>&1
  15.   fi
  16. }
  17.  
  18. # create named pipes if not exist
  19. if [[ ! -p $PIPE_LOG ]]; then
  20.   mkfifo -m 600 $PIPE_LOG
  21. fi
  22. if [[ ! -p $PIPE_ECHO ]]; then
  23.   mkfifo -m 600 $PIPE_ECHO
  24. fi
  25.  
  26. # cat pipe data to log file
  27. while read data; do
  28.   echo -e "$PROGNAME: $data" >> $LOG
  29. done < $PIPE_LOG &
  30.  
  31. # cat pipe data to log file & echo output to screen
  32. while read data; do
  33.   echo -e "$PROGNAME: $data"
  34.   log echo $data   # this doesn't work
  35.   echo -e $data > $PIPE_LOG 2>&1   # and neither does this
  36.   echo -e "$PROGNAME: $data" >> $LOG   # so I have to do this
  37. done < $PIPE_ECHO &
  38.  
  39. # clean up temp files & pipes
  40. clean_up () {
  41.   # remove named pipes
  42.   rm -f $PIPE_LOG
  43.   rm -f $PIPE_ECHO
  44. }
  45. #execute "clean_up" on exit
  46. trap "clean_up" EXIT
  47.  
  48. log echo "Log File Only"
  49. log -e echo "Echo & Log File"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement