使用

1
2
3
4
5
6
7
8
$ ll | tee test

total 20
-rw-------. 1 vagrant vagrant 382 May 29 01:16 nohup.out
-rw-rw-r--. 1 vagrant vagrant 51 May 29 10:17 out.txt
-rw-rw-r--. 1 vagrant vagrant 297 May 29 10:53 test
drwxrwxr-x. 21 vagrant vagrant 4096 May 29 09:19 wxnacy.github.io
-rw-rw-r--. 1 vagrant vagrant 1406 May 29 06:22 wxnacy.log
1
2
3
4
5
6
7
8
$ cat test

total 20
-rw-------. 1 vagrant vagrant 382 May 29 01:16 nohup.out
-rw-rw-r--. 1 vagrant vagrant 51 May 29 10:17 out.txt
-rw-rw-r--. 1 vagrant vagrant 297 May 29 10:53 test
drwxrwxr-x. 21 vagrant vagrant 4096 May 29 09:19 wxnacy.github.io
-rw-rw-r--. 1 vagrant vagrant 1406 May 29 06:22 wxnacy.log

可以看到,ll 命令同时输出到 stdout 和文件 test

那它和 echo > 有什么区别呢

1
2
3
4
5
$ echo `ll` > test
$ cat test


total 20 -rw-------. 1 vagrant vagrant 382 May 29 01:16 nohup.out -rw-rw-r--. 1 vagrant vagrant 51 May 29 10:17 out.txt -rw-rw-r--. 1 vagrant vagrant 297 May 29 10:15 test drwxrwxr-x. 21 vagrant vagrant 4096 May 29 09:19 wxnacy.github.io -rw-rw-r--. 1 vagrant vagrant 1406 May 29 06:22 wxnacy.log

除了直观的 \n 没有正确输出到文件外,最大的区别在于,如果当前用户没有对输出文件权限时,不能方便的进行输入

1
2
3
$ sudo echo `ll` > /var/log/test

-bash: /var/log/test: Permission denied

> 会将命令分成两部分,sudo 并不能作用到 /var/log/test 中,使用 tee 就没问题

1
$ ll | sudo tee /var/log/test

参数

  • -a:向文件中重定向时使用追加模式;
  • -i:忽略中断(interrupt)信号。

-a 相当于 >> 可以将内容追加的方式输出到文件中

1
$ ll | tee -a test

更多实用

stdin

1
2
3
4
5
6
7
8
$ ll | tee test || cat -n

total 20
-rw-------. 1 vagrant vagrant 382 May 29 01:16 nohup.out
-rw-rw-r--. 1 vagrant vagrant 51 May 29 10:17 out.txt
-rw-rw-r--. 1 vagrant vagrant 297 May 29 10:53 test
drwxrwxr-x. 21 vagrant vagrant 4096 May 29 09:19 wxnacy.github.io
-rw-rw-r--. 1 vagrant vagrant 1406 May 29 06:22 wxnacy.log

cat 输入

1
2
3
4
5
6
7
8
9
$ cat <<EOF | tee test
< Hello World # 输入目标文本
< EOF # 代表结束

Hello World

$ cat test

Hello World
03-17 03:24