mat*_*dev 11
他们中没有一个人沉浸在stderr中 ; 只有标准.' tee ' 在stdout和文件上写stdin.' sponge ' 只将stdin写在文件上; 没有错误,没有输出.(即:与' tee ' 不同,' 海绵 '不会写在标准输出上).除了,
"在打开输出文件之前,海绵吸收了所有输入"
(来自其手册)
它们之间的这种差异是非常相关的:' tee '"读取一个字节","写入该字节"; ' sponge '等待接收所有输入,然后写下来.
阅读手册页很有帮助.
小智 5
在实践中,如果你进行迭代处理,会有很大的差异;由于 tee 将逐字节读取,如果您的源文件也是目标文件,则由于强制重定向,您最终可能会得到空白文件。Sponge,将在开始写入打开的文件之前读取所有输入。
tf=/tmp/simple
jq -n '.name="Doe"' > $tf
cat $tf
> { "name": "Doe" }
jq '.name' $tf | tee $tf
cat $tf
>
> #no output, file is blank
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2383 次 |
| 最近记录: |