tee命令从标准输入读取内容并同时写入标准输出与一个或多个文件。tee命令常与管道以及其他命令结合使用。

在本教程中,我们将说明如何使用tee命令和常见的选项。这其中包括使用tee写入多个文件,追加到文件,忽略中断,隐藏tee命令终端标准输出,tee与sudo组合使用。

在讨论如何使用tee命令之前,让我们先回顾一下基本语法,这是tee命令的基本语法形式tee [OPTIONS] [FILE]

FILE可以是一个或多个文件,OPTIONS是tee的选项,以下是一些常用的选项。

-a/--append表示追加到指定的文件,如果你不想文件的内容被覆盖请使用这个选项。在没有该选项时,tee命令将会覆盖文件已存在的内容。

-i/--ignore-interrupts表示忽略中断信号,也就是说会忽略ctrl+c--help表示查看所有可用的选项。

写入文件

tee命令的最基本用法是将另一个命令的标准输出写入到文件。除了写入单个文件之外tee也可以写入多个文件。

如你需要写入到多个文件,只需在tee命令之后指定多个文件名并使用空格分隔的文件名。

如果您不想tee命令写入到标准输出,通常是终端的显示输出,您只需将其重定向到空设备/dev/null

echo "myfreax" | tee file1 file2 #写入到多个文件中

command | tee -a file.out #追加内容到文件

command | tee -i file.out #忽略中断命令

command | tee file.out >/dev/null #隐藏tee的标准输出

tee与sudo重定向

如果您尝试将sudo命令的输出重定向到用户没有写权限的文件,则会收到权限拒绝的错误消息permission denied

例如命令sudo echo "test" > /root/file.txt使用echo重定向操作符> ,将标准输出重定向到/root/file.txt文件。

你将会收到错误消息bash: /root/file.txt: Permission denied。

之所以会这样,是因为标准输出的重定向>是以您登录的用户而不是sudo指定的用户运行。重定向在调用sudo命令之前发生。

一种解决方案是使用sudo sh -c以root用户创建子shell进程运行命令。另一种解决方是将普通用户的标准输出通过管道传递给到tee命令

sudo echo "test" > /root/file.txt
bash: /root/file.txt: Permission denied
echo "newline" | sudo tee -a /etc/file.conf

结论

到目前为止,您应该很好地理解如何使用tee命令。如果您有任何问题或反馈。