我想将流程的标准输出和标准错误重定向到单个文件。我在巴什怎么做?
当前回答
在考虑使用exec2>&1之类的情况下,如果可能的话,我发现使用如下Bash函数重写代码更容易阅读:
function myfunc(){
[...]
}
myfunc &>mylog.log
其他回答
奇怪的是,这是有效的:
yourcommand &> filename
但这会产生语法错误:
yourcommand &>> filename
syntax error near unexpected token `>'
您必须使用:
yourcommand 1>> filename 2>&1
在考虑使用exec2>&1之类的情况下,如果可能的话,我发现使用如下Bash函数重写代码更容易阅读:
function myfunc(){
[...]
}
myfunc &>mylog.log
我想要一个解决方案,将stdout和stderr的输出写入日志文件,并且stderr仍在控制台上。所以我需要通过tee复制stderr输出。
这是我找到的解决方案:
command 3>&1 1>&2 2>&3 1>>logfile | tee -a logfile
第一次交换stderr和stdout然后将stdout附加到日志文件将stderr管道到tee,并将其附加到日志文件中
bash your_script.sh 1>file.log 2>&1
1> log指示shell将标准输出发送到file.log文件,2>&1告诉它将标准错误(文件描述符2)重定向到标准输出(文件描述符1)。
注意:正如liw.fi指出的那样,顺序很重要,2>&11>file.log不起作用。
对于tcsh,我必须使用以下命令:
command >& file
如果使用命令&>文件,它将给出“无效空命令”错误。