tee 与重定向/附加有何不同?

tee 与重定向/附加有何不同?

如果我们想将刚刚在 stdin 中写入的内容复制粘贴到 stdout,我们可以使用重定向>或追加>>

tee从 stdin 写入到 stdout 有何不同?

答案1

tee有一个输入并且输出(因此得名,以管道中使用的三通组件命名)。使用>>>有一个输入进行重定向,并且输出。

使用tee,您可以重定向标准输入两个都到标准输出(第二个副本)到指定为 的参数的文件tee。重定向>>>不能这样做。

例如,如果您输入:

ls -l | tee file-list

您会在终端上看到目录列表它同时被复制到文件中file-list。但是如果你输入

ls -l > file-list

存储目录列表仅有的在文件中file-list,终端上没有输出。

答案2

你问这个问题的背景很重要。

例子:

cat one_file > another_file

当您执行此操作时,cat不会打开another_file.您的 shell 打开另一个文件并将其标准输出设置cat为该文件文件描述符

如果您尝试写入需要 root 权限的文件,这可能会出现问题。所以这很可能行不通。

sudo echo 1 > /some/root/owned/file

上面的shell/some/root/owned/file在执行之前尝试打开sudo并且没有权限。

这在哪里有效:

echo 1 | sudo tee /some/root/owned/file

这是因为tee它已作为 root 运行,并且tee在此上下文中打开文件。不是外壳

答案3

>, >>使用或将输出重定向到文件的区别command | tee -a filename在于,tee您可以设置模式可以以不同的方式处理错误并且球座可以写入/附加到文件和终端。有时人们使用球座因为他们想在终端中查看命令的输出并将其保存到文件中,所以>/>>不能这样做。

相关内容