爱技术 & 爱分享
爱蛋蛋 & 爱生活

tee命令

用途

tee命令用于将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的stdin。

简单的说就是把数据重定向到给定文件和屏幕上,即显示程序的输出并将其复制到一个或多个文件。


21

存在缓存机制,每1024个字节将输出一次。若从管道接收输入数据,应该是缓冲区满,才将数据转存到指定的文件中。

若文件内容不到1024个字节,则接收完从标准输入设备读入的数据后,将刷新一次缓冲区,并转存数据到指定文件。

注意:这里有一个问题,如果输出数据的程序coredump了,那么这里屏幕上和文件中的数据是不完整的,也就是说比起直接输出到文件或者屏幕上会有一定的数据丢失。如果是调试程序的话,不建议用这个命令,因为很有可能会丢失程序最后的输出,影响程序调试。

用法

tee [-ai][--help][--version][文件...]

参数

参数 释义
-a或–append 附加到既有文件的后面,而非覆盖它
-i或–ignore-interrupts 忽略中断信号
–help 在线帮助
–version 显示版本信息

退出状态

此命令返回以下退出值:

项目 描述
0 标准输入被成功地复制到所有输出文件中
>0 发生错误

注:如果无法成功写到任何已成功打开的 File 操作数,那么将继续写到其他已成功打开的 File 操作数以及标准输出,但退出值将会是 >0。

然后让我们来解释一下之前放的那张图

ls -l | tee file.txt | less

ls -l 的输出会被重定向到 file.txt 和 less 中,但是在 less中查看输出时,会看到file.txt 的存在,但是字节数为0,也就是说还没有写入到 file.txt 中。

例子:

ps -ef | tee program.ps

这会在显示设备上显示 ps -ef 命令的标准输出,同时会将它的副本保存在 program.ps 文件中。如果 program.ps 文件已存在,那么除非指定了 set 内置命令的 noclobber 选项,否则会删除和替换该文件。

ls -l | tee -a program.ls

这会在显示设备上显示 ls -l 的标准输出,并且同时将它的一个副本追加至 program.ls 文件的末尾。

系统会显示类似以下内容的信息,并且 program.ls 文件包含相同信息:

-rw-rw-rw-   1 jones   staff   2301   Sep 19    08:53 161414
-rw-rw-rw-   1 jones   staff   6317   Aug 31    13:17 def.rpt
-rw-rw-rw-   1 jones   staff   5550   Sep 10    14:13 try.doc
赞(0) 传送门
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。墨影 » tee命令