knowledge-base

我的知识库 / Linux / tee 保存 stderr 到文件

tee 保存 stderr 到文件

tee命令是将 stdout 写入到某文件当中,但是如何将 stderr 也写入到文件当中?

示例如下:

1.sh

echo exec 1.sh start! && \
cat hello.txt && \
echo exec 1.sh end!

假如 hello.txt 文件不存在,执行 1.sh 文件中的 cat 命令将报错。如果我们想将执行 1.sh 文件的输出写入到一个 log 文件,例如:

sh 1.sh | tee 1.log

执行以上命令,控制台的输出是:

$ sh 1.sh | tee 1.log
exec 1.sh start!
cat: hello.txt: No such file or directory

但是写入到 1.log 日志文件中的内容是:

exec 1.sh start!

可以看到,并没有将错误输出到日志文件中,如果我们想将错误一并输出到日志文件,该怎么做呢?

使用以下办法:

sh 1.sh 2&>1 | tee 1.log

这下我们就能同时在控制台和日志文件中看到错误输出了。

科普

上述命令中使用到的 2>&1 是什么意思?

0 stdin,1 stdout,2 stderr

2>&1:将标准错误重定向至标准输出


« 使用 SSH Tunnel 连接中间件

» vim 使用