命令的输出不会保存?竟然连 tee 命令都不会用!

不少状况下,咱们须要保存程序/命令的输出到本地,经常使用的一种方法是重定向,这也是一种很好的方法。但有个问题,若是你想要作后续操做,好比要统计输出的行数等,重定向就有困难了。bash

这时候,tee 命令就派上用场啦~app

tee 语法格式:spa

$ tee [OPTIONS] [FILE]

这个命令有 4 个主要选项,配合这些选项能够将结果存储在一个或者多个文件中。4 个选项介绍以下:命令行

Options:3d

Name Description
-a or –append 用于在现有文件的末尾追加写入数据
-i or –ignore-interrupts 用于忽略中断信号
–help 用于显示此命令的全部可用选项
–version 用于显示命令的当前版本

Files:code

即目标文件,能够是一个或者多个文件,用于存储 tee 命令的输出。blog

1. tee 命令基础用法

在 Linux 中,咱们可使用 ls -la 用来查看当前目录里文件的详细信息,想必你们都用过。如今,咱们想要保存 ls -la 命令的输出到文件 output.txt 中,咱们能够这样操做:ip

$ ls -la | tee output.txt 
$ cat output.txt

Output:
在这里,第一个命令将 ls -la 的输出显示到终端,并将输出写入到文件 output.txt 。第二个命令显示了 output.txt 文件的具体内容,以下图所示:开发

2. 将输出追加到现有文件中

若是咱们使用带有 -a 选项的 tee 命令的话,那么它会将命令的输出追加写入到现有文件,不会覆盖该文件原有的内容。rem

例如,咱们想将 pwd 命令的输出追加到已有文件 output.txt 的末尾,能够这样运行如下命令:

$ pwd | tee -a output.txt 
$ cat output.txt

在这里,第一个命令将 pwd 的输出显示到终端,并在 output.txt 文件的末尾追加 pwd 的输出。第二个命令则用于查看输出文件的内容。以下图所示, output.txt 文件包含前一个示例和当前示例的输出

[图]

3. 输出写入多个文件

tee 命令也能够将各类命令的输出存储到多个文件中。这种状况下,咱们须要使用空格隔开这些文件名。好比,咱们想将 date 命令的输出存储到两个文件 output1.txt 和 output2.txt 中,咱们能够这样执行命令:

$ date | tee output1.txt output2.txt
$ cat output1.txt output2.txt

Output:
在这里,第一个命令显示当前系统日期,并将值存储到两个文件 output1.txt 和 output2.txt 中。第二个命令显示这两个文件的内容,具体结果以下:

4. 忽略中断信号

你们知道,命令/程序在收到中断信号时,将被信号所中断。若是 tee 命令在执行过程当中不想被中断,咱们可使用带 -i 选项来忽略命令执行时的中断信号。这种状况下,即便咱们按下 CTRL + C ,命令仍会正确执行。例如:

$ wc -l output.txt | tee -i output3.txt 
$ cat output.txt 
$ cat output3.txt

Output:
在这里,第一个命令是计算 output.txt 文件的总行数,并将输出存储到文件 output3.txt 中。第二个命令显示了 output.txt 文件的具体内容,而第三个命令显示 output3.txt 的内容,它与 wc -l output.txt 的输出相同。

5. 将 tee 命令输出经过管道传递给另外一个命令

咱们可使用管道将 tee 命令的输出传递给另外一个命令。在本例子中,ls 命令将输出传递给 tee 命令,tee 命令的输出传递给 wc 命令,以下所示:

$ ls | tee output4.txt | wc -lcw 
$ ls 
$ cat output4.txt

Output:
在这里,第一个命令用于将 ls 命令的输出写入文件 output4.txt ,并计算 output4.txt 的行数、字数和字符数。第二个命令用于显示 ls 命令的输出,第三个命令用于查看 output4.txt 文件的内容。

6. 使用 bash 脚本执行 tee 命令

除了 Linux 命令,tee 命令也可将 bash 脚本输出写入到文件中。好比,咱们使用如下代码建立名为 add.sh 的 bash 脚本,该脚本将从命令行参数中获取两个输入数字,并打印这两个数字的和。

add.sh

#!/bin/bash
a = $1 
b = $2 
((result= $a + $b))
echo "The addition of $a+$b=$result"

若是咱们想使用 tee 命令将 add.sh 脚本的输出写入到文件 result.txt 中,咱们能够这样操做:

$ bash add.sh 50 90 | tee result.txt  
$ cat result.txt

Output:
在这个例子里,数字 50 和 90 做为命令行参数传递给脚本 add.sh,而后它的输出经过 tee 命令写入到文件 result.txt 中。以后咱们再用 cat 命令来查看 result.txt 文件的内容:

7. 隐藏 tee 输出

若是咱们想要将目标命令的输出直接写入文件而不在终端中显示,那咱们能够将 tee 命令结果重定向到 /dev/null 中,好比:

$ df | tee output5.txt > /dev/null 
$ cat output5.txt

Output:

在这里,第一个命令用于将 df 命令的输出写入文件 output5.txt 中,同时命令的结果不回显在终端中。第二个命令用于查看 output5.txt 文件内容 。

你们都学会了吗?

-----------------

我是良许,世界500强外企 Linux 开发工程师,专业生产 Linux 干货。欢迎关注个人公众号「良许Linux」,回复「1024」获取最新最全的技术资料,回复「入群」进入高手如云技术交流群。

相关文章
相关标签/搜索