海绵和T恤的区别

问题描述 投票:0回答:2

在做一些工作时,我发现这个“sponge”命令与“tee”的作用相同,但找不到何时最好使用其中之一。

有人可以解释一下吗?

linux tee
2个回答
46
投票

他们中没有人吸收stderr;仅标准输出。 'tee' 在 stdout 和文件上写入 stdin。 'sponge' 仅在文件上写入 stdin;没有错误,没有输出。 (即:与 'tee' 不同,'sponge' 不会写在 stdout 上)。 此外,

“海绵在打开输出文件之前吸收所有输入”

(来自其手册)

它们之间的区别非常相关:“tee”“读取一个字节”和“写入该字节”; 'sponge' 等待接收所有输入,然后写入。


9
投票

在实践中,如果你进行迭代处理,会有很大的差异; 由于 tee 将逐字节读取,如果源文件也是目标文件,则由于强制重定向,您最终可能会得到空白文件。 Sponge,将在开始写入打开的文件之前读取所有输入。

tee 不会产生所需的输出

tf=/tmp/simple
jq -n '.name="Doe"' > $tf
cat $tf
> { "name": "Doe" }
jq '.name' $tf | tee $tf
cat $tf
> 
> #no output, file is blank

海绵会产生所需的输出

tf=/tmp/simple
jq -n '.name="Doe"' > $tf
cat $tf
> { "name": "Doe" }
jq '.name' $tf | sponge $tf
cat $tf
> "Doe"
> # we got the expected output
© www.soinside.com 2019 - 2024. All rights reserved.