当前位置: 首页>>技术教程>>正文


使用T恤有什么意义吗?

, ,

问题描述

为什么几乎所有关于将文本附加到系统文件(如fstab/etc/apt/sources.list.d/<name>.list)的说明都涉及使用teeecho来附加所述文本?

以下示例为例:以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显示他们的md5sums是相同的,这让我回到我原来的问题:

为什么| tee <FILENAME>在Ubuntu文档中如此普遍,这只是一个好习惯,否则只是使用示例2而不是将输出从echo传递给tee会不会更容易?

最佳解决方案

有一点不同:tee复制输出:它将它发送到文件和显示器。

但还有更多:

  • 例如,如果要一次将一些字符串写入两个文件,可以使用的tee命令是:

     echo "some text" | tee file1 > file2  
    
  • T恤可以帮助您的另一件事是在使用sudo时避免一个问题。正常输出重定向操作符始终使用您的用户权限执行,当您在生成STDOUT文本的命令前面编写sudo时也是如此。换句话说,如果您没有写入该文件的权限,这将失败:

     sudo echo "something" > bar  
    

    但是通过发球台,一切都会顺利进行:

    echo "something" | sudo tee bar  
    

来自this site的2个示例。还有一些。

次佳解决方案

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

它是文本的tee -a及其补充,>>

我不相信所有的shell都支持>>功能,所以这就是tee更常用的原因。 (想想只是普通的旧sh)。 Tee是一个命令,而>>是一个操作员。

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

使用tee还允许你sudo JUST该命令,因此你不必sudo整个语句,如在sudo sh -c "echo foo > bar"中。 tee还允许您分割输出。当然,所有这一切都可以在man tee中看到。这主要是您个人的偏好。

有关进一步阅读,请参阅herehere

第三种解决方案

tee获取标准输入流并将其写入标准输出流和文件流。如果它可以帮助人们记住,命令名称来自管道中的T-splitter。有一个很好的Wikipedia article,我在那里了解了命令名称的来源。

command-line,tee,ubuntu

command-line,tee,ubuntu

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2180.html,未经允许,请勿转载。