tee命令意外或空输出

时间:2019-06-04 21:11:07

标签: bash centos

echo "hello" | tee test.txt
cat test.txt
sudo sed -e "s|abc|def|g" test.txt | tee test.txt
cat test.txt

输出: 第二个命令和最后一个命令的输出不同,因为命令相同。

问题: 上面脚本中的以下行给出了输出,但是为什么不将其重定向到输出文件?

sudo sed -e "s|abc|def|g" test.txt

2 个答案:

答案 0 :(得分:2)

sudo sed -e "s|abc|def|g" test.txt | tee test.txt

在同一命令行中读取和写入test.txt容易出错。 sed试图在tee想要截断并写入文件的同时读取文件。

您可以使用sed -i修改文件到位。不需要tee。 (也不需要sudo。您已创建文件,没有理由要求root用户访问权限来读取它。)

sed -e "s|abc|def|g" -i test.txt

答案 1 :(得分:2)

输入和输出都不应使用相同的文件。

tee test.txt正在启动时清空输出文件。如果在sed读取文件之前发生这种情况,sed将看到一个空文件。由于您运行的是sedsudo,因此可能需要更长的启动时间,因此很有可能。