linux - 简单的 T 恤示例

标签 linux shell tee

有人可以解释为什么 tee 在这里工作吗:

echo "testtext" | tee file1 > file2

我的理解是 tee 复制输入并将 1 打印到屏幕。

上面的例子允许 echo 的输出被发送到 2 个文件,第一个重定向到第二个。

我希望“testtext”被打印到屏幕上并通过 file1 并登陆 file2。类似于以下示例中的文本如何仅在 file2 中结束。

echo "testtext" > file1 > file2

谁能解释一下我的理解中缺少什么?

编辑

是不是因为它写入文件然后写入被重定向的标准输出?

最佳答案

您的描述是正确的:tee 从 stdin 接收数据并将其写入文件和 stdout。但是,当您将 tee 的标准输出重定向到另一个文件时,显然没有任何内容写入终端,因为数据最终位于第二个文件中。

Is it because its writing to file and then to stdout which gets redirected?

没错。

您尝试做的事情可以这样完成(演示 tee 的工作原理):

$ echo "testtext" | tee file1 | tee file2
testtext

但是由于来自 gnu coreutils 的 tee 接受要指定的多个输出文件,所以可以这样做:

$ echo "testtext" | tee file1 file2
testtext

但是您认为通过 file1 并登陆 file2 的想法是不正确的。您的 shell 示例:

echo "testtext" > file1 > file2

使 shell 打开文件 file1file2 进行写入,这有效地截断了它们,并且由于 stdout 只能直接重定向到另一个文件,因此只有最后一个重定向有效(因为它覆盖了之前的)。

关于linux - 简单的 T 恤示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30765730/

相关文章:

regex - 使用 bash 脚本查找 $...$ 分隔符之间的所有文本

bash - 如何发球到标准错误?

c - 如何用同一个缓冲区写入两个不同的地方? (C-系统调用)

ruby - "cannot find -lucontext"在新推送的 docker 镜像 ruby​​ :2. 7.4-alpine3.13 上安装一些 ruby​​gems 时

c - 以毫秒和微秒精度测量 POSIX 中耗时的最佳方法是什么?

linux - 列出虚拟机工作目录的脚本

shell - 导出环境变量

linux - 如何在 linux 中捕获 "sort -c"的输出

linux - 在Ubuntu中使用Mono运行电子表格应用

linux - 如何: Progress bar in bash