How do I write stderr to a file while using “tee” with a pipe?

前端 未结 10 951
独厮守ぢ
独厮守ぢ 2020-11-22 08:01

I know how to use tee to write the output (STDOUT) of aaa.sh to bbb.out, while still displaying it in the terminal:

10条回答
  •  抹茶落季
    2020-11-22 08:50

    This may be useful for people finding this via google. Simply uncomment the example you want to try out. Of course, feel free to rename the output files.

    #!/bin/bash
    
    STATUSFILE=x.out
    LOGFILE=x.log
    
    ### All output to screen
    ### Do nothing, this is the default
    
    
    ### All Output to one file, nothing to the screen
    #exec > ${LOGFILE} 2>&1
    
    
    ### All output to one file and all output to the screen
    #exec > >(tee ${LOGFILE}) 2>&1
    
    
    ### All output to one file, STDOUT to the screen
    #exec > >(tee -a ${LOGFILE}) 2> >(tee -a ${LOGFILE} >/dev/null)
    
    
    ### All output to one file, STDERR to the screen
    ### Note you need both of these lines for this to work
    #exec 3>&1
    #exec > >(tee -a ${LOGFILE} >/dev/null) 2> >(tee -a ${LOGFILE} >&3)
    
    
    ### STDOUT to STATUSFILE, stderr to LOGFILE, nothing to the screen
    #exec > ${STATUSFILE} 2>${LOGFILE}
    
    
    ### STDOUT to STATUSFILE, stderr to LOGFILE and all output to the screen
    #exec > >(tee ${STATUSFILE}) 2> >(tee ${LOGFILE} >&2)
    
    
    ### STDOUT to STATUSFILE and screen, STDERR to LOGFILE
    #exec > >(tee ${STATUSFILE}) 2>${LOGFILE}
    
    
    ### STDOUT to STATUSFILE, STDERR to LOGFILE and screen
    #exec > ${STATUSFILE} 2> >(tee ${LOGFILE} >&2)
    
    
    echo "This is a test"
    ls -l sdgshgswogswghthb_this_file_will_not_exist_so_we_get_output_to_stderr_aronkjegralhfaff
    ls -l ${0}
    

提交回复
热议问题