从标准输入中读取数据,然后写入标准输出和文件
如果你想将输出内容记录下来,同时又想输出到屏幕,就可以使用tee命令。
命令行语法格式
tee [OPTION]… [FILE]…
命令支持的选项及含义
-a, –append
将内容追加到FILE中。默认情况下,会覆盖FILE中的内容。
-i, –ignore-interrupts
忽略中断信号。
-p, –output-error[=MODE]
设置在发生写错误(write error)的时候的行为。长选项–output-error的MODE支持如下值:
- warn:当打开或者输出发生错误时,发出警告,包括管道的错误。继续向打开的文件/管道写入。如果输出有任何错误,退出状态都为失败。
- warn-nopipe:当打开或者输出时发生错误,发出警告,但是管道除外。继续向打开的文件/管道写入,不退出。如果发生了错误,退出状态都为失败。这个是默认值;使用简写格式的-p也表示MODE为warn-nopipe。
- exit:打开或者输出发生错误的时候,退出。
- exit-nopipe:打开或者输出发生错误的时候,退出。但是管道除外。
其中,–output-error在未指定MODE的情况下,当写入管道发生错误时,会立即退出,并且诊断写入非管道输出的错误。
–help
显示帮助信息并退出。
–version
显示版本信息并退出。
使用示例
有时候你下载了一个文件,下载完成后我们会计算文件的校验和,我们通常这么做:
# wget https://example.com/some.iso && sha1sum some.iso
但是有了tee命令之后,我们可以这么做:
# wget -O – https://example.com/dvd.iso | tee >(sha1sum > dvd.sha1) > dvd.iso
上面的命令使用了“进程替换(>(command))”,需要SHELL支持该功能。如果SHELL不支持进程替换,可以使用下面的命令:
# wget -O – https://example.com/dvd.iso | tee dvd.iso | sha1sum > dvd.sha1
有关进程替换的内容可以参考在线手册。
参考文献
- man 1 tee, version GNU coreutils 8.26
- 在线手册:http://www.gnu.org/software/coreutils/tee
更新日志
- 04/18/2017 创建文章
- 06/08/2018 修改文章内容和结构