为什么几乎所有关于将文本附加到系统文件的指令fstab
都/etc/apt/sources.list.d/<name>.list
涉及使用tee
和 echo
附加所述文本?
以以下示例为例,它们运行以 root 身份:
## 1
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | tee -a file1
## 2
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' >> file2
运行diff -u file1 file2
没有返回任何内容;运行md5sum file1 file2
表明它们的校验和相同,这让我回到了我最初的问题:
为什么| tee <FILENAME>
在 Ubuntu 文档中如此流行,这只是一种好的做法,否则直接使用示例 2 而不是将输出从 传递到 不是更容易echo
吗tee
?
答案1
有一个区别: tee 重复输出:它将其发送到文件和显示器。
但还有更多:
例如,如果您想同时将一些字符串写入两个文件,则可以使用的带有 tee 的命令是:
echo "some text" | tee file1 > file2
tee 还能帮助您避免使用 sudo 时的一个问题。正常的输出重定向操作符始终以您的用户权限执行,当您在生成 STDOUT 文本的命令前面写入 sudo 时也是如此。换句话说,如果您没有写入该文件的权限,此操作将失败:
sudo echo "something" > bar
但有了 tee,一切都会顺利:
echo "something" | sudo tee bar
2 个例子来自本网站。它还有更多。
答案2
tee
获取标准输入流并将其写入两个都标准输出流和文件流。如果能帮助人们记住,命令名称来自管道中的 T 型分离器。有一个不错的维基百科文章在那里我了解了命令名称的由来。