猿问

如何在使用管道时将stderr写入文件?

如何在使用管道时将stderr写入文件?

我知道怎么用tee要写入输出(STDOUT)aaa.shbbb.out,同时仍将其显示在终端中:

./aaa.sh | tee bbb.out

我现在该怎么写STDERR到一个名为ccc.out,当它还在展示的时候?


倚天杖
浏览 880回答 3
3回答

梵蒂冈之花

这可能对人们通过谷歌发现这一点很有用。只需取消您想要尝试的示例。当然,可以重命名输出文件。#!/bin/bashSTATUSFILE=x.outLOGFILE=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_aronkjegralhfaffls -l ${0}
随时随地看视频慕课网APP
我要回答