Unix:混淆使用Tee
手册中说明三通是一种“管件”工具。 这些案例[1]让我感到困惑:
1.情况
echo "foo bar" | sudo tee -a /path/to/some/file
2.案例
:w !sudo tee %
很难从案例中理解发球的逻辑。 发球台如何工作?
tee
通常用于分割程序的输出,以便它可以显示并保存在文件中。 在数据被另一个命令或程序改变之前,该命令可用于捕获中间输出。 tee命令读取标准输入,然后将其内容写入标准输出。 它同时将结果复制到指定的文件或变量中
tee [OPTION]... [FILE]...
例如
tee [ -a ] [ -i ]... [ File ]...
-a
将输出追加到文件的末尾,而不是覆盖它。
-i
忽略中断。
使用sudo
并在问题中以您的示例附加到文件
ls -l | sudo tee -a file.txt
tee
用于拆分命令管道,允许您将命令的输出保存到文件并沿管道向下发送。 在第一个例子中,你给出了::
echo "foo bar" | sudo tee -a /path/to/some/file
“foo bar”将被回显到标准输出并附加到/path/to/some/file
。 把T形管想象成管子中的“T”接头,将输出分成两个其他管。
tee
stdin
复制到stdout
(如cat
),并将所有内容写入指定的文件。 通过sudo
以这种方式使用它,可以将信息推送到特权模式,并且同时监视是否有正确的信息到达那里。
还要注意,由于在shell中处理重定向的方式几乎相同
sudo echo "foo bar" > /path/to/some/file
将不起作用,因为重定向将由主叫用户完成,而不是由sudo
目标用户完成。
上一篇: Unix: confusing use of the Tee
下一篇: How can I save a file I opened in vim as the wrong user?