使用 tee 有什么意义吗?

使用 tee 有什么意义吗?

为什么几乎所有关于将文本附加到系统文件的指令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 而不是将输出从 传递到 不是更容易echotee

答案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 型分离器。有一个不错的维基百科文章在那里我了解了命令名称的由来。

在此处输入图片描述 在此处输入图片描述

答案3

首先,tee本身不会附加文本, 也不会>

它是tee -a及其补充,>>即附加文本。

我不相信所有 shell 都支持该>>功能,所以tee更常用。(想想普通的sh)。Tee 是一个命令,而>>是一个运算符。

如果您使用(我个人最喜欢的)bash>并且>>会更好/更容易。

使用tee还允许您只 sudo 该命令,这样您就不必 sudo 整个语句,就像 一样sudo sh -c "echo foo > bar"tee还允许您拆分输出。当然,所有这些都可以在 中看到man tee。这主要只是您的个人偏好。

如需进一步了解,请参阅这里这里

相关内容