我们一定有着这样的烦恼,使用 Linux 中的命令写入文件的时候,控制台是不显示写入的内容,往控制台写入内容的时候又无法往文件中写入。如果我想一边写入文件一遍还要在控制台显示对于单向的管道来说是做不到的。
$ echo "secret"
secret
$ echo "secret" > secret.txt
这时候 tee
就应运而生,它接受一个标准输入,可以将内容输出到标准输出和多个文件。
$ echo "secret" | tee secret.txt
secret
$ cat secret.txt
secret
或者多个文件
$ echo "secret" | tee secret1.txt secret2.txt
secret
$ cat secret1.txt
secret
$ cat secret2.txt
secret
更为常见的一个场景是当前文件没有权限写入
$ touch secret3.txt
$ chmod 447 secret3.txt // 模拟当前用户没有写入权限
$ sudo echo "secret" > secret3.txt
zsh: permission denied: secret3.txt // echo 是 sudo,但是重定向不是,所以是无法写入的
$ echo "secret" | sudo tee secret3.txt
secret
$ cat secret3.txt // success
secret
再看一个 vim 的场景
你肯定不想编辑了半天的文件写入不了,需要重新来过
$ vi secret3.txt
// 修改一些内容
$ :wq
E45: 'readonly' option is set (add ! to override)
$ :w !sudo tee % // success,% 为一个变量,内容为当前文件名
网友评论