Linux命令之保存命令结果到文件并且输出到屏幕tee

概述

tee命令是一个命令行工具,它从标准输入读取数据,同时将结果打印到文件中和标准输出到屏幕中。

即我们在写脚本时会打印一些提示,我们既希望它能输出到屏幕上给使用者提示,也希望它保存到日志文件中,方便以后查看,那么我们可以使用该命令来完成。

ls /root/ > log.txt命令也可以将命令的输出保存到log.txt文件中,但却不会把命令的输出显示到屏幕上了。而如果我们同时希望它既输出到屏幕又保存到文件中,可以这样写:ls /root/ | tee log.txt

语法

tee命令的基本语法如下:

tee [选项] [参数]

常用选项如下:

选项 描述
-a 将命令输出附加到文件的后面,而非覆盖它
-i 忽略中断信号
–help 查看帮助信息
–version 显示版本信息

参数就是要保存数据的文件。

使用

基本使用

ls /root/命令执行的输出结果同时显示到屏幕并且保存到log.txt文件中。

ls /root/ | tee log.txt

命令输出保存到多个文件

还可以将命令的输出保存到多个文件中,多个文件路径通过空格进行分隔。如下:

ls /root/ | tee log1.txt log2.txt log3.txt

静默输出到文件

我们希望将命令的输出保存到文件,但是不想要输出结果显示在屏幕上了,那么可以将输出重定向到/dev/null

ls /root/ | tee log.txt > /dev/null

命令输出追加保存到文件

默认情况下,tee命令每次执行都会覆盖文件的原有内容,如果想要追加防止覆盖原有内容则可以使用-a--append选项。

ls /root/ | tee log.txt
date | tee -a log.txt

将一个命令的输出重定向到另一个命令

我们希望将一个命令的输出结果既保存到某个文件中,又希望该输出结果能重定向输出到另外一个命令。如:

# 统计/etc/passwd文件中root的行数
grep 'root' /etc/passwd | wc -l

# 但我们希望将grep命令的查询结果保存到test.txt中,并且也统计出现行数,那么就可以使用tee命令
grep 'root' /etc/passwd | tee test.txt | wc -l

将函数所有输出保存到文件中

如果在shell脚本中函数有多条输出,可能是日志也可能是提示,我们希望它既能显示在屏幕上,也会保存到日志文件中,方便以后查看,那么我们可以直接写一个主函数,然后将主函数中调用其他函数,最后在主函数后面使用tee命令将所有函数的所有输出都打印到屏幕上并且保存到文件中:

#!/bin/bash

main(){
 local x=1
 local y=2
 echo "compare starting..."
 if [ $x -eq $y ]; then
    echo "x==y"
 else
    echo "x!=y"
 fi
 echo "compare ending..."
}
main | tee -a log.txt #将main函数的所有输出都打印到屏幕上并保存到文件中
上一篇:LeetCode199 二叉树的右视图


下一篇:谷歌浏览器报ERR_HTTP2_PROTOCOL_ERROR错误的问题