如果我们想将刚刚在 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
您可以设置模式可以以不同的方式处理错误并且球座可以写入/附加到文件和终端。有时人们使用球座因为他们想在终端中查看命令的输出并将其保存到文件中,所以>/>>
不能这样做。