Tee 命令

有时候我们需要把命令输出的内容保存为日志, 还想着实时看到命令输出的内容, 怎么办?

tee - read from standard input and write to standard output and files

从标准输入中读取, 输出的同时并写入到文件中。

举几个栗子:

1.输出的同时写入到文件中:

for i in {1..9};do > $RANDOM; done #创建了9个文件
➤ ls #查看一下, 的确创建成功了.
12681  16993  20566  21822  22742  25812  31954  5965  9458
➤ ls | tee files_of_here #然后用tee将输出保存到文件中
12681
16993
20566
21822
22742
25812
31954
5965
9458
files_of_here #这里有些奇怪, 为什么ls的时候多了一个这样的文件呢?
➤ cat files_of_here 
12681
16993
20566
21822
22742
25812
31954
5965
9458
files_of_here # 解答上面的问题, 因为ls和tee是同时进行的,
# 所以, tee 创建文件的时候, ls 还没读完整个目录中的文件名,
# 所以才会有一个files_of_here这样的文件, 如果还不明白, 看下面的例子.

再一个例子:

➤ ls | tee 000 #我们创建一个000的文件
12681
16993
20566
21822
22742
25812
31954
5965
9458
files_of_here
➤ cat 000
12681
16993
20566
21822
22742
25812
31954
5965
9458
files_of_here
➤ ls
000  12681  16993  20566  21822  22742  25812  31954  5965  9458  files_of_here
➤

看出区别了么? 由于ls和tee是同时进行的,所以谁先得到系统的资源是不一定的,当ls先读取目录之后,就不会输出tee创建的文件,而如果是tee先创建了文件,ls再读取目录的话,就会显示tee创建的新文件。

2.tee和管道

本来tee就是从管道中读取的, 不过, 他也能够输出到管道中, 起到一个数据中转的作用:

➤ cat resout 
Give me a...
... flag!
➤ cat resout | tee content_of_resout | grep flag
... flag!
➤ cat content_of_resout 
Give me a...
... flag!
➤

3.teevim

如果用vim打开了一个没有写权限的文件, 但是你已经写了很多东西, 那该怎么办?

tee来拯救你.

vim中命令模式下:

:w !sudo tee %

更多的解释在这里:http://stackoverflow.com/questions/2600783/how-does-the-vim-write-with-sudo-trick-work

results matching ""

    No results matching ""